[
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "GatewayError.ResourceExhausted",
      "SyncError.ServiceResourceConflict",
      "SyncError.AuthExpired",
      "SyncError.CredentialsRejected",
      "SyncError.AuthenticationUnsupported",
      "SyncError.CredentialUnreadable",
      "SyncError.ProviderUnavailable",
      "SyncError.ProviderTimeout",
      "SyncError.NotSupported",
      "GatewayError.NotFound",
      "SyncError.AccountNotFound",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "AccountConnectionsCompleteClassical",
    "idempotency": "non-idempotent",
    "method": "AccountConnections/complete_classical",
    "request_type": "traummail.gateway.v1.CompleteClassicalServiceConnectionRequest",
    "response_type": "traummail.gateway.v1.AccountConnection",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "GatewayError.NotFound",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "AccountConnectionsGet",
    "idempotency": "read-only",
    "method": "AccountConnections/get",
    "request_type": "traummail.gateway.v1.GetServiceConnectionRequest",
    "response_type": "traummail.gateway.v1.AccountConnection",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "GatewayError.AlreadyExists",
      "GatewayError.ResourceExhausted"
    ],
    "handler_identity": "AccountConnectionsPrepare",
    "idempotency": "non-idempotent",
    "method": "AccountConnections/prepare",
    "request_type": "traummail.gateway.v1.PrepareServiceConnectionRequest",
    "response_type": "traummail.gateway.v1.PrepareServiceConnectionResponse",
    "has_idempotency_key": true
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "GatewayError.ResourceExhausted",
      "SyncError.ProviderUnavailable",
      "SyncError.ProviderTimeout",
      "SyncError.NotSupported",
      "GatewayError.NotFound",
      "SyncError.AccountNotFound",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "AccountConnectionsStart",
    "idempotency": "non-idempotent",
    "method": "AccountConnections/start",
    "request_type": "traummail.gateway.v1.StartServiceConnectionRequest",
    "response_type": "traummail.gateway.v1.StartServiceConnectionResponse",
    "has_idempotency_key": true
  },
  {
    "auth": "session",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "GatewayError.NotFound",
      "GatewayError.ResourceExhausted"
    ],
    "handler_identity": "AccountInvitationsAnswer",
    "idempotency": "idempotent",
    "method": "AccountInvitations/answer",
    "request_type": "traummail.gateway.v1.AnswerAccountInvitationRequest",
    "response_type": "traummail.gateway.v1.AnswerAccountInvitationResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [
      "GatewayError.Unauthenticated"
    ],
    "handler_identity": "AccountInvitationsList",
    "idempotency": "read-only",
    "method": "AccountInvitations/list",
    "request_type": "traummail.gateway.v1.ListAccountInvitationsRequest",
    "response_type": "traummail.gateway.v1.ListAccountInvitationsResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument"
    ],
    "handler_identity": "AccountSharingGet",
    "idempotency": "read-only",
    "method": "AccountSharing/get",
    "request_type": "traummail.gateway.v1.GetAccountSharingRequest",
    "response_type": "traummail.gateway.v1.AccountSharing",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "GatewayError.NotFound",
      "GatewayError.AlreadyExists",
      "GatewayError.ResourceExhausted"
    ],
    "handler_identity": "AccountSharingInvite",
    "idempotency": "non-idempotent",
    "method": "AccountSharing/invite",
    "request_type": "traummail.gateway.v1.InviteAccountMemberRequest",
    "response_type": "traummail.gateway.v1.AccountInvitation",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument"
    ],
    "handler_identity": "AccountSharingRemoveMember",
    "idempotency": "idempotent",
    "method": "AccountSharing/remove_member",
    "request_type": "traummail.gateway.v1.RemoveAccountMemberRequest",
    "response_type": "traummail.gateway.v1.RemoveAccountMemberResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument"
    ],
    "handler_identity": "AccountSharingSetMemberRights",
    "idempotency": "idempotent",
    "method": "AccountSharing/set_member_rights",
    "request_type": "traummail.gateway.v1.SetAccountMemberRightsRequest",
    "response_type": "traummail.gateway.v1.SetAccountMemberRightsResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument"
    ],
    "handler_identity": "AccountSharingWithdrawInvitation",
    "idempotency": "idempotent",
    "method": "AccountSharing/withdraw_invitation",
    "request_type": "traummail.gateway.v1.WithdrawAccountInvitationRequest",
    "response_type": "traummail.gateway.v1.WithdrawAccountInvitationResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "SyncError.InvalidArgument",
      "SyncError.JobNotFound",
      "SyncError.NotFound",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "AccountSynchronizationsGet",
    "idempotency": "read-only",
    "method": "AccountSynchronizations/get",
    "request_type": "traummail.gateway.v1.GetSynchronizationRequest",
    "response_type": "traummail.gateway.v1.Synchronization",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "SyncError.InvalidArgument",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "AccountSynchronizationsGetCoverage",
    "idempotency": "read-only",
    "method": "AccountSynchronizations/get_coverage",
    "request_type": "traummail.gateway.v1.GetSynchronizationCoverageRequest",
    "response_type": "traummail.gateway.v1.GetSynchronizationCoverageResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "SyncError.InvalidArgument",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "AccountSynchronizationsList",
    "idempotency": "read-only",
    "method": "AccountSynchronizations/list",
    "request_type": "traummail.gateway.v1.ListSynchronizationsRequest",
    "response_type": "traummail.gateway.v1.ListSynchronizationsResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "SyncError.InvalidArgument",
      "SyncError.AccountNotFound",
      "SyncError.FailedPrecondition",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "AccountSynchronizationsStart",
    "idempotency": "non-idempotent",
    "method": "AccountSynchronizations/start",
    "request_type": "traummail.gateway.v1.StartSynchronizationRequest",
    "response_type": "traummail.gateway.v1.Operation",
    "has_idempotency_key": true
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "SyncError.InvalidArgument",
      "SyncError.AccountNotFound",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "AccountsDisconnect",
    "idempotency": "idempotent",
    "method": "Accounts/disconnect",
    "request_type": "traummail.gateway.v1.DisconnectAccountRequest",
    "response_type": "traummail.gateway.v1.Operation",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "SyncError.DependencyUnavailable",
      "SyncError.InvalidArgument",
      "SyncError.AccountNotFound",
      "SyncError.ResourceExhausted"
    ],
    "handler_identity": "AccountsGet",
    "idempotency": "read-only",
    "method": "Accounts/get",
    "request_type": "traummail.gateway.v1.GetAccountRequest",
    "response_type": "traummail.gateway.v1.Account",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition"
    ],
    "handler_identity": "AccountsGetConnectionSettings",
    "idempotency": "read-only",
    "method": "Accounts/get_connection_settings",
    "request_type": "traummail.gateway.v1.GetAccountConnectionSettingsRequest",
    "response_type": "traummail.gateway.v1.GetAccountConnectionSettingsResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition"
    ],
    "handler_identity": "AccountsGetPresentation",
    "idempotency": "read-only",
    "method": "Accounts/get_presentation",
    "request_type": "traummail.gateway.v1.GetAccountPresentationRequest",
    "response_type": "traummail.gateway.v1.GetAccountPresentationResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "SyncError.DependencyUnavailable",
      "SyncError.ResourceExhausted"
    ],
    "handler_identity": "AccountsList",
    "idempotency": "read-only",
    "method": "Accounts/list",
    "request_type": "traummail.gateway.v1.ListAccountsRequest",
    "response_type": "traummail.gateway.v1.ListAccountsResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "SyncError.InvalidArgument",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "AccountsListTimeline",
    "idempotency": "read-only",
    "method": "Accounts/list_timeline",
    "request_type": "traummail.gateway.v1.ListAccountTimelineRequest",
    "response_type": "traummail.gateway.v1.ListAccountTimelineResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "GatewayError.AccountPurge",
      "SyncError.FailedPrecondition",
      "SyncError.StateMismatch",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "AccountsPurge",
    "idempotency": "idempotent",
    "method": "Accounts/purge",
    "request_type": "traummail.gateway.v1.PurgeAccountRequest",
    "response_type": "traummail.gateway.v1.PurgeAccountResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "SyncError.AccountNotFound",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "AccountsRemoveProviderAgentOptin",
    "idempotency": "idempotent",
    "method": "Accounts/remove_provider_agent_optin",
    "request_type": "traummail.gateway.v1.RemoveProviderAgentOptinRequest",
    "response_type": "traummail.gateway.v1.RemoveProviderAgentOptinResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "SyncError.AccountNotFound",
      "SyncError.InvalidArgument",
      "SyncError.OperationNotFound",
      "SyncError.StateMismatch",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "AccountsRepair",
    "idempotency": "non-idempotent",
    "method": "Accounts/repair",
    "request_type": "traummail.gateway.v1.RepairAccountRequest",
    "response_type": "traummail.gateway.v1.Operation",
    "has_idempotency_key": true
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "GatewayError.ResourceExhausted",
      "SyncError.AccountNotFound",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "AccountsStartProviderAgentOptin",
    "idempotency": "non-idempotent",
    "method": "Accounts/start_provider_agent_optin",
    "request_type": "traummail.gateway.v1.StartProviderAgentOptinRequest",
    "response_type": "traummail.gateway.v1.StartProviderAgentOptinResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "GatewayError.ConcurrentModification",
      "GatewayError.ResourceExhausted"
    ],
    "handler_identity": "AccountsUpdate",
    "idempotency": "non-idempotent",
    "method": "Accounts/update",
    "request_type": "traummail.gateway.v1.UpdateAccountRequest",
    "response_type": "traummail.gateway.v1.UpdateAccountResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [],
    "handler_identity": "AdminAccountList",
    "idempotency": "read-only",
    "method": "AdminAccount/list",
    "request_type": "traummail.gateway.v1.ListAdminAccountsRequest",
    "response_type": "traummail.gateway.v1.ListAdminAccountsResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [],
    "handler_identity": "AdminAppList",
    "idempotency": "read-only",
    "method": "AdminApp/list",
    "request_type": "traummail.gateway.v1.ListAdminAppsRequest",
    "response_type": "traummail.gateway.v1.ListAdminAppsResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "GatewayError.AlreadyExists"
    ],
    "handler_identity": "AdminAppPairInboxClient",
    "idempotency": "non-idempotent",
    "method": "AdminApp/pair_inbox_client",
    "request_type": "traummail.gateway.v1.PairInboxClientRequest",
    "response_type": "traummail.gateway.v1.PairInboxClientResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [],
    "handler_identity": "AdminAppSetDelegatedLogin",
    "idempotency": "non-idempotent",
    "method": "AdminApp/set_delegated_login",
    "request_type": "traummail.gateway.v1.SetDelegatedLoginRequest",
    "response_type": "traummail.gateway.v1.SetDelegatedLoginResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [],
    "handler_identity": "AdminProviderIntegrationList",
    "idempotency": "read-only",
    "method": "AdminProviderIntegration/list",
    "request_type": "traummail.gateway.v1.ListProviderIntegrationsRequest",
    "response_type": "traummail.gateway.v1.ListProviderIntegrationsResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [],
    "handler_identity": "AdminProviderIntegrationRecheck",
    "idempotency": "idempotent",
    "method": "AdminProviderIntegration/recheck",
    "request_type": "traummail.gateway.v1.RecheckProviderIntegrationsRequest",
    "response_type": "traummail.gateway.v1.ListProviderIntegrationsResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [],
    "handler_identity": "AdminUserList",
    "idempotency": "read-only",
    "method": "AdminUser/list",
    "request_type": "traummail.gateway.v1.ListAdminUsersRequest",
    "response_type": "traummail.gateway.v1.ListAdminUsersResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [],
    "handler_identity": "AdminUserWhoami",
    "idempotency": "read-only",
    "method": "AdminUser/whoami",
    "request_type": "traummail.gateway.v1.AdminWhoamiRequest",
    "response_type": "traummail.gateway.v1.AdminUser",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [],
    "handler_identity": "AppCreate",
    "idempotency": "non-idempotent",
    "method": "App/create",
    "request_type": "traummail.gateway.v1.CreateAppRequest",
    "response_type": "traummail.gateway.v1.CreateAppResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [],
    "handler_identity": "AppDelete",
    "idempotency": "idempotent",
    "method": "App/delete",
    "request_type": "traummail.gateway.v1.DeleteAppRequest",
    "response_type": "traummail.gateway.v1.DeleteAppResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [],
    "handler_identity": "AppGet",
    "idempotency": "read-only",
    "method": "App/get",
    "request_type": "traummail.gateway.v1.GetAppRequest",
    "response_type": "traummail.gateway.v1.OidcApp",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [],
    "handler_identity": "AppList",
    "idempotency": "read-only",
    "method": "App/list",
    "request_type": "traummail.gateway.v1.ListAppsRequest",
    "response_type": "traummail.gateway.v1.ListAppsResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [],
    "handler_identity": "AppListGrants",
    "idempotency": "read-only",
    "method": "App/list_grants",
    "request_type": "traummail.gateway.v1.ListAppGrantsRequest",
    "response_type": "traummail.gateway.v1.ListAppGrantsResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [],
    "handler_identity": "AppRotateSecret",
    "idempotency": "non-idempotent",
    "method": "App/rotate_secret",
    "request_type": "traummail.gateway.v1.RotateSecretRequest",
    "response_type": "traummail.gateway.v1.RotateSecretResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [],
    "handler_identity": "AppUpdate",
    "idempotency": "non-idempotent",
    "method": "App/update",
    "request_type": "traummail.gateway.v1.UpdateAppRequest",
    "response_type": "traummail.gateway.v1.OidcApp",
    "has_idempotency_key": false
  },
  {
    "auth": "client",
    "errors": [],
    "handler_identity": "AppDelegatedLoginCreateLinkTicket",
    "idempotency": "non-idempotent",
    "method": "AppDelegatedLogin/create_link_ticket",
    "request_type": "traummail.gateway.v1.CreateDelegatedLinkTicketRequest",
    "response_type": "traummail.gateway.v1.CreateDelegatedLinkTicketResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "client",
    "errors": [],
    "handler_identity": "AppDelegatedLoginCreateTicket",
    "idempotency": "non-idempotent",
    "method": "AppDelegatedLogin/create_ticket",
    "request_type": "traummail.gateway.v1.CreateDelegatedLoginTicketRequest",
    "response_type": "traummail.gateway.v1.CreateDelegatedLoginTicketResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "client",
    "errors": [],
    "handler_identity": "AppDelegatedLoginProvision",
    "idempotency": "non-idempotent",
    "method": "AppDelegatedLogin/provision",
    "request_type": "traummail.gateway.v1.ProvisionDelegatedUserRequest",
    "response_type": "traummail.gateway.v1.ProvisionDelegatedUserResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.NotFound",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "GatewayError.AlreadyExists"
    ],
    "handler_identity": "AppGrantApprove",
    "idempotency": "non-idempotent",
    "method": "AppGrant/approve",
    "request_type": "traummail.gateway.v1.ApproveConsentRequest",
    "response_type": "traummail.gateway.v1.ApproveConsentResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [],
    "handler_identity": "AppGrantDeny",
    "idempotency": "non-idempotent",
    "method": "AppGrant/deny",
    "request_type": "traummail.gateway.v1.DenyConsentRequest",
    "response_type": "traummail.gateway.v1.DenyConsentResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [],
    "handler_identity": "AppGrantGet",
    "idempotency": "read-only",
    "method": "AppGrant/get",
    "request_type": "traummail.gateway.v1.GetConsentRequest",
    "response_type": "traummail.gateway.v1.ConsentRequest",
    "has_idempotency_key": false
  },
  {
    "auth": "public",
    "errors": [],
    "handler_identity": "AuthListLoginMethodsForUsername",
    "idempotency": "read-only",
    "method": "Auth/list_login_methods_for_username",
    "request_type": "traummail.gateway.v1.ListLoginMethodsForUsernameRequest",
    "response_type": "traummail.gateway.v1.ListLoginMethodsForUsernameResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [],
    "handler_identity": "AuthListSessions",
    "idempotency": "read-only",
    "method": "Auth/list_sessions",
    "request_type": "traummail.gateway.v1.ListSessionsRequest",
    "response_type": "traummail.gateway.v1.ListSessionsResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "public",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.InvalidArgument",
      "GatewayError.ResourceExhausted"
    ],
    "handler_identity": "AuthLogin",
    "idempotency": "non-idempotent",
    "method": "Auth/login",
    "request_type": "traummail.gateway.v1.LoginRequest",
    "response_type": "traummail.gateway.v1.LoginResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [],
    "handler_identity": "AuthLogout",
    "idempotency": "non-idempotent",
    "method": "Auth/logout",
    "request_type": "traummail.gateway.v1.LogoutRequest",
    "response_type": "traummail.gateway.v1.LogoutResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [],
    "handler_identity": "AuthRevokeSession",
    "idempotency": "non-idempotent",
    "method": "Auth/revoke_session",
    "request_type": "traummail.gateway.v1.RevokeSessionRequest",
    "response_type": "traummail.gateway.v1.RevokeSessionResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [],
    "handler_identity": "AuthWhoami",
    "idempotency": "read-only",
    "method": "Auth/whoami",
    "request_type": "traummail.gateway.v1.WhoamiRequest",
    "response_type": "traummail.gateway.v1.WhoamiResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "SyncError.AccountNotFound",
      "SyncError.DraftNotFound",
      "SyncError.NotSupported",
      "SyncError.InvalidArgument",
      "SyncError.StateMismatch",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "DraftsDelete",
    "idempotency": "idempotent",
    "method": "Drafts/delete",
    "request_type": "traummail.gateway.v1.DeleteDraftRequest",
    "response_type": "traummail.gateway.v1.Operation",
    "has_idempotency_key": true
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "SyncError.AccountNotFound",
      "SyncError.DraftNotFound",
      "SyncError.InvalidArgument",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "DraftsGet",
    "idempotency": "read-only",
    "method": "Drafts/get",
    "request_type": "traummail.gateway.v1.GetDraftRequest",
    "response_type": "traummail.gateway.v1.Draft",
    "has_idempotency_key": false
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "SyncError.AccountNotFound",
      "SyncError.InvalidArgument",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "DraftsList",
    "idempotency": "read-only",
    "method": "Drafts/list",
    "request_type": "traummail.gateway.v1.ListDraftsRequest",
    "response_type": "traummail.gateway.v1.ListDraftsResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "SyncError.AccountNotFound",
      "SyncError.DraftNotFound",
      "SyncError.CredentialsNotFound",
      "SyncError.AuthExpired",
      "SyncError.CredentialsRejected",
      "SyncError.AuthenticationUnsupported",
      "SyncError.CredentialUnreadable",
      "SyncError.ProviderUnavailable",
      "SyncError.ProviderTimeout",
      "SyncError.ProviderRateLimited",
      "SyncError.NotSupported",
      "SyncError.InvalidArgument",
      "SyncError.UploadRefStale",
      "SyncError.StateMismatch",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "DraftsPut",
    "idempotency": "non-idempotent",
    "method": "Drafts/put",
    "request_type": "traummail.gateway.v1.PutDraftRequest",
    "response_type": "traummail.gateway.v1.Operation",
    "has_idempotency_key": true
  },
  {
    "auth": "authenticated",
    "errors": [],
    "handler_identity": "EventConsumerConfigCreate",
    "idempotency": "non-idempotent",
    "method": "EventConsumerConfig/create",
    "request_type": "traummail.gateway.v1.CreateEventConsumerRequest",
    "response_type": "traummail.gateway.v1.CreateEventConsumerResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [],
    "handler_identity": "EventConsumerConfigDelete",
    "idempotency": "idempotent",
    "method": "EventConsumerConfig/delete",
    "request_type": "traummail.gateway.v1.DeleteEventConsumerRequest",
    "response_type": "traummail.gateway.v1.DeleteEventConsumerResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [],
    "handler_identity": "EventConsumerConfigGet",
    "idempotency": "read-only",
    "method": "EventConsumerConfig/get",
    "request_type": "traummail.gateway.v1.GetEventConsumerRequest",
    "response_type": "traummail.gateway.v1.EventConsumer",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [],
    "handler_identity": "EventConsumerConfigList",
    "idempotency": "read-only",
    "method": "EventConsumerConfig/list",
    "request_type": "traummail.gateway.v1.ListEventConsumersRequest",
    "response_type": "traummail.gateway.v1.ListEventConsumersResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [],
    "handler_identity": "EventConsumerConfigPause",
    "idempotency": "non-idempotent",
    "method": "EventConsumerConfig/pause",
    "request_type": "traummail.gateway.v1.PauseEventConsumerRequest",
    "response_type": "traummail.gateway.v1.EventConsumer",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [],
    "handler_identity": "EventConsumerConfigResume",
    "idempotency": "non-idempotent",
    "method": "EventConsumerConfig/resume",
    "request_type": "traummail.gateway.v1.ResumeEventConsumerRequest",
    "response_type": "traummail.gateway.v1.EventConsumer",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [],
    "handler_identity": "EventConsumerConfigUpdate",
    "idempotency": "non-idempotent",
    "method": "EventConsumerConfig/update",
    "request_type": "traummail.gateway.v1.UpdateEventConsumerRequest",
    "response_type": "traummail.gateway.v1.EventConsumer",
    "has_idempotency_key": false
  },
  {
    "auth": "bearer",
    "errors": [],
    "handler_identity": "EventsGet",
    "idempotency": "read-only",
    "method": "Events/get",
    "request_type": "traummail.gateway.v1.GetEventRequest",
    "response_type": "traummail.gateway.v1.Event",
    "has_idempotency_key": false
  },
  {
    "auth": "bearer",
    "errors": [],
    "handler_identity": "EventsList",
    "idempotency": "read-only",
    "method": "Events/list",
    "request_type": "traummail.gateway.v1.ListEventsRequest",
    "response_type": "traummail.gateway.v1.ListEventsResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "SyncError.AccountNotFound",
      "SyncError.CredentialsNotFound",
      "SyncError.AuthExpired",
      "SyncError.CredentialsRejected",
      "SyncError.AuthenticationUnsupported",
      "SyncError.CredentialUnreadable",
      "SyncError.ProviderUnavailable",
      "SyncError.ProviderTimeout",
      "SyncError.ProviderRateLimited",
      "SyncError.ProviderPermissionDenied",
      "SyncError.NotSupported",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "FromAddressSuggestionsListProviderFromAddressSuggestions",
    "idempotency": "read-only",
    "method": "FromAddressSuggestions/list_provider_from_address_suggestions",
    "request_type": "traummail.gateway.v1.ListProviderFromAddressSuggestionsRequest",
    "response_type": "traummail.gateway.v1.ListProviderFromAddressSuggestionsResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [],
    "handler_identity": "GrantList",
    "idempotency": "read-only",
    "method": "Grant/list",
    "request_type": "traummail.gateway.v1.ListGrantsRequest",
    "response_type": "traummail.gateway.v1.ListGrantsResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [],
    "handler_identity": "GrantRevoke",
    "idempotency": "idempotent",
    "method": "Grant/revoke",
    "request_type": "traummail.gateway.v1.RevokeGrantRequest",
    "response_type": "traummail.gateway.v1.RevokeGrantResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.FailedPrecondition"
    ],
    "handler_identity": "InboxMailboxConnectDescribe",
    "idempotency": "read-only",
    "method": "InboxMailboxConnect/describe",
    "request_type": "traummail.gateway.v1.DescribeInboxMailboxConnectRequest",
    "response_type": "traummail.gateway.v1.DescribeInboxMailboxConnectResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "GatewayError.ResourceExhausted"
    ],
    "handler_identity": "InboxMailboxConnectStart",
    "idempotency": "non-idempotent",
    "method": "InboxMailboxConnect/start",
    "request_type": "traummail.gateway.v1.StartInboxMailboxConnectRequest",
    "response_type": "traummail.gateway.v1.StartInboxMailboxConnectResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.InvalidArgument"
    ],
    "handler_identity": "MailDiscoveryDiscover",
    "idempotency": "read-only",
    "method": "MailDiscovery/discover",
    "request_type": "traummail.gateway.v1.DiscoverMailRequest",
    "response_type": "traummail.gateway.v1.DiscoverMailResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.InvalidArgument"
    ],
    "handler_identity": "MailProviderList",
    "idempotency": "read-only",
    "method": "MailProvider/list",
    "request_type": "traummail.gateway.v1.ListMailProvidersRequest",
    "response_type": "traummail.gateway.v1.ListMailProvidersResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "SyncError.AccountNotFound",
      "SyncError.InvalidArgument",
      "SyncError.NotSupported",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable",
      "SyncError.OperationNotFound"
    ],
    "handler_identity": "FoldersCreate",
    "idempotency": "idempotent",
    "method": "Folders/create",
    "request_type": "traummail.gateway.v1.CreateFolderRequest",
    "response_type": "traummail.gateway.v1.Operation",
    "has_idempotency_key": false
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "SyncError.AccountNotFound",
      "SyncError.InvalidArgument",
      "SyncError.NotSupported",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable",
      "SyncError.OperationNotFound"
    ],
    "handler_identity": "FoldersDelete",
    "idempotency": "idempotent",
    "method": "Folders/delete",
    "request_type": "traummail.gateway.v1.DeleteFolderRequest",
    "response_type": "traummail.gateway.v1.Operation",
    "has_idempotency_key": true
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "SyncError.AccountNotFound",
      "SyncError.CredentialsNotFound",
      "SyncError.AuthExpired",
      "SyncError.CredentialsRejected",
      "SyncError.AuthenticationUnsupported",
      "SyncError.CredentialUnreadable",
      "SyncError.ProviderUnavailable",
      "SyncError.ProviderTimeout",
      "SyncError.ProviderRateLimited",
      "SyncError.ProviderPermissionDenied",
      "SyncError.NotSupported",
      "SyncError.InvalidArgument",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "FoldersList",
    "idempotency": "read-only",
    "method": "Folders/list",
    "request_type": "traummail.gateway.v1.ListFoldersRequest",
    "response_type": "traummail.gateway.v1.ListFoldersResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "SyncError.AccountNotFound",
      "SyncError.InvalidArgument",
      "SyncError.NotSupported",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable",
      "SyncError.OperationNotFound"
    ],
    "handler_identity": "FoldersMove",
    "idempotency": "idempotent",
    "method": "Folders/move",
    "request_type": "traummail.gateway.v1.MoveFolderRequest",
    "response_type": "traummail.gateway.v1.Operation",
    "has_idempotency_key": true
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "SyncError.AccountNotFound",
      "SyncError.InvalidArgument",
      "SyncError.NotSupported",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable",
      "SyncError.OperationNotFound"
    ],
    "handler_identity": "FoldersRename",
    "idempotency": "idempotent",
    "method": "Folders/rename",
    "request_type": "traummail.gateway.v1.RenameFolderRequest",
    "response_type": "traummail.gateway.v1.Operation",
    "has_idempotency_key": true
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "SyncError.AccountNotFound",
      "SyncError.InvalidArgument",
      "SyncError.NotSupported",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable",
      "SyncError.OperationNotFound"
    ],
    "handler_identity": "LabelsCreate",
    "idempotency": "idempotent",
    "method": "Labels/create",
    "request_type": "traummail.gateway.v1.CreateLabelRequest",
    "response_type": "traummail.gateway.v1.Operation",
    "has_idempotency_key": true
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "SyncError.AccountNotFound",
      "SyncError.InvalidArgument",
      "SyncError.NotSupported",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable",
      "SyncError.OperationNotFound"
    ],
    "handler_identity": "LabelsDelete",
    "idempotency": "idempotent",
    "method": "Labels/delete",
    "request_type": "traummail.gateway.v1.DeleteLabelRequest",
    "response_type": "traummail.gateway.v1.Operation",
    "has_idempotency_key": true
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "SyncError.AccountNotFound",
      "SyncError.CredentialsNotFound",
      "SyncError.AuthExpired",
      "SyncError.CredentialsRejected",
      "SyncError.AuthenticationUnsupported",
      "SyncError.CredentialUnreadable",
      "SyncError.ProviderUnavailable",
      "SyncError.ProviderTimeout",
      "SyncError.ProviderRateLimited",
      "SyncError.ProviderPermissionDenied",
      "SyncError.NotSupported",
      "SyncError.InvalidArgument",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "LabelsList",
    "idempotency": "read-only",
    "method": "Labels/list",
    "request_type": "traummail.gateway.v1.ListLabelsRequest",
    "response_type": "traummail.gateway.v1.ListLabelsResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "SyncError.AccountNotFound",
      "SyncError.InvalidArgument",
      "SyncError.NotSupported",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable",
      "SyncError.OperationNotFound"
    ],
    "handler_identity": "LabelsUpdate",
    "idempotency": "idempotent",
    "method": "Labels/update",
    "request_type": "traummail.gateway.v1.UpdateLabelRequest",
    "response_type": "traummail.gateway.v1.Operation",
    "has_idempotency_key": true
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "SyncError.AccountNotFound",
      "SyncError.InvalidArgument",
      "SyncError.SubmissionNotFound",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "MessageSubmissionsCancel",
    "idempotency": "idempotent",
    "method": "MessageSubmissions/cancel",
    "request_type": "traummail.gateway.v1.CancelMessageSubmissionRequest",
    "response_type": "traummail.gateway.v1.MessageSubmission",
    "has_idempotency_key": false
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "SyncError.AccountNotFound",
      "SyncError.InvalidArgument",
      "SyncError.SubmissionNotFound",
      "SyncError.StateMismatch",
      "SyncError.NotSupported",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "MessageSubmissionsResolveFiling",
    "idempotency": "non-idempotent",
    "method": "MessageSubmissions/resolve_filing",
    "request_type": "traummail.gateway.v1.ResolveSentFilingRequest",
    "response_type": "traummail.gateway.v1.MessageSubmission",
    "has_idempotency_key": true
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "SyncError.AccountNotFound",
      "SyncError.InvalidArgument",
      "SyncError.SubmissionNotFound",
      "SyncError.StateMismatch",
      "SyncError.NotSupported",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "MessageSubmissionsDecideDelivery",
    "idempotency": "non-idempotent",
    "method": "MessageSubmissions/decide_delivery",
    "request_type": "traummail.gateway.v1.DecideDeliveryRequest",
    "response_type": "traummail.gateway.v1.DecideDeliveryResponse",
    "has_idempotency_key": true
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "SyncError.AccountNotFound",
      "SyncError.InvalidArgument",
      "SyncError.NotSupported",
      "SyncError.UploadRefStale",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "MessageSubmissionsCreate",
    "idempotency": "non-idempotent",
    "method": "MessageSubmissions/create",
    "request_type": "traummail.gateway.v1.CreateMessageSubmissionRequest",
    "response_type": "traummail.gateway.v1.MessageSubmission",
    "has_idempotency_key": true
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "SyncError.AccountNotFound",
      "SyncError.InvalidArgument",
      "SyncError.NotSupported",
      "SyncError.UploadRefStale",
      "SyncError.DraftNotFound",
      "SyncError.NotFound",
      "SyncError.StateMismatch",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "MessageSubmissionsCreateFromDraft",
    "idempotency": "non-idempotent",
    "method": "MessageSubmissions/create_from_draft",
    "request_type": "traummail.gateway.v1.CreateDraftMessageSubmissionRequest",
    "response_type": "traummail.gateway.v1.MessageSubmission",
    "has_idempotency_key": true
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "SyncError.AccountNotFound",
      "SyncError.InvalidArgument",
      "SyncError.SubmissionNotFound",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "MessageSubmissionsGet",
    "idempotency": "read-only",
    "method": "MessageSubmissions/get",
    "request_type": "traummail.gateway.v1.GetMessageSubmissionRequest",
    "response_type": "traummail.gateway.v1.MessageSubmission",
    "has_idempotency_key": false
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "SyncError.AccountNotFound",
      "SyncError.InvalidArgument",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "MessageSubmissionsList",
    "idempotency": "read-only",
    "method": "MessageSubmissions/list",
    "request_type": "traummail.gateway.v1.ListMessageSubmissionsRequest",
    "response_type": "traummail.gateway.v1.ListMessageSubmissionsResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.NotFound",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "SyncError.AccountNotFound",
      "SyncError.AuthExpired",
      "SyncError.CredentialsRejected",
      "SyncError.AuthenticationUnsupported",
      "SyncError.CredentialUnreadable",
      "SyncError.CredentialsNotFound",
      "SyncError.ProviderUnavailable",
      "SyncError.ProviderTimeout",
      "SyncError.ProviderRateLimited",
      "SyncError.StateMismatch",
      "SyncError.NotSupported",
      "SyncError.InvalidArgument",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable",
      "SyncError.OperationNotFound"
    ],
    "handler_identity": "MessagesArchive",
    "idempotency": "idempotent",
    "method": "Messages/archive",
    "request_type": "traummail.gateway.v1.MessageTargetRequest",
    "response_type": "traummail.gateway.v1.Operation",
    "has_idempotency_key": true
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.NotFound",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "SyncError.AccountNotFound",
      "SyncError.AuthExpired",
      "SyncError.CredentialsRejected",
      "SyncError.AuthenticationUnsupported",
      "SyncError.CredentialUnreadable",
      "SyncError.CredentialsNotFound",
      "SyncError.ProviderUnavailable",
      "SyncError.ProviderTimeout",
      "SyncError.ProviderRateLimited",
      "SyncError.StateMismatch",
      "SyncError.NotSupported",
      "SyncError.InvalidArgument",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable",
      "SyncError.OperationNotFound"
    ],
    "handler_identity": "MessagesDelete",
    "idempotency": "idempotent",
    "method": "Messages/delete",
    "request_type": "traummail.gateway.v1.MessageTargetRequest",
    "response_type": "traummail.gateway.v1.Operation",
    "has_idempotency_key": true
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.NotFound",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "SyncError.AccountNotFound",
      "SyncError.AuthExpired",
      "SyncError.CredentialsRejected",
      "SyncError.AuthenticationUnsupported",
      "SyncError.CredentialUnreadable",
      "SyncError.CredentialsNotFound",
      "SyncError.ProviderUnavailable",
      "SyncError.ProviderTimeout",
      "SyncError.ProviderRateLimited",
      "SyncError.StateMismatch",
      "SyncError.NotSupported",
      "SyncError.InvalidArgument",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable",
      "SyncError.OperationNotFound"
    ],
    "handler_identity": "MessagesSetFlags",
    "idempotency": "idempotent",
    "method": "Messages/set_flags",
    "request_type": "traummail.gateway.v1.SetMessageFlagsRequest",
    "response_type": "traummail.gateway.v1.Operation",
    "has_idempotency_key": true
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.NotFound",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "SyncError.AccountNotFound",
      "SyncError.AuthExpired",
      "SyncError.CredentialsRejected",
      "SyncError.AuthenticationUnsupported",
      "SyncError.CredentialUnreadable",
      "SyncError.CredentialsNotFound",
      "SyncError.ProviderUnavailable",
      "SyncError.ProviderTimeout",
      "SyncError.ProviderRateLimited",
      "SyncError.StateMismatch",
      "SyncError.NotSupported",
      "SyncError.InvalidArgument",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable",
      "SyncError.OperationNotFound"
    ],
    "handler_identity": "MessagesPatchLabels",
    "idempotency": "idempotent",
    "method": "Messages/patch_labels",
    "request_type": "traummail.gateway.v1.PatchMessageLabelsRequest",
    "response_type": "traummail.gateway.v1.Operation",
    "has_idempotency_key": true
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.NotFound",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "SyncError.AccountNotFound",
      "SyncError.AuthExpired",
      "SyncError.CredentialsRejected",
      "SyncError.AuthenticationUnsupported",
      "SyncError.CredentialUnreadable",
      "SyncError.CredentialsNotFound",
      "SyncError.ProviderUnavailable",
      "SyncError.ProviderTimeout",
      "SyncError.ProviderRateLimited",
      "SyncError.StateMismatch",
      "SyncError.NotSupported",
      "SyncError.InvalidArgument",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable",
      "SyncError.OperationNotFound"
    ],
    "handler_identity": "MessagesMarkSpam",
    "idempotency": "idempotent",
    "method": "Messages/mark_spam",
    "request_type": "traummail.gateway.v1.MessageTargetRequest",
    "response_type": "traummail.gateway.v1.Operation",
    "has_idempotency_key": true
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.NotFound",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "SyncError.AccountNotFound",
      "SyncError.AuthExpired",
      "SyncError.CredentialsRejected",
      "SyncError.AuthenticationUnsupported",
      "SyncError.CredentialUnreadable",
      "SyncError.CredentialsNotFound",
      "SyncError.ProviderUnavailable",
      "SyncError.ProviderTimeout",
      "SyncError.ProviderRateLimited",
      "SyncError.StateMismatch",
      "SyncError.NotSupported",
      "SyncError.InvalidArgument",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable",
      "SyncError.OperationNotFound"
    ],
    "handler_identity": "MessagesMove",
    "idempotency": "idempotent",
    "method": "Messages/move",
    "request_type": "traummail.gateway.v1.MoveMessageRequest",
    "response_type": "traummail.gateway.v1.Operation",
    "has_idempotency_key": true
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.NotFound",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "SyncError.AccountNotFound",
      "SyncError.AuthExpired",
      "SyncError.CredentialsRejected",
      "SyncError.AuthenticationUnsupported",
      "SyncError.CredentialUnreadable",
      "SyncError.CredentialsNotFound",
      "SyncError.ProviderUnavailable",
      "SyncError.ProviderTimeout",
      "SyncError.ProviderRateLimited",
      "SyncError.StateMismatch",
      "SyncError.NotSupported",
      "SyncError.InvalidArgument",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable",
      "SyncError.OperationNotFound"
    ],
    "handler_identity": "MessagesRestore",
    "idempotency": "idempotent",
    "method": "Messages/restore",
    "request_type": "traummail.gateway.v1.MessageTargetRequest",
    "response_type": "traummail.gateway.v1.Operation",
    "has_idempotency_key": true
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.NotFound",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "SyncError.AccountNotFound",
      "SyncError.AuthExpired",
      "SyncError.CredentialsRejected",
      "SyncError.AuthenticationUnsupported",
      "SyncError.CredentialUnreadable",
      "SyncError.CredentialsNotFound",
      "SyncError.ProviderUnavailable",
      "SyncError.ProviderTimeout",
      "SyncError.ProviderRateLimited",
      "SyncError.StateMismatch",
      "SyncError.NotSupported",
      "SyncError.InvalidArgument",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable",
      "SyncError.OperationNotFound"
    ],
    "handler_identity": "MessagesTrash",
    "idempotency": "idempotent",
    "method": "Messages/trash",
    "request_type": "traummail.gateway.v1.MessageTargetRequest",
    "response_type": "traummail.gateway.v1.Operation",
    "has_idempotency_key": true
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.NotFound",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "SyncError.AccountNotFound",
      "SyncError.AuthExpired",
      "SyncError.CredentialsRejected",
      "SyncError.AuthenticationUnsupported",
      "SyncError.CredentialUnreadable",
      "SyncError.CredentialsNotFound",
      "SyncError.ProviderUnavailable",
      "SyncError.ProviderTimeout",
      "SyncError.ProviderRateLimited",
      "SyncError.StateMismatch",
      "SyncError.NotSupported",
      "SyncError.InvalidArgument",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable",
      "SyncError.OperationNotFound"
    ],
    "handler_identity": "MessagesUnarchive",
    "idempotency": "idempotent",
    "method": "Messages/unarchive",
    "request_type": "traummail.gateway.v1.MessageTargetRequest",
    "response_type": "traummail.gateway.v1.Operation",
    "has_idempotency_key": true
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.NotFound",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "SyncError.AccountNotFound",
      "SyncError.AuthExpired",
      "SyncError.CredentialsRejected",
      "SyncError.AuthenticationUnsupported",
      "SyncError.CredentialUnreadable",
      "SyncError.CredentialsNotFound",
      "SyncError.ProviderUnavailable",
      "SyncError.ProviderTimeout",
      "SyncError.ProviderRateLimited",
      "SyncError.StateMismatch",
      "SyncError.NotSupported",
      "SyncError.InvalidArgument",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable",
      "SyncError.OperationNotFound"
    ],
    "handler_identity": "MessagesUnmarkSpam",
    "idempotency": "idempotent",
    "method": "Messages/unmark_spam",
    "request_type": "traummail.gateway.v1.MessageTargetRequest",
    "response_type": "traummail.gateway.v1.Operation",
    "has_idempotency_key": true
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "SyncError.InvalidArgument",
      "SyncError.OperationNotFound",
      "SyncError.SubmissionNotFound",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "OperationsCancel",
    "idempotency": "idempotent",
    "method": "Operations/cancel",
    "request_type": "traummail.gateway.v1.CancelOperationRequest",
    "response_type": "traummail.gateway.v1.Operation",
    "has_idempotency_key": false
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "SyncError.AccountNotFound",
      "SyncError.InvalidArgument",
      "SyncError.OperationNotFound",
      "SyncError.StateMismatch",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "OperationsDecide",
    "idempotency": "non-idempotent",
    "method": "Operations/decide",
    "request_type": "traummail.gateway.v1.DecideOperationRequest",
    "response_type": "traummail.gateway.v1.Operation",
    "has_idempotency_key": true
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "SyncError.InvalidArgument",
      "SyncError.OperationNotFound",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "OperationsGet",
    "idempotency": "read-only",
    "method": "Operations/get",
    "request_type": "traummail.gateway.v1.GetOperationRequest",
    "response_type": "traummail.gateway.v1.Operation",
    "has_idempotency_key": false
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "SyncError.InvalidArgument",
      "SyncError.ResourceExhausted",
      "SyncError.DependencyUnavailable"
    ],
    "handler_identity": "OperationsList",
    "idempotency": "read-only",
    "method": "Operations/list",
    "request_type": "traummail.gateway.v1.ListOperationsRequest",
    "response_type": "traummail.gateway.v1.ListOperationsResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.NotFound",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition"
    ],
    "handler_identity": "ServiceBindingChangeRoute",
    "idempotency": "non-idempotent",
    "method": "ServiceBinding/change_route",
    "request_type": "traummail.gateway.v1.ChangeServiceBindingRouteRequest",
    "response_type": "traummail.gateway.v1.ServiceBindingRoute",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.NotFound",
      "GatewayError.InvalidArgument"
    ],
    "handler_identity": "ServiceBindingGetRoute",
    "idempotency": "read-only",
    "method": "ServiceBinding/get_route",
    "request_type": "traummail.gateway.v1.GetServiceBindingRouteRequest",
    "response_type": "traummail.gateway.v1.ServiceBindingRoute",
    "has_idempotency_key": false
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "GatewayError.Conflict",
      "GatewayError.ResourceExhausted",
      "GatewayError.DataCorruption",
      "GatewayError.DependencyUnavailable"
    ],
    "handler_identity": "StreamRegistrationBegin",
    "idempotency": "idempotent",
    "method": "StreamRegistration/begin",
    "request_type": "traummail.control.v1.BeginStreamRegistrationV1",
    "response_type": "traummail.control.v1.BeginStreamRegistrationResultV1",
    "has_idempotency_key": true,
    "raw_json": true
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "GatewayError.Conflict",
      "GatewayError.ResourceExhausted",
      "GatewayError.DataCorruption",
      "GatewayError.DependencyUnavailable"
    ],
    "handler_identity": "StreamRegistrationComplete",
    "idempotency": "idempotent",
    "method": "StreamRegistration/complete",
    "request_type": "traummail.control.v1.CompleteStreamRegistrationV1",
    "response_type": "traummail.control.v1.CompleteStreamRegistrationResultV1",
    "has_idempotency_key": false,
    "raw_json": true
  },
  {
    "auth": "bearer",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "GatewayError.DataCorruption",
      "GatewayError.DependencyUnavailable"
    ],
    "handler_identity": "StreamRegistrationCurrent",
    "idempotency": "read-only",
    "method": "StreamRegistration/current",
    "request_type": "traummail.control.v1.CurrentStreamRegistrationRequestV1",
    "response_type": "traummail.control.v1.CurrentStreamRegistrationResultV1",
    "has_idempotency_key": false,
    "raw_json": true
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.NotFound",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition"
    ],
    "handler_identity": "TunnelApproveManifest",
    "idempotency": "non-idempotent",
    "method": "Tunnel/approve_manifest",
    "request_type": "traummail.gateway.v1.ApproveTunnelManifestRequest",
    "response_type": "traummail.gateway.v1.Tunnel",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.NotFound",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition"
    ],
    "handler_identity": "TunnelRejectManifest",
    "idempotency": "idempotent",
    "method": "Tunnel/reject_manifest",
    "request_type": "traummail.gateway.v1.RejectTunnelManifestRequest",
    "response_type": "traummail.gateway.v1.EmptyTunnelResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [
      "GatewayError.Unauthenticated"
    ],
    "handler_identity": "TunnelGetSetupInfo",
    "idempotency": "read-only",
    "method": "Tunnel/get_setup_info",
    "request_type": "traummail.gateway.v1.GetTunnelSetupInfoRequest",
    "response_type": "traummail.gateway.v1.GetTunnelSetupInfoResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.InvalidArgument",
      "GatewayError.AlreadyExists"
    ],
    "handler_identity": "TunnelCreate",
    "idempotency": "non-idempotent",
    "method": "Tunnel/create",
    "request_type": "traummail.gateway.v1.CreateTunnelRequest",
    "response_type": "traummail.gateway.v1.Tunnel",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.NotFound",
      "GatewayError.FailedPrecondition",
      "GatewayError.InvalidArgument"
    ],
    "handler_identity": "TunnelDelete",
    "idempotency": "idempotent",
    "method": "Tunnel/delete",
    "request_type": "traummail.gateway.v1.DeleteTunnelRequest",
    "response_type": "traummail.gateway.v1.EmptyTunnelResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.NotFound",
      "GatewayError.InvalidArgument"
    ],
    "handler_identity": "TunnelGet",
    "idempotency": "read-only",
    "method": "Tunnel/get",
    "request_type": "traummail.gateway.v1.GetTunnelRequest",
    "response_type": "traummail.gateway.v1.Tunnel",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.NotFound",
      "GatewayError.InvalidArgument"
    ],
    "handler_identity": "TunnelGetStatus",
    "idempotency": "read-only",
    "method": "Tunnel/get_status",
    "request_type": "traummail.gateway.v1.GetTunnelStatusRequest",
    "response_type": "traummail.gateway.v1.TunnelStatus",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied"
    ],
    "handler_identity": "TunnelList",
    "idempotency": "read-only",
    "method": "Tunnel/list",
    "request_type": "traummail.gateway.v1.ListTunnelsRequest",
    "response_type": "traummail.gateway.v1.ListTunnelsResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.NotFound",
      "GatewayError.InvalidArgument"
    ],
    "handler_identity": "TunnelListDependents",
    "idempotency": "read-only",
    "method": "Tunnel/list_dependents",
    "request_type": "traummail.gateway.v1.ListTunnelDependentsRequest",
    "response_type": "traummail.gateway.v1.ListTunnelDependentsResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.NotFound",
      "GatewayError.FailedPrecondition",
      "GatewayError.InvalidArgument"
    ],
    "handler_identity": "TunnelRevoke",
    "idempotency": "idempotent",
    "method": "Tunnel/revoke",
    "request_type": "traummail.gateway.v1.RevokeTunnelRequest",
    "response_type": "traummail.gateway.v1.EmptyTunnelResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.NotFound",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition"
    ],
    "handler_identity": "TunnelUpdate",
    "idempotency": "non-idempotent",
    "method": "Tunnel/update",
    "request_type": "traummail.gateway.v1.UpdateTunnelRequest",
    "response_type": "traummail.gateway.v1.Tunnel",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.NotFound",
      "GatewayError.FailedPrecondition",
      "GatewayError.InvalidArgument"
    ],
    "handler_identity": "TunnelRuntimeCredentialCreateApiKey",
    "idempotency": "non-idempotent",
    "method": "TunnelRuntimeCredential/create_api_key",
    "request_type": "traummail.gateway.v1.CreateTunnelApiKeyRequest",
    "response_type": "traummail.gateway.v1.TunnelApiKeyResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.NotFound",
      "GatewayError.FailedPrecondition",
      "GatewayError.InvalidArgument"
    ],
    "handler_identity": "TunnelRuntimeCredentialRevoke",
    "idempotency": "idempotent",
    "method": "TunnelRuntimeCredential/revoke",
    "request_type": "traummail.gateway.v1.RevokeTunnelApiKeyRequest",
    "response_type": "traummail.gateway.v1.EmptyTunnelResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.NotFound",
      "GatewayError.FailedPrecondition",
      "GatewayError.InvalidArgument"
    ],
    "handler_identity": "TunnelRuntimeCredentialRotate",
    "idempotency": "non-idempotent",
    "method": "TunnelRuntimeCredential/rotate",
    "request_type": "traummail.gateway.v1.RotateTunnelApiKeyRequest",
    "response_type": "traummail.gateway.v1.TunnelApiKeyResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.NotFound",
      "GatewayError.FailedPrecondition",
      "GatewayError.InvalidArgument"
    ],
    "handler_identity": "TunnelServiceDelete",
    "idempotency": "idempotent",
    "method": "TunnelService/delete",
    "request_type": "traummail.gateway.v1.DeleteTunnelServiceRequest",
    "response_type": "traummail.gateway.v1.EmptyTunnelResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.NotFound",
      "GatewayError.InvalidArgument"
    ],
    "handler_identity": "TunnelServiceGet",
    "idempotency": "read-only",
    "method": "TunnelService/get",
    "request_type": "traummail.gateway.v1.GetTunnelServiceRequest",
    "response_type": "traummail.gateway.v1.TunnelServiceResource",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.NotFound",
      "GatewayError.InvalidArgument"
    ],
    "handler_identity": "TunnelServiceList",
    "idempotency": "read-only",
    "method": "TunnelService/list",
    "request_type": "traummail.gateway.v1.ListTunnelServicesRequest",
    "response_type": "traummail.gateway.v1.ListTunnelServicesResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "authenticated",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.PermissionDenied",
      "GatewayError.NotFound",
      "GatewayError.FailedPrecondition",
      "GatewayError.InvalidArgument"
    ],
    "handler_identity": "TunnelServiceRevoke",
    "idempotency": "idempotent",
    "method": "TunnelService/revoke",
    "request_type": "traummail.gateway.v1.RevokeTunnelServiceRequest",
    "response_type": "traummail.gateway.v1.EmptyTunnelResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.InvalidArgument",
      "GatewayError.AlreadyExists"
    ],
    "handler_identity": "UserAddLoginMethod",
    "idempotency": "non-idempotent",
    "method": "User/add_login_method",
    "request_type": "traummail.gateway.v1.AddLoginMethodRequest",
    "response_type": "traummail.gateway.v1.AddLoginMethodResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.InvalidArgument",
      "GatewayError.ResourceExhausted"
    ],
    "handler_identity": "UserChangePassword",
    "idempotency": "non-idempotent",
    "method": "User/change_password",
    "request_type": "traummail.gateway.v1.ChangePasswordRequest",
    "response_type": "traummail.gateway.v1.ChangePasswordResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "GatewayError.ResourceExhausted"
    ],
    "handler_identity": "UserDeleteSelf",
    "idempotency": "non-idempotent",
    "method": "User/delete_self",
    "request_type": "traummail.gateway.v1.DeleteSelfRequest",
    "response_type": "traummail.gateway.v1.DeleteSelfResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [],
    "handler_identity": "UserListLoginMethods",
    "idempotency": "read-only",
    "method": "User/list_login_methods",
    "request_type": "traummail.gateway.v1.ListLoginMethodsRequest",
    "response_type": "traummail.gateway.v1.ListLoginMethodsResponse",
    "has_idempotency_key": false
  },
  {
    "auth": "public",
    "errors": [
      "GatewayError.InvalidArgument",
      "GatewayError.AlreadyExists",
      "GatewayError.ResourceExhausted"
    ],
    "handler_identity": "UserRegister",
    "idempotency": "non-idempotent",
    "method": "User/register",
    "request_type": "traummail.gateway.v1.RegisterRequest",
    "response_type": "traummail.gateway.v1.User",
    "has_idempotency_key": false
  },
  {
    "auth": "session",
    "errors": [
      "GatewayError.Unauthenticated",
      "GatewayError.InvalidArgument",
      "GatewayError.FailedPrecondition",
      "GatewayError.NotFound"
    ],
    "handler_identity": "UserRemoveLoginMethod",
    "idempotency": "non-idempotent",
    "method": "User/remove_login_method",
    "request_type": "traummail.gateway.v1.RemoveLoginMethodRequest",
    "response_type": "traummail.gateway.v1.RemoveLoginMethodResponse",
    "has_idempotency_key": false
  }
]
