<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="groupssettings_v1.html">Groups Settings API</a> . <a href="groupssettings_v1.groups.html">groups</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#get">get(groupUniqueId)</a></code></p>
<p class="firstline">Gets one resource by id.</p>
<p class="toc_element">
  <code><a href="#patch">patch(groupUniqueId, body=None)</a></code></p>
<p class="firstline">Updates an existing resource. This method supports patch semantics.</p>
<p class="toc_element">
  <code><a href="#update">update(groupUniqueId, body=None)</a></code></p>
<p class="firstline">Updates an existing resource.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="get">get(groupUniqueId)</code>
  <pre>Gets one resource by id.

Args:
  groupUniqueId: string, The group&#x27;s email address. (required)

Returns:
  An object of the form:

    { # JSON template for Group resource
    &quot;defaultMessageDenyNotificationText&quot;: &quot;A String&quot;, # When a message is rejected, this is text for the rejection notification sent to the message&#x27;s author. By default, this property is empty and has no value in the API&#x27;s response body. The maximum notification text size is 10,000 characters. Note: Requires sendMessageDenyNotification property to be true.
    &quot;whoCanAdd&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateMembers setting. Permissions to add members. Possible values are:
        # - ALL_MEMBERS_CAN_ADD: Managers and members can directly add new members.
        # - ALL_MANAGERS_CAN_ADD: Only managers can directly add new members. this includes the group&#x27;s owner.
        # - ALL_OWNERS_CAN_ADD: Only owners can directly add new members.
        # - NONE_CAN_ADD: No one can directly add new members.
    &quot;whoCanDeleteAnyPost&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can delete replies to topics. (Authors can always delete their own posts). Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanAssignTopics&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to assign topics in a forum to another user. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanDeleteTopics&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can delete topics. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanMarkDuplicate&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark a topic as a duplicate of another topic. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanLeaveGroup&quot;: &quot;A String&quot;, # Permission to leave the group. Possible values are:
        # - ALL_MANAGERS_CAN_LEAVE
        # - ALL_MEMBERS_CAN_LEAVE
        # - NONE_CAN_LEAVE
    &quot;allowGoogleCommunication&quot;: &quot;A String&quot;, # Deprecated. Allows Google to contact administrator of the group.
        # - true: Allow Google to contact managers of this group. Occasionally Google may send updates on the latest features, ask for input on new features, or ask for permission to highlight your group.
        # - false: Google can not contact managers of this group.
    &quot;spamModerationLevel&quot;: &quot;A String&quot;, # Specifies moderation levels for messages detected as spam. Possible values are:
        # - ALLOW: Post the message to the group.
        # - MODERATE: Send the message to the moderation queue. This is the default.
        # - SILENTLY_MODERATE: Send the message to the moderation queue, but do not send notification to moderators.
        # - REJECT: Immediately reject the message.
    &quot;messageDisplayFont&quot;: &quot;A String&quot;, # Deprecated. The default message display font always has a value of &quot;DEFAULT_FONT&quot;.
    &quot;whoCanModifyMembers&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateMembers setting. Specifies who can change group members&#x27; roles. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanEnterFreeFormTags&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to enter free form tags for topics in a forum. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanPostMessage&quot;: &quot;A String&quot;, # Permissions to post messages. Possible values are:
        # - NONE_CAN_POST: The group is disabled and archived. No one can post a message to this group.
        # - When archiveOnly is false, updating whoCanPostMessage to NONE_CAN_POST, results in an error.
        # - If archiveOnly is reverted from true to false, whoCanPostMessages is set to ALL_MANAGERS_CAN_POST.
        # - ALL_MANAGERS_CAN_POST: Managers, including group owners, can post messages.
        # - ALL_MEMBERS_CAN_POST: Any group member can post a message.
        # - ALL_OWNERS_CAN_POST: Only group owners can post a message.
        # - ALL_IN_DOMAIN_CAN_POST: Anyone in the account can post a message.
        # - ANYONE_CAN_POST: Any Internet user who outside your account can access your Google Groups service and post a message. Note: When whoCanPostMessage is set to ANYONE_CAN_POST, we recommend the messageModerationLevel be set to MODERATE_NON_MEMBERS to protect the group from possible spam.
    &quot;customReplyTo&quot;: &quot;A String&quot;, # An email address used when replying to a message if the replyTo property is set to REPLY_TO_CUSTOM. This address is defined by an account administrator.
        # - When the group&#x27;s ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property holds a custom email address used when replying to a message.
        # - If the group&#x27;s ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property must have a text value or an error is returned.
    &quot;includeCustomFooter&quot;: &quot;A String&quot;, # Whether to include custom footer. Possible values are:
        # - true
        # - false
    &quot;includeInGlobalAddressList&quot;: &quot;A String&quot;, # Enables the group to be included in the Global Address List. For more information, see the help center. Possible values are:
        # - true: Group is included in the Global Address List.
        # - false: Group is not included in the Global Address List.
    &quot;messageModerationLevel&quot;: &quot;A String&quot;, # Moderation level of incoming messages. Possible values are:
        # - MODERATE_ALL_MESSAGES: All messages are sent to the group owner&#x27;s email address for approval. If approved, the message is sent to the group.
        # - MODERATE_NON_MEMBERS: All messages from non group members are sent to the group owner&#x27;s email address for approval. If approved, the message is sent to the group.
        # - MODERATE_NEW_MEMBERS: All messages from new members are sent to the group owner&#x27;s email address for approval. If approved, the message is sent to the group.
        # - MODERATE_NONE: No moderator approval is required. Messages are delivered directly to the group. Note: When the whoCanPostMessage is set to ANYONE_CAN_POST, we recommend the messageModerationLevel be set to MODERATE_NON_MEMBERS to protect the group from possible spam.
        # When memberCanPostAsTheGroup is true, any message moderation settings on individual users or new members will not apply to posts made on behalf of the group.
    &quot;whoCanContactOwner&quot;: &quot;A String&quot;, # Permission to contact owner of the group via web UI. Possible values are:
        # - ALL_IN_DOMAIN_CAN_CONTACT
        # - ALL_MANAGERS_CAN_CONTACT
        # - ALL_MEMBERS_CAN_CONTACT
        # - ANYONE_CAN_CONTACT
    &quot;kind&quot;: &quot;groupsSettings#groups&quot;, # The type of the resource. It is always groupsSettings#groups.
    &quot;whoCanDiscoverGroup&quot;: &quot;A String&quot;, # Specifies the set of users for whom this group is discoverable. Possible values are:
        # - ANYONE_CAN_DISCOVER
        # - ALL_IN_DOMAIN_CAN_DISCOVER
        # - ALL_MEMBERS_CAN_DISCOVER
    &quot;email&quot;: &quot;A String&quot;, # The group&#x27;s email address. This property can be updated using the Directory API. Note: Only a group owner can change a group&#x27;s email address. A group manager can&#x27;t do this.
        # When you change your group&#x27;s address using the Directory API or the control panel, you are changing the address your subscribers use to send email and the web address people use to access your group. People can&#x27;t reach your group by visiting the old address.
    &quot;whoCanAssistContent&quot;: &quot;A String&quot;, # Specifies who can moderate metadata. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;primaryLanguage&quot;: &quot;A String&quot;, # The primary language for group. For a group&#x27;s primary language use the language tags from the G Suite languages found at G Suite Email Settings API Email Language Tags.
    &quot;whoCanModifyTagsAndCategories&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to change tags and categories. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanViewGroup&quot;: &quot;A String&quot;, # Permissions to view group messages. Possible values are:
        # - ANYONE_CAN_VIEW: Any Internet user can view the group&#x27;s messages.
        # - ALL_IN_DOMAIN_CAN_VIEW: Anyone in your account can view this group&#x27;s messages.
        # - ALL_MEMBERS_CAN_VIEW: All group members can view the group&#x27;s messages.
        # - ALL_MANAGERS_CAN_VIEW: Any group manager can view this group&#x27;s messages.
    &quot;whoCanViewMembership&quot;: &quot;A String&quot;, # Permissions to view membership. Possible values are:
        # - ALL_IN_DOMAIN_CAN_VIEW: Anyone in the account can view the group members list.
        # If a group already has external members, those members can still send email to this group.
        #
        # - ALL_MEMBERS_CAN_VIEW: The group members can view the group members list.
        # - ALL_MANAGERS_CAN_VIEW: The group managers can view group members list.
    &quot;whoCanModerateMembers&quot;: &quot;A String&quot;, # Specifies who can manage members. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanHideAbuse&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can hide posts by reporting them as abuse. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanUnmarkFavoriteReplyOnAnyTopic&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to unmark any post from a favorite reply. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanPostAnnouncements&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can post announcements, a special topic type. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanAddReferences&quot;: &quot;A String&quot;, # Deprecated. This functionality is no longer supported in the Google Groups UI. The value is always &quot;NONE&quot;.
    &quot;whoCanTakeTopics&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to take topics in a forum. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanBanUsers&quot;: &quot;A String&quot;, # Specifies who can deny membership to users. This permission will be deprecated once it is merged into the new whoCanModerateMembers setting. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;sendMessageDenyNotification&quot;: &quot;A String&quot;, # Allows a member to be notified if the member&#x27;s message to the group is denied by the group owner. Possible values are:
        # - true: When a message is rejected, send the deny message notification to the message author.
        # The defaultMessageDenyNotificationText property is dependent on the sendMessageDenyNotification property being true.
        #
        # - false: When a message is rejected, no notification is sent.
    &quot;whoCanJoin&quot;: &quot;A String&quot;, # Permission to join group. Possible values are:
        # - ANYONE_CAN_JOIN: Anyone in the account domain can join. This includes accounts with multiple domains.
        # - ALL_IN_DOMAIN_CAN_JOIN: Any Internet user who is outside your domain can access your Google Groups service and view the list of groups in your Groups directory. Warning: Group owners can add external addresses, outside of the domain to their groups. They can also allow people outside your domain to join their groups. If you later disable this option, any external addresses already added to users&#x27; groups remain in those groups.
        # - INVITED_CAN_JOIN: Candidates for membership can be invited to join.
        # - CAN_REQUEST_TO_JOIN: Non members can request an invitation to join.
    &quot;whoCanMarkFavoriteReplyOnAnyTopic&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark any other user&#x27;s post as a favorite reply. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanMakeTopicsSticky&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can make topics appear at the top of the topic list. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanMarkFavoriteReplyOnOwnTopic&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark a post for a topic they started as a favorite reply. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;allowWebPosting&quot;: &quot;A String&quot;, # Allows posting from web. Possible values are:
        # - true: Allows any member to post to the group forum.
        # - false: Members only use Gmail to communicate with the group.
    &quot;whoCanMarkNoResponseNeeded&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark a topic as not needing a response. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanUnassignTopic&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to unassign any topic in a forum. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanLockTopics&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can prevent users from posting replies to topics. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;showInGroupDirectory&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanDiscoverGroup setting. Allows the group to be visible in the Groups Directory. Possible values are:
        # - true: All groups in the account are listed in the Groups directory.
        # - false: All groups in the account are not listed in the directory.
    &quot;name&quot;: &quot;A String&quot;, # Name of the group, which has a maximum size of 75 characters.
    &quot;whoCanApproveMembers&quot;: &quot;A String&quot;, # Specifies who can approve members who ask to join groups. This permission will be deprecated once it is merged into the new whoCanModerateMembers setting. Possible values are:
        # - ALL_MEMBERS_CAN_APPROVE
        # - ALL_MANAGERS_CAN_APPROVE
        # - ALL_OWNERS_CAN_APPROVE
        # - NONE_CAN_APPROVE
    &quot;customFooterText&quot;: &quot;A String&quot;, # Set the content of custom footer text. The maximum number of characters is 1,000.
    &quot;whoCanMoveTopicsIn&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can move topics into the group or forum. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;archiveOnly&quot;: &quot;A String&quot;, # Allows the group to be archived only. Possible values are:
        # - true: Group is archived and the group is inactive. New messages to this group are rejected. The older archived messages are browseable and searchable.
        # - If true, the whoCanPostMessage property is set to NONE_CAN_POST.
        # - If reverted from true to false, whoCanPostMessages is set to ALL_MANAGERS_CAN_POST.
        # - false: The group is active and can receive messages.
        # - When false, updating whoCanPostMessage to NONE_CAN_POST, results in an error.
    &quot;whoCanModerateContent&quot;: &quot;A String&quot;, # Specifies who can moderate content. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanMoveTopicsOut&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can move topics out of the group or forum. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;maxMessageBytes&quot;: 42, # Deprecated. The maximum size of a message is 25Mb.
    &quot;description&quot;: &quot;A String&quot;, # Description of the group. This property value may be an empty string if no group description has been entered. If entered, the maximum group description is no more than 300 characters.
    &quot;favoriteRepliesOnTop&quot;: &quot;A String&quot;, # Indicates if favorite replies should be displayed above other replies.
        # - true: Favorite replies will be displayed above other replies.
        # - false: Favorite replies will not be displayed above other replies.
    &quot;replyTo&quot;: &quot;A String&quot;, # Specifies who receives the default reply. Possible values are:
        # - REPLY_TO_CUSTOM: For replies to messages, use the group&#x27;s custom email address.
        # When the group&#x27;s ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property holds the custom email address used when replying to a message. If the group&#x27;s ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property must have a value. Otherwise an error is returned.
        #
        # - REPLY_TO_SENDER: The reply sent to author of message.
        # - REPLY_TO_LIST: This reply message is sent to the group.
        # - REPLY_TO_OWNER: The reply is sent to the owner(s) of the group. This does not include the group&#x27;s managers.
        # - REPLY_TO_IGNORE: Group users individually decide where the message reply is sent.
        # - REPLY_TO_MANAGERS: This reply message is sent to the group&#x27;s managers, which includes all managers and the group owner.
    &quot;whoCanApproveMessages&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can approve pending messages in the moderation queue. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;customRolesEnabledForSettingsToBeMerged&quot;: &quot;A String&quot;, # Specifies whether the group has a custom role that&#x27;s included in one of the settings being merged. This field is read-only and update/patch requests to it are ignored. Possible values are:
        # - true
        # - false
    &quot;isArchived&quot;: &quot;A String&quot;, # Allows the Group contents to be archived. Possible values are:
        # - true: Archive messages sent to the group.
        # - false: Do not keep an archive of messages sent to this group. If false, previously archived messages remain in the archive.
    &quot;allowExternalMembers&quot;: &quot;A String&quot;, # Identifies whether members external to your organization can join the group. Possible values are:
        # - true: G Suite users external to your organization can become members of this group.
        # - false: Users not belonging to the organization are not allowed to become members of this group.
    &quot;whoCanInvite&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateMembers setting. Permissions to invite new members. Possible values are:
        # - ALL_MEMBERS_CAN_INVITE: Managers and members can invite a new member candidate.
        # - ALL_MANAGERS_CAN_INVITE: Only managers can invite a new member. This includes the group&#x27;s owner.
        # - ALL_OWNERS_CAN_INVITE: Only owners can invite a new member.
        # - NONE_CAN_INVITE: No one can invite a new member candidate.
    &quot;membersCanPostAsTheGroup&quot;: &quot;A String&quot;, # Enables members to post messages as the group. Possible values are:
        # - true: Group member can post messages using the group&#x27;s email address instead of their own email address. Message appear to originate from the group itself. Note: When true, any message moderation settings on individual users or new members do not apply to posts made on behalf of the group.
        # - false: Members can not post in behalf of the group&#x27;s email address.
    &quot;enableCollaborativeInbox&quot;: &quot;A String&quot;, # Specifies whether a collaborative inbox will remain turned on for the group. Possible values are:
        # - true
        # - false
  }</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(groupUniqueId, body=None)</code>
  <pre>Updates an existing resource. This method supports patch semantics.

Args:
  groupUniqueId: string, The group&#x27;s email address. (required)
  body: object, The request body.
    The object takes the form of:

{ # JSON template for Group resource
  &quot;defaultMessageDenyNotificationText&quot;: &quot;A String&quot;, # When a message is rejected, this is text for the rejection notification sent to the message&#x27;s author. By default, this property is empty and has no value in the API&#x27;s response body. The maximum notification text size is 10,000 characters. Note: Requires sendMessageDenyNotification property to be true.
  &quot;whoCanAdd&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateMembers setting. Permissions to add members. Possible values are:
      # - ALL_MEMBERS_CAN_ADD: Managers and members can directly add new members.
      # - ALL_MANAGERS_CAN_ADD: Only managers can directly add new members. this includes the group&#x27;s owner.
      # - ALL_OWNERS_CAN_ADD: Only owners can directly add new members.
      # - NONE_CAN_ADD: No one can directly add new members.
  &quot;whoCanDeleteAnyPost&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can delete replies to topics. (Authors can always delete their own posts). Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanAssignTopics&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to assign topics in a forum to another user. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - MANAGERS_ONLY
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanDeleteTopics&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can delete topics. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanMarkDuplicate&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark a topic as a duplicate of another topic. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - MANAGERS_ONLY
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanLeaveGroup&quot;: &quot;A String&quot;, # Permission to leave the group. Possible values are:
      # - ALL_MANAGERS_CAN_LEAVE
      # - ALL_MEMBERS_CAN_LEAVE
      # - NONE_CAN_LEAVE
  &quot;allowGoogleCommunication&quot;: &quot;A String&quot;, # Deprecated. Allows Google to contact administrator of the group.
      # - true: Allow Google to contact managers of this group. Occasionally Google may send updates on the latest features, ask for input on new features, or ask for permission to highlight your group.
      # - false: Google can not contact managers of this group.
  &quot;spamModerationLevel&quot;: &quot;A String&quot;, # Specifies moderation levels for messages detected as spam. Possible values are:
      # - ALLOW: Post the message to the group.
      # - MODERATE: Send the message to the moderation queue. This is the default.
      # - SILENTLY_MODERATE: Send the message to the moderation queue, but do not send notification to moderators.
      # - REJECT: Immediately reject the message.
  &quot;messageDisplayFont&quot;: &quot;A String&quot;, # Deprecated. The default message display font always has a value of &quot;DEFAULT_FONT&quot;.
  &quot;whoCanModifyMembers&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateMembers setting. Specifies who can change group members&#x27; roles. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanEnterFreeFormTags&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to enter free form tags for topics in a forum. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - MANAGERS_ONLY
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanPostMessage&quot;: &quot;A String&quot;, # Permissions to post messages. Possible values are:
      # - NONE_CAN_POST: The group is disabled and archived. No one can post a message to this group.
      # - When archiveOnly is false, updating whoCanPostMessage to NONE_CAN_POST, results in an error.
      # - If archiveOnly is reverted from true to false, whoCanPostMessages is set to ALL_MANAGERS_CAN_POST.
      # - ALL_MANAGERS_CAN_POST: Managers, including group owners, can post messages.
      # - ALL_MEMBERS_CAN_POST: Any group member can post a message.
      # - ALL_OWNERS_CAN_POST: Only group owners can post a message.
      # - ALL_IN_DOMAIN_CAN_POST: Anyone in the account can post a message.
      # - ANYONE_CAN_POST: Any Internet user who outside your account can access your Google Groups service and post a message. Note: When whoCanPostMessage is set to ANYONE_CAN_POST, we recommend the messageModerationLevel be set to MODERATE_NON_MEMBERS to protect the group from possible spam.
  &quot;customReplyTo&quot;: &quot;A String&quot;, # An email address used when replying to a message if the replyTo property is set to REPLY_TO_CUSTOM. This address is defined by an account administrator.
      # - When the group&#x27;s ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property holds a custom email address used when replying to a message.
      # - If the group&#x27;s ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property must have a text value or an error is returned.
  &quot;includeCustomFooter&quot;: &quot;A String&quot;, # Whether to include custom footer. Possible values are:
      # - true
      # - false
  &quot;includeInGlobalAddressList&quot;: &quot;A String&quot;, # Enables the group to be included in the Global Address List. For more information, see the help center. Possible values are:
      # - true: Group is included in the Global Address List.
      # - false: Group is not included in the Global Address List.
  &quot;messageModerationLevel&quot;: &quot;A String&quot;, # Moderation level of incoming messages. Possible values are:
      # - MODERATE_ALL_MESSAGES: All messages are sent to the group owner&#x27;s email address for approval. If approved, the message is sent to the group.
      # - MODERATE_NON_MEMBERS: All messages from non group members are sent to the group owner&#x27;s email address for approval. If approved, the message is sent to the group.
      # - MODERATE_NEW_MEMBERS: All messages from new members are sent to the group owner&#x27;s email address for approval. If approved, the message is sent to the group.
      # - MODERATE_NONE: No moderator approval is required. Messages are delivered directly to the group. Note: When the whoCanPostMessage is set to ANYONE_CAN_POST, we recommend the messageModerationLevel be set to MODERATE_NON_MEMBERS to protect the group from possible spam.
      # When memberCanPostAsTheGroup is true, any message moderation settings on individual users or new members will not apply to posts made on behalf of the group.
  &quot;whoCanContactOwner&quot;: &quot;A String&quot;, # Permission to contact owner of the group via web UI. Possible values are:
      # - ALL_IN_DOMAIN_CAN_CONTACT
      # - ALL_MANAGERS_CAN_CONTACT
      # - ALL_MEMBERS_CAN_CONTACT
      # - ANYONE_CAN_CONTACT
  &quot;kind&quot;: &quot;groupsSettings#groups&quot;, # The type of the resource. It is always groupsSettings#groups.
  &quot;whoCanDiscoverGroup&quot;: &quot;A String&quot;, # Specifies the set of users for whom this group is discoverable. Possible values are:
      # - ANYONE_CAN_DISCOVER
      # - ALL_IN_DOMAIN_CAN_DISCOVER
      # - ALL_MEMBERS_CAN_DISCOVER
  &quot;email&quot;: &quot;A String&quot;, # The group&#x27;s email address. This property can be updated using the Directory API. Note: Only a group owner can change a group&#x27;s email address. A group manager can&#x27;t do this.
      # When you change your group&#x27;s address using the Directory API or the control panel, you are changing the address your subscribers use to send email and the web address people use to access your group. People can&#x27;t reach your group by visiting the old address.
  &quot;whoCanAssistContent&quot;: &quot;A String&quot;, # Specifies who can moderate metadata. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - MANAGERS_ONLY
      # - OWNERS_ONLY
      # - NONE
  &quot;primaryLanguage&quot;: &quot;A String&quot;, # The primary language for group. For a group&#x27;s primary language use the language tags from the G Suite languages found at G Suite Email Settings API Email Language Tags.
  &quot;whoCanModifyTagsAndCategories&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to change tags and categories. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - MANAGERS_ONLY
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanViewGroup&quot;: &quot;A String&quot;, # Permissions to view group messages. Possible values are:
      # - ANYONE_CAN_VIEW: Any Internet user can view the group&#x27;s messages.
      # - ALL_IN_DOMAIN_CAN_VIEW: Anyone in your account can view this group&#x27;s messages.
      # - ALL_MEMBERS_CAN_VIEW: All group members can view the group&#x27;s messages.
      # - ALL_MANAGERS_CAN_VIEW: Any group manager can view this group&#x27;s messages.
  &quot;whoCanViewMembership&quot;: &quot;A String&quot;, # Permissions to view membership. Possible values are:
      # - ALL_IN_DOMAIN_CAN_VIEW: Anyone in the account can view the group members list.
      # If a group already has external members, those members can still send email to this group.
      # 
      # - ALL_MEMBERS_CAN_VIEW: The group members can view the group members list.
      # - ALL_MANAGERS_CAN_VIEW: The group managers can view group members list.
  &quot;whoCanModerateMembers&quot;: &quot;A String&quot;, # Specifies who can manage members. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanHideAbuse&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can hide posts by reporting them as abuse. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanUnmarkFavoriteReplyOnAnyTopic&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to unmark any post from a favorite reply. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - MANAGERS_ONLY
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanPostAnnouncements&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can post announcements, a special topic type. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanAddReferences&quot;: &quot;A String&quot;, # Deprecated. This functionality is no longer supported in the Google Groups UI. The value is always &quot;NONE&quot;.
  &quot;whoCanTakeTopics&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to take topics in a forum. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - MANAGERS_ONLY
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanBanUsers&quot;: &quot;A String&quot;, # Specifies who can deny membership to users. This permission will be deprecated once it is merged into the new whoCanModerateMembers setting. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - OWNERS_ONLY
      # - NONE
  &quot;sendMessageDenyNotification&quot;: &quot;A String&quot;, # Allows a member to be notified if the member&#x27;s message to the group is denied by the group owner. Possible values are:
      # - true: When a message is rejected, send the deny message notification to the message author.
      # The defaultMessageDenyNotificationText property is dependent on the sendMessageDenyNotification property being true.
      # 
      # - false: When a message is rejected, no notification is sent.
  &quot;whoCanJoin&quot;: &quot;A String&quot;, # Permission to join group. Possible values are:
      # - ANYONE_CAN_JOIN: Anyone in the account domain can join. This includes accounts with multiple domains.
      # - ALL_IN_DOMAIN_CAN_JOIN: Any Internet user who is outside your domain can access your Google Groups service and view the list of groups in your Groups directory. Warning: Group owners can add external addresses, outside of the domain to their groups. They can also allow people outside your domain to join their groups. If you later disable this option, any external addresses already added to users&#x27; groups remain in those groups.
      # - INVITED_CAN_JOIN: Candidates for membership can be invited to join.
      # - CAN_REQUEST_TO_JOIN: Non members can request an invitation to join.
  &quot;whoCanMarkFavoriteReplyOnAnyTopic&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark any other user&#x27;s post as a favorite reply. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - MANAGERS_ONLY
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanMakeTopicsSticky&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can make topics appear at the top of the topic list. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanMarkFavoriteReplyOnOwnTopic&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark a post for a topic they started as a favorite reply. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - MANAGERS_ONLY
      # - OWNERS_ONLY
      # - NONE
  &quot;allowWebPosting&quot;: &quot;A String&quot;, # Allows posting from web. Possible values are:
      # - true: Allows any member to post to the group forum.
      # - false: Members only use Gmail to communicate with the group.
  &quot;whoCanMarkNoResponseNeeded&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark a topic as not needing a response. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - MANAGERS_ONLY
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanUnassignTopic&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to unassign any topic in a forum. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - MANAGERS_ONLY
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanLockTopics&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can prevent users from posting replies to topics. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - OWNERS_ONLY
      # - NONE
  &quot;showInGroupDirectory&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanDiscoverGroup setting. Allows the group to be visible in the Groups Directory. Possible values are:
      # - true: All groups in the account are listed in the Groups directory.
      # - false: All groups in the account are not listed in the directory.
  &quot;name&quot;: &quot;A String&quot;, # Name of the group, which has a maximum size of 75 characters.
  &quot;whoCanApproveMembers&quot;: &quot;A String&quot;, # Specifies who can approve members who ask to join groups. This permission will be deprecated once it is merged into the new whoCanModerateMembers setting. Possible values are:
      # - ALL_MEMBERS_CAN_APPROVE
      # - ALL_MANAGERS_CAN_APPROVE
      # - ALL_OWNERS_CAN_APPROVE
      # - NONE_CAN_APPROVE
  &quot;customFooterText&quot;: &quot;A String&quot;, # Set the content of custom footer text. The maximum number of characters is 1,000.
  &quot;whoCanMoveTopicsIn&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can move topics into the group or forum. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - OWNERS_ONLY
      # - NONE
  &quot;archiveOnly&quot;: &quot;A String&quot;, # Allows the group to be archived only. Possible values are:
      # - true: Group is archived and the group is inactive. New messages to this group are rejected. The older archived messages are browseable and searchable.
      # - If true, the whoCanPostMessage property is set to NONE_CAN_POST.
      # - If reverted from true to false, whoCanPostMessages is set to ALL_MANAGERS_CAN_POST.
      # - false: The group is active and can receive messages.
      # - When false, updating whoCanPostMessage to NONE_CAN_POST, results in an error.
  &quot;whoCanModerateContent&quot;: &quot;A String&quot;, # Specifies who can moderate content. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanMoveTopicsOut&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can move topics out of the group or forum. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - OWNERS_ONLY
      # - NONE
  &quot;maxMessageBytes&quot;: 42, # Deprecated. The maximum size of a message is 25Mb.
  &quot;description&quot;: &quot;A String&quot;, # Description of the group. This property value may be an empty string if no group description has been entered. If entered, the maximum group description is no more than 300 characters.
  &quot;favoriteRepliesOnTop&quot;: &quot;A String&quot;, # Indicates if favorite replies should be displayed above other replies.
      # - true: Favorite replies will be displayed above other replies.
      # - false: Favorite replies will not be displayed above other replies.
  &quot;replyTo&quot;: &quot;A String&quot;, # Specifies who receives the default reply. Possible values are:
      # - REPLY_TO_CUSTOM: For replies to messages, use the group&#x27;s custom email address.
      # When the group&#x27;s ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property holds the custom email address used when replying to a message. If the group&#x27;s ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property must have a value. Otherwise an error is returned.
      # 
      # - REPLY_TO_SENDER: The reply sent to author of message.
      # - REPLY_TO_LIST: This reply message is sent to the group.
      # - REPLY_TO_OWNER: The reply is sent to the owner(s) of the group. This does not include the group&#x27;s managers.
      # - REPLY_TO_IGNORE: Group users individually decide where the message reply is sent.
      # - REPLY_TO_MANAGERS: This reply message is sent to the group&#x27;s managers, which includes all managers and the group owner.
  &quot;whoCanApproveMessages&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can approve pending messages in the moderation queue. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - OWNERS_ONLY
      # - NONE
  &quot;customRolesEnabledForSettingsToBeMerged&quot;: &quot;A String&quot;, # Specifies whether the group has a custom role that&#x27;s included in one of the settings being merged. This field is read-only and update/patch requests to it are ignored. Possible values are:
      # - true
      # - false
  &quot;isArchived&quot;: &quot;A String&quot;, # Allows the Group contents to be archived. Possible values are:
      # - true: Archive messages sent to the group.
      # - false: Do not keep an archive of messages sent to this group. If false, previously archived messages remain in the archive.
  &quot;allowExternalMembers&quot;: &quot;A String&quot;, # Identifies whether members external to your organization can join the group. Possible values are:
      # - true: G Suite users external to your organization can become members of this group.
      # - false: Users not belonging to the organization are not allowed to become members of this group.
  &quot;whoCanInvite&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateMembers setting. Permissions to invite new members. Possible values are:
      # - ALL_MEMBERS_CAN_INVITE: Managers and members can invite a new member candidate.
      # - ALL_MANAGERS_CAN_INVITE: Only managers can invite a new member. This includes the group&#x27;s owner.
      # - ALL_OWNERS_CAN_INVITE: Only owners can invite a new member.
      # - NONE_CAN_INVITE: No one can invite a new member candidate.
  &quot;membersCanPostAsTheGroup&quot;: &quot;A String&quot;, # Enables members to post messages as the group. Possible values are:
      # - true: Group member can post messages using the group&#x27;s email address instead of their own email address. Message appear to originate from the group itself. Note: When true, any message moderation settings on individual users or new members do not apply to posts made on behalf of the group.
      # - false: Members can not post in behalf of the group&#x27;s email address.
  &quot;enableCollaborativeInbox&quot;: &quot;A String&quot;, # Specifies whether a collaborative inbox will remain turned on for the group. Possible values are:
      # - true
      # - false
}


Returns:
  An object of the form:

    { # JSON template for Group resource
    &quot;defaultMessageDenyNotificationText&quot;: &quot;A String&quot;, # When a message is rejected, this is text for the rejection notification sent to the message&#x27;s author. By default, this property is empty and has no value in the API&#x27;s response body. The maximum notification text size is 10,000 characters. Note: Requires sendMessageDenyNotification property to be true.
    &quot;whoCanAdd&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateMembers setting. Permissions to add members. Possible values are:
        # - ALL_MEMBERS_CAN_ADD: Managers and members can directly add new members.
        # - ALL_MANAGERS_CAN_ADD: Only managers can directly add new members. this includes the group&#x27;s owner.
        # - ALL_OWNERS_CAN_ADD: Only owners can directly add new members.
        # - NONE_CAN_ADD: No one can directly add new members.
    &quot;whoCanDeleteAnyPost&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can delete replies to topics. (Authors can always delete their own posts). Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanAssignTopics&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to assign topics in a forum to another user. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanDeleteTopics&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can delete topics. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanMarkDuplicate&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark a topic as a duplicate of another topic. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanLeaveGroup&quot;: &quot;A String&quot;, # Permission to leave the group. Possible values are:
        # - ALL_MANAGERS_CAN_LEAVE
        # - ALL_MEMBERS_CAN_LEAVE
        # - NONE_CAN_LEAVE
    &quot;allowGoogleCommunication&quot;: &quot;A String&quot;, # Deprecated. Allows Google to contact administrator of the group.
        # - true: Allow Google to contact managers of this group. Occasionally Google may send updates on the latest features, ask for input on new features, or ask for permission to highlight your group.
        # - false: Google can not contact managers of this group.
    &quot;spamModerationLevel&quot;: &quot;A String&quot;, # Specifies moderation levels for messages detected as spam. Possible values are:
        # - ALLOW: Post the message to the group.
        # - MODERATE: Send the message to the moderation queue. This is the default.
        # - SILENTLY_MODERATE: Send the message to the moderation queue, but do not send notification to moderators.
        # - REJECT: Immediately reject the message.
    &quot;messageDisplayFont&quot;: &quot;A String&quot;, # Deprecated. The default message display font always has a value of &quot;DEFAULT_FONT&quot;.
    &quot;whoCanModifyMembers&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateMembers setting. Specifies who can change group members&#x27; roles. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanEnterFreeFormTags&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to enter free form tags for topics in a forum. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanPostMessage&quot;: &quot;A String&quot;, # Permissions to post messages. Possible values are:
        # - NONE_CAN_POST: The group is disabled and archived. No one can post a message to this group.
        # - When archiveOnly is false, updating whoCanPostMessage to NONE_CAN_POST, results in an error.
        # - If archiveOnly is reverted from true to false, whoCanPostMessages is set to ALL_MANAGERS_CAN_POST.
        # - ALL_MANAGERS_CAN_POST: Managers, including group owners, can post messages.
        # - ALL_MEMBERS_CAN_POST: Any group member can post a message.
        # - ALL_OWNERS_CAN_POST: Only group owners can post a message.
        # - ALL_IN_DOMAIN_CAN_POST: Anyone in the account can post a message.
        # - ANYONE_CAN_POST: Any Internet user who outside your account can access your Google Groups service and post a message. Note: When whoCanPostMessage is set to ANYONE_CAN_POST, we recommend the messageModerationLevel be set to MODERATE_NON_MEMBERS to protect the group from possible spam.
    &quot;customReplyTo&quot;: &quot;A String&quot;, # An email address used when replying to a message if the replyTo property is set to REPLY_TO_CUSTOM. This address is defined by an account administrator.
        # - When the group&#x27;s ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property holds a custom email address used when replying to a message.
        # - If the group&#x27;s ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property must have a text value or an error is returned.
    &quot;includeCustomFooter&quot;: &quot;A String&quot;, # Whether to include custom footer. Possible values are:
        # - true
        # - false
    &quot;includeInGlobalAddressList&quot;: &quot;A String&quot;, # Enables the group to be included in the Global Address List. For more information, see the help center. Possible values are:
        # - true: Group is included in the Global Address List.
        # - false: Group is not included in the Global Address List.
    &quot;messageModerationLevel&quot;: &quot;A String&quot;, # Moderation level of incoming messages. Possible values are:
        # - MODERATE_ALL_MESSAGES: All messages are sent to the group owner&#x27;s email address for approval. If approved, the message is sent to the group.
        # - MODERATE_NON_MEMBERS: All messages from non group members are sent to the group owner&#x27;s email address for approval. If approved, the message is sent to the group.
        # - MODERATE_NEW_MEMBERS: All messages from new members are sent to the group owner&#x27;s email address for approval. If approved, the message is sent to the group.
        # - MODERATE_NONE: No moderator approval is required. Messages are delivered directly to the group. Note: When the whoCanPostMessage is set to ANYONE_CAN_POST, we recommend the messageModerationLevel be set to MODERATE_NON_MEMBERS to protect the group from possible spam.
        # When memberCanPostAsTheGroup is true, any message moderation settings on individual users or new members will not apply to posts made on behalf of the group.
    &quot;whoCanContactOwner&quot;: &quot;A String&quot;, # Permission to contact owner of the group via web UI. Possible values are:
        # - ALL_IN_DOMAIN_CAN_CONTACT
        # - ALL_MANAGERS_CAN_CONTACT
        # - ALL_MEMBERS_CAN_CONTACT
        # - ANYONE_CAN_CONTACT
    &quot;kind&quot;: &quot;groupsSettings#groups&quot;, # The type of the resource. It is always groupsSettings#groups.
    &quot;whoCanDiscoverGroup&quot;: &quot;A String&quot;, # Specifies the set of users for whom this group is discoverable. Possible values are:
        # - ANYONE_CAN_DISCOVER
        # - ALL_IN_DOMAIN_CAN_DISCOVER
        # - ALL_MEMBERS_CAN_DISCOVER
    &quot;email&quot;: &quot;A String&quot;, # The group&#x27;s email address. This property can be updated using the Directory API. Note: Only a group owner can change a group&#x27;s email address. A group manager can&#x27;t do this.
        # When you change your group&#x27;s address using the Directory API or the control panel, you are changing the address your subscribers use to send email and the web address people use to access your group. People can&#x27;t reach your group by visiting the old address.
    &quot;whoCanAssistContent&quot;: &quot;A String&quot;, # Specifies who can moderate metadata. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;primaryLanguage&quot;: &quot;A String&quot;, # The primary language for group. For a group&#x27;s primary language use the language tags from the G Suite languages found at G Suite Email Settings API Email Language Tags.
    &quot;whoCanModifyTagsAndCategories&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to change tags and categories. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanViewGroup&quot;: &quot;A String&quot;, # Permissions to view group messages. Possible values are:
        # - ANYONE_CAN_VIEW: Any Internet user can view the group&#x27;s messages.
        # - ALL_IN_DOMAIN_CAN_VIEW: Anyone in your account can view this group&#x27;s messages.
        # - ALL_MEMBERS_CAN_VIEW: All group members can view the group&#x27;s messages.
        # - ALL_MANAGERS_CAN_VIEW: Any group manager can view this group&#x27;s messages.
    &quot;whoCanViewMembership&quot;: &quot;A String&quot;, # Permissions to view membership. Possible values are:
        # - ALL_IN_DOMAIN_CAN_VIEW: Anyone in the account can view the group members list.
        # If a group already has external members, those members can still send email to this group.
        #
        # - ALL_MEMBERS_CAN_VIEW: The group members can view the group members list.
        # - ALL_MANAGERS_CAN_VIEW: The group managers can view group members list.
    &quot;whoCanModerateMembers&quot;: &quot;A String&quot;, # Specifies who can manage members. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanHideAbuse&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can hide posts by reporting them as abuse. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanUnmarkFavoriteReplyOnAnyTopic&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to unmark any post from a favorite reply. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanPostAnnouncements&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can post announcements, a special topic type. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanAddReferences&quot;: &quot;A String&quot;, # Deprecated. This functionality is no longer supported in the Google Groups UI. The value is always &quot;NONE&quot;.
    &quot;whoCanTakeTopics&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to take topics in a forum. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanBanUsers&quot;: &quot;A String&quot;, # Specifies who can deny membership to users. This permission will be deprecated once it is merged into the new whoCanModerateMembers setting. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;sendMessageDenyNotification&quot;: &quot;A String&quot;, # Allows a member to be notified if the member&#x27;s message to the group is denied by the group owner. Possible values are:
        # - true: When a message is rejected, send the deny message notification to the message author.
        # The defaultMessageDenyNotificationText property is dependent on the sendMessageDenyNotification property being true.
        #
        # - false: When a message is rejected, no notification is sent.
    &quot;whoCanJoin&quot;: &quot;A String&quot;, # Permission to join group. Possible values are:
        # - ANYONE_CAN_JOIN: Anyone in the account domain can join. This includes accounts with multiple domains.
        # - ALL_IN_DOMAIN_CAN_JOIN: Any Internet user who is outside your domain can access your Google Groups service and view the list of groups in your Groups directory. Warning: Group owners can add external addresses, outside of the domain to their groups. They can also allow people outside your domain to join their groups. If you later disable this option, any external addresses already added to users&#x27; groups remain in those groups.
        # - INVITED_CAN_JOIN: Candidates for membership can be invited to join.
        # - CAN_REQUEST_TO_JOIN: Non members can request an invitation to join.
    &quot;whoCanMarkFavoriteReplyOnAnyTopic&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark any other user&#x27;s post as a favorite reply. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanMakeTopicsSticky&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can make topics appear at the top of the topic list. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanMarkFavoriteReplyOnOwnTopic&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark a post for a topic they started as a favorite reply. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;allowWebPosting&quot;: &quot;A String&quot;, # Allows posting from web. Possible values are:
        # - true: Allows any member to post to the group forum.
        # - false: Members only use Gmail to communicate with the group.
    &quot;whoCanMarkNoResponseNeeded&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark a topic as not needing a response. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanUnassignTopic&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to unassign any topic in a forum. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanLockTopics&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can prevent users from posting replies to topics. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;showInGroupDirectory&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanDiscoverGroup setting. Allows the group to be visible in the Groups Directory. Possible values are:
        # - true: All groups in the account are listed in the Groups directory.
        # - false: All groups in the account are not listed in the directory.
    &quot;name&quot;: &quot;A String&quot;, # Name of the group, which has a maximum size of 75 characters.
    &quot;whoCanApproveMembers&quot;: &quot;A String&quot;, # Specifies who can approve members who ask to join groups. This permission will be deprecated once it is merged into the new whoCanModerateMembers setting. Possible values are:
        # - ALL_MEMBERS_CAN_APPROVE
        # - ALL_MANAGERS_CAN_APPROVE
        # - ALL_OWNERS_CAN_APPROVE
        # - NONE_CAN_APPROVE
    &quot;customFooterText&quot;: &quot;A String&quot;, # Set the content of custom footer text. The maximum number of characters is 1,000.
    &quot;whoCanMoveTopicsIn&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can move topics into the group or forum. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;archiveOnly&quot;: &quot;A String&quot;, # Allows the group to be archived only. Possible values are:
        # - true: Group is archived and the group is inactive. New messages to this group are rejected. The older archived messages are browseable and searchable.
        # - If true, the whoCanPostMessage property is set to NONE_CAN_POST.
        # - If reverted from true to false, whoCanPostMessages is set to ALL_MANAGERS_CAN_POST.
        # - false: The group is active and can receive messages.
        # - When false, updating whoCanPostMessage to NONE_CAN_POST, results in an error.
    &quot;whoCanModerateContent&quot;: &quot;A String&quot;, # Specifies who can moderate content. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanMoveTopicsOut&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can move topics out of the group or forum. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;maxMessageBytes&quot;: 42, # Deprecated. The maximum size of a message is 25Mb.
    &quot;description&quot;: &quot;A String&quot;, # Description of the group. This property value may be an empty string if no group description has been entered. If entered, the maximum group description is no more than 300 characters.
    &quot;favoriteRepliesOnTop&quot;: &quot;A String&quot;, # Indicates if favorite replies should be displayed above other replies.
        # - true: Favorite replies will be displayed above other replies.
        # - false: Favorite replies will not be displayed above other replies.
    &quot;replyTo&quot;: &quot;A String&quot;, # Specifies who receives the default reply. Possible values are:
        # - REPLY_TO_CUSTOM: For replies to messages, use the group&#x27;s custom email address.
        # When the group&#x27;s ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property holds the custom email address used when replying to a message. If the group&#x27;s ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property must have a value. Otherwise an error is returned.
        #
        # - REPLY_TO_SENDER: The reply sent to author of message.
        # - REPLY_TO_LIST: This reply message is sent to the group.
        # - REPLY_TO_OWNER: The reply is sent to the owner(s) of the group. This does not include the group&#x27;s managers.
        # - REPLY_TO_IGNORE: Group users individually decide where the message reply is sent.
        # - REPLY_TO_MANAGERS: This reply message is sent to the group&#x27;s managers, which includes all managers and the group owner.
    &quot;whoCanApproveMessages&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can approve pending messages in the moderation queue. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;customRolesEnabledForSettingsToBeMerged&quot;: &quot;A String&quot;, # Specifies whether the group has a custom role that&#x27;s included in one of the settings being merged. This field is read-only and update/patch requests to it are ignored. Possible values are:
        # - true
        # - false
    &quot;isArchived&quot;: &quot;A String&quot;, # Allows the Group contents to be archived. Possible values are:
        # - true: Archive messages sent to the group.
        # - false: Do not keep an archive of messages sent to this group. If false, previously archived messages remain in the archive.
    &quot;allowExternalMembers&quot;: &quot;A String&quot;, # Identifies whether members external to your organization can join the group. Possible values are:
        # - true: G Suite users external to your organization can become members of this group.
        # - false: Users not belonging to the organization are not allowed to become members of this group.
    &quot;whoCanInvite&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateMembers setting. Permissions to invite new members. Possible values are:
        # - ALL_MEMBERS_CAN_INVITE: Managers and members can invite a new member candidate.
        # - ALL_MANAGERS_CAN_INVITE: Only managers can invite a new member. This includes the group&#x27;s owner.
        # - ALL_OWNERS_CAN_INVITE: Only owners can invite a new member.
        # - NONE_CAN_INVITE: No one can invite a new member candidate.
    &quot;membersCanPostAsTheGroup&quot;: &quot;A String&quot;, # Enables members to post messages as the group. Possible values are:
        # - true: Group member can post messages using the group&#x27;s email address instead of their own email address. Message appear to originate from the group itself. Note: When true, any message moderation settings on individual users or new members do not apply to posts made on behalf of the group.
        # - false: Members can not post in behalf of the group&#x27;s email address.
    &quot;enableCollaborativeInbox&quot;: &quot;A String&quot;, # Specifies whether a collaborative inbox will remain turned on for the group. Possible values are:
        # - true
        # - false
  }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(groupUniqueId, body=None)</code>
  <pre>Updates an existing resource.

Args:
  groupUniqueId: string, The group&#x27;s email address. (required)
  body: object, The request body.
    The object takes the form of:

{ # JSON template for Group resource
  &quot;defaultMessageDenyNotificationText&quot;: &quot;A String&quot;, # When a message is rejected, this is text for the rejection notification sent to the message&#x27;s author. By default, this property is empty and has no value in the API&#x27;s response body. The maximum notification text size is 10,000 characters. Note: Requires sendMessageDenyNotification property to be true.
  &quot;whoCanAdd&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateMembers setting. Permissions to add members. Possible values are:
      # - ALL_MEMBERS_CAN_ADD: Managers and members can directly add new members.
      # - ALL_MANAGERS_CAN_ADD: Only managers can directly add new members. this includes the group&#x27;s owner.
      # - ALL_OWNERS_CAN_ADD: Only owners can directly add new members.
      # - NONE_CAN_ADD: No one can directly add new members.
  &quot;whoCanDeleteAnyPost&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can delete replies to topics. (Authors can always delete their own posts). Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanAssignTopics&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to assign topics in a forum to another user. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - MANAGERS_ONLY
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanDeleteTopics&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can delete topics. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanMarkDuplicate&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark a topic as a duplicate of another topic. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - MANAGERS_ONLY
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanLeaveGroup&quot;: &quot;A String&quot;, # Permission to leave the group. Possible values are:
      # - ALL_MANAGERS_CAN_LEAVE
      # - ALL_MEMBERS_CAN_LEAVE
      # - NONE_CAN_LEAVE
  &quot;allowGoogleCommunication&quot;: &quot;A String&quot;, # Deprecated. Allows Google to contact administrator of the group.
      # - true: Allow Google to contact managers of this group. Occasionally Google may send updates on the latest features, ask for input on new features, or ask for permission to highlight your group.
      # - false: Google can not contact managers of this group.
  &quot;spamModerationLevel&quot;: &quot;A String&quot;, # Specifies moderation levels for messages detected as spam. Possible values are:
      # - ALLOW: Post the message to the group.
      # - MODERATE: Send the message to the moderation queue. This is the default.
      # - SILENTLY_MODERATE: Send the message to the moderation queue, but do not send notification to moderators.
      # - REJECT: Immediately reject the message.
  &quot;messageDisplayFont&quot;: &quot;A String&quot;, # Deprecated. The default message display font always has a value of &quot;DEFAULT_FONT&quot;.
  &quot;whoCanModifyMembers&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateMembers setting. Specifies who can change group members&#x27; roles. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanEnterFreeFormTags&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to enter free form tags for topics in a forum. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - MANAGERS_ONLY
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanPostMessage&quot;: &quot;A String&quot;, # Permissions to post messages. Possible values are:
      # - NONE_CAN_POST: The group is disabled and archived. No one can post a message to this group.
      # - When archiveOnly is false, updating whoCanPostMessage to NONE_CAN_POST, results in an error.
      # - If archiveOnly is reverted from true to false, whoCanPostMessages is set to ALL_MANAGERS_CAN_POST.
      # - ALL_MANAGERS_CAN_POST: Managers, including group owners, can post messages.
      # - ALL_MEMBERS_CAN_POST: Any group member can post a message.
      # - ALL_OWNERS_CAN_POST: Only group owners can post a message.
      # - ALL_IN_DOMAIN_CAN_POST: Anyone in the account can post a message.
      # - ANYONE_CAN_POST: Any Internet user who outside your account can access your Google Groups service and post a message. Note: When whoCanPostMessage is set to ANYONE_CAN_POST, we recommend the messageModerationLevel be set to MODERATE_NON_MEMBERS to protect the group from possible spam.
  &quot;customReplyTo&quot;: &quot;A String&quot;, # An email address used when replying to a message if the replyTo property is set to REPLY_TO_CUSTOM. This address is defined by an account administrator.
      # - When the group&#x27;s ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property holds a custom email address used when replying to a message.
      # - If the group&#x27;s ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property must have a text value or an error is returned.
  &quot;includeCustomFooter&quot;: &quot;A String&quot;, # Whether to include custom footer. Possible values are:
      # - true
      # - false
  &quot;includeInGlobalAddressList&quot;: &quot;A String&quot;, # Enables the group to be included in the Global Address List. For more information, see the help center. Possible values are:
      # - true: Group is included in the Global Address List.
      # - false: Group is not included in the Global Address List.
  &quot;messageModerationLevel&quot;: &quot;A String&quot;, # Moderation level of incoming messages. Possible values are:
      # - MODERATE_ALL_MESSAGES: All messages are sent to the group owner&#x27;s email address for approval. If approved, the message is sent to the group.
      # - MODERATE_NON_MEMBERS: All messages from non group members are sent to the group owner&#x27;s email address for approval. If approved, the message is sent to the group.
      # - MODERATE_NEW_MEMBERS: All messages from new members are sent to the group owner&#x27;s email address for approval. If approved, the message is sent to the group.
      # - MODERATE_NONE: No moderator approval is required. Messages are delivered directly to the group. Note: When the whoCanPostMessage is set to ANYONE_CAN_POST, we recommend the messageModerationLevel be set to MODERATE_NON_MEMBERS to protect the group from possible spam.
      # When memberCanPostAsTheGroup is true, any message moderation settings on individual users or new members will not apply to posts made on behalf of the group.
  &quot;whoCanContactOwner&quot;: &quot;A String&quot;, # Permission to contact owner of the group via web UI. Possible values are:
      # - ALL_IN_DOMAIN_CAN_CONTACT
      # - ALL_MANAGERS_CAN_CONTACT
      # - ALL_MEMBERS_CAN_CONTACT
      # - ANYONE_CAN_CONTACT
  &quot;kind&quot;: &quot;groupsSettings#groups&quot;, # The type of the resource. It is always groupsSettings#groups.
  &quot;whoCanDiscoverGroup&quot;: &quot;A String&quot;, # Specifies the set of users for whom this group is discoverable. Possible values are:
      # - ANYONE_CAN_DISCOVER
      # - ALL_IN_DOMAIN_CAN_DISCOVER
      # - ALL_MEMBERS_CAN_DISCOVER
  &quot;email&quot;: &quot;A String&quot;, # The group&#x27;s email address. This property can be updated using the Directory API. Note: Only a group owner can change a group&#x27;s email address. A group manager can&#x27;t do this.
      # When you change your group&#x27;s address using the Directory API or the control panel, you are changing the address your subscribers use to send email and the web address people use to access your group. People can&#x27;t reach your group by visiting the old address.
  &quot;whoCanAssistContent&quot;: &quot;A String&quot;, # Specifies who can moderate metadata. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - MANAGERS_ONLY
      # - OWNERS_ONLY
      # - NONE
  &quot;primaryLanguage&quot;: &quot;A String&quot;, # The primary language for group. For a group&#x27;s primary language use the language tags from the G Suite languages found at G Suite Email Settings API Email Language Tags.
  &quot;whoCanModifyTagsAndCategories&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to change tags and categories. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - MANAGERS_ONLY
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanViewGroup&quot;: &quot;A String&quot;, # Permissions to view group messages. Possible values are:
      # - ANYONE_CAN_VIEW: Any Internet user can view the group&#x27;s messages.
      # - ALL_IN_DOMAIN_CAN_VIEW: Anyone in your account can view this group&#x27;s messages.
      # - ALL_MEMBERS_CAN_VIEW: All group members can view the group&#x27;s messages.
      # - ALL_MANAGERS_CAN_VIEW: Any group manager can view this group&#x27;s messages.
  &quot;whoCanViewMembership&quot;: &quot;A String&quot;, # Permissions to view membership. Possible values are:
      # - ALL_IN_DOMAIN_CAN_VIEW: Anyone in the account can view the group members list.
      # If a group already has external members, those members can still send email to this group.
      # 
      # - ALL_MEMBERS_CAN_VIEW: The group members can view the group members list.
      # - ALL_MANAGERS_CAN_VIEW: The group managers can view group members list.
  &quot;whoCanModerateMembers&quot;: &quot;A String&quot;, # Specifies who can manage members. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanHideAbuse&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can hide posts by reporting them as abuse. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanUnmarkFavoriteReplyOnAnyTopic&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to unmark any post from a favorite reply. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - MANAGERS_ONLY
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanPostAnnouncements&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can post announcements, a special topic type. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanAddReferences&quot;: &quot;A String&quot;, # Deprecated. This functionality is no longer supported in the Google Groups UI. The value is always &quot;NONE&quot;.
  &quot;whoCanTakeTopics&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to take topics in a forum. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - MANAGERS_ONLY
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanBanUsers&quot;: &quot;A String&quot;, # Specifies who can deny membership to users. This permission will be deprecated once it is merged into the new whoCanModerateMembers setting. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - OWNERS_ONLY
      # - NONE
  &quot;sendMessageDenyNotification&quot;: &quot;A String&quot;, # Allows a member to be notified if the member&#x27;s message to the group is denied by the group owner. Possible values are:
      # - true: When a message is rejected, send the deny message notification to the message author.
      # The defaultMessageDenyNotificationText property is dependent on the sendMessageDenyNotification property being true.
      # 
      # - false: When a message is rejected, no notification is sent.
  &quot;whoCanJoin&quot;: &quot;A String&quot;, # Permission to join group. Possible values are:
      # - ANYONE_CAN_JOIN: Anyone in the account domain can join. This includes accounts with multiple domains.
      # - ALL_IN_DOMAIN_CAN_JOIN: Any Internet user who is outside your domain can access your Google Groups service and view the list of groups in your Groups directory. Warning: Group owners can add external addresses, outside of the domain to their groups. They can also allow people outside your domain to join their groups. If you later disable this option, any external addresses already added to users&#x27; groups remain in those groups.
      # - INVITED_CAN_JOIN: Candidates for membership can be invited to join.
      # - CAN_REQUEST_TO_JOIN: Non members can request an invitation to join.
  &quot;whoCanMarkFavoriteReplyOnAnyTopic&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark any other user&#x27;s post as a favorite reply. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - MANAGERS_ONLY
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanMakeTopicsSticky&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can make topics appear at the top of the topic list. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanMarkFavoriteReplyOnOwnTopic&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark a post for a topic they started as a favorite reply. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - MANAGERS_ONLY
      # - OWNERS_ONLY
      # - NONE
  &quot;allowWebPosting&quot;: &quot;A String&quot;, # Allows posting from web. Possible values are:
      # - true: Allows any member to post to the group forum.
      # - false: Members only use Gmail to communicate with the group.
  &quot;whoCanMarkNoResponseNeeded&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark a topic as not needing a response. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - MANAGERS_ONLY
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanUnassignTopic&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to unassign any topic in a forum. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - MANAGERS_ONLY
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanLockTopics&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can prevent users from posting replies to topics. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - OWNERS_ONLY
      # - NONE
  &quot;showInGroupDirectory&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanDiscoverGroup setting. Allows the group to be visible in the Groups Directory. Possible values are:
      # - true: All groups in the account are listed in the Groups directory.
      # - false: All groups in the account are not listed in the directory.
  &quot;name&quot;: &quot;A String&quot;, # Name of the group, which has a maximum size of 75 characters.
  &quot;whoCanApproveMembers&quot;: &quot;A String&quot;, # Specifies who can approve members who ask to join groups. This permission will be deprecated once it is merged into the new whoCanModerateMembers setting. Possible values are:
      # - ALL_MEMBERS_CAN_APPROVE
      # - ALL_MANAGERS_CAN_APPROVE
      # - ALL_OWNERS_CAN_APPROVE
      # - NONE_CAN_APPROVE
  &quot;customFooterText&quot;: &quot;A String&quot;, # Set the content of custom footer text. The maximum number of characters is 1,000.
  &quot;whoCanMoveTopicsIn&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can move topics into the group or forum. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - OWNERS_ONLY
      # - NONE
  &quot;archiveOnly&quot;: &quot;A String&quot;, # Allows the group to be archived only. Possible values are:
      # - true: Group is archived and the group is inactive. New messages to this group are rejected. The older archived messages are browseable and searchable.
      # - If true, the whoCanPostMessage property is set to NONE_CAN_POST.
      # - If reverted from true to false, whoCanPostMessages is set to ALL_MANAGERS_CAN_POST.
      # - false: The group is active and can receive messages.
      # - When false, updating whoCanPostMessage to NONE_CAN_POST, results in an error.
  &quot;whoCanModerateContent&quot;: &quot;A String&quot;, # Specifies who can moderate content. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - OWNERS_ONLY
      # - NONE
  &quot;whoCanMoveTopicsOut&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can move topics out of the group or forum. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - OWNERS_ONLY
      # - NONE
  &quot;maxMessageBytes&quot;: 42, # Deprecated. The maximum size of a message is 25Mb.
  &quot;description&quot;: &quot;A String&quot;, # Description of the group. This property value may be an empty string if no group description has been entered. If entered, the maximum group description is no more than 300 characters.
  &quot;favoriteRepliesOnTop&quot;: &quot;A String&quot;, # Indicates if favorite replies should be displayed above other replies.
      # - true: Favorite replies will be displayed above other replies.
      # - false: Favorite replies will not be displayed above other replies.
  &quot;replyTo&quot;: &quot;A String&quot;, # Specifies who receives the default reply. Possible values are:
      # - REPLY_TO_CUSTOM: For replies to messages, use the group&#x27;s custom email address.
      # When the group&#x27;s ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property holds the custom email address used when replying to a message. If the group&#x27;s ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property must have a value. Otherwise an error is returned.
      # 
      # - REPLY_TO_SENDER: The reply sent to author of message.
      # - REPLY_TO_LIST: This reply message is sent to the group.
      # - REPLY_TO_OWNER: The reply is sent to the owner(s) of the group. This does not include the group&#x27;s managers.
      # - REPLY_TO_IGNORE: Group users individually decide where the message reply is sent.
      # - REPLY_TO_MANAGERS: This reply message is sent to the group&#x27;s managers, which includes all managers and the group owner.
  &quot;whoCanApproveMessages&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can approve pending messages in the moderation queue. Possible values are:
      # - ALL_MEMBERS
      # - OWNERS_AND_MANAGERS
      # - OWNERS_ONLY
      # - NONE
  &quot;customRolesEnabledForSettingsToBeMerged&quot;: &quot;A String&quot;, # Specifies whether the group has a custom role that&#x27;s included in one of the settings being merged. This field is read-only and update/patch requests to it are ignored. Possible values are:
      # - true
      # - false
  &quot;isArchived&quot;: &quot;A String&quot;, # Allows the Group contents to be archived. Possible values are:
      # - true: Archive messages sent to the group.
      # - false: Do not keep an archive of messages sent to this group. If false, previously archived messages remain in the archive.
  &quot;allowExternalMembers&quot;: &quot;A String&quot;, # Identifies whether members external to your organization can join the group. Possible values are:
      # - true: G Suite users external to your organization can become members of this group.
      # - false: Users not belonging to the organization are not allowed to become members of this group.
  &quot;whoCanInvite&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateMembers setting. Permissions to invite new members. Possible values are:
      # - ALL_MEMBERS_CAN_INVITE: Managers and members can invite a new member candidate.
      # - ALL_MANAGERS_CAN_INVITE: Only managers can invite a new member. This includes the group&#x27;s owner.
      # - ALL_OWNERS_CAN_INVITE: Only owners can invite a new member.
      # - NONE_CAN_INVITE: No one can invite a new member candidate.
  &quot;membersCanPostAsTheGroup&quot;: &quot;A String&quot;, # Enables members to post messages as the group. Possible values are:
      # - true: Group member can post messages using the group&#x27;s email address instead of their own email address. Message appear to originate from the group itself. Note: When true, any message moderation settings on individual users or new members do not apply to posts made on behalf of the group.
      # - false: Members can not post in behalf of the group&#x27;s email address.
  &quot;enableCollaborativeInbox&quot;: &quot;A String&quot;, # Specifies whether a collaborative inbox will remain turned on for the group. Possible values are:
      # - true
      # - false
}


Returns:
  An object of the form:

    { # JSON template for Group resource
    &quot;defaultMessageDenyNotificationText&quot;: &quot;A String&quot;, # When a message is rejected, this is text for the rejection notification sent to the message&#x27;s author. By default, this property is empty and has no value in the API&#x27;s response body. The maximum notification text size is 10,000 characters. Note: Requires sendMessageDenyNotification property to be true.
    &quot;whoCanAdd&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateMembers setting. Permissions to add members. Possible values are:
        # - ALL_MEMBERS_CAN_ADD: Managers and members can directly add new members.
        # - ALL_MANAGERS_CAN_ADD: Only managers can directly add new members. this includes the group&#x27;s owner.
        # - ALL_OWNERS_CAN_ADD: Only owners can directly add new members.
        # - NONE_CAN_ADD: No one can directly add new members.
    &quot;whoCanDeleteAnyPost&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can delete replies to topics. (Authors can always delete their own posts). Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanAssignTopics&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to assign topics in a forum to another user. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanDeleteTopics&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can delete topics. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanMarkDuplicate&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark a topic as a duplicate of another topic. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanLeaveGroup&quot;: &quot;A String&quot;, # Permission to leave the group. Possible values are:
        # - ALL_MANAGERS_CAN_LEAVE
        # - ALL_MEMBERS_CAN_LEAVE
        # - NONE_CAN_LEAVE
    &quot;allowGoogleCommunication&quot;: &quot;A String&quot;, # Deprecated. Allows Google to contact administrator of the group.
        # - true: Allow Google to contact managers of this group. Occasionally Google may send updates on the latest features, ask for input on new features, or ask for permission to highlight your group.
        # - false: Google can not contact managers of this group.
    &quot;spamModerationLevel&quot;: &quot;A String&quot;, # Specifies moderation levels for messages detected as spam. Possible values are:
        # - ALLOW: Post the message to the group.
        # - MODERATE: Send the message to the moderation queue. This is the default.
        # - SILENTLY_MODERATE: Send the message to the moderation queue, but do not send notification to moderators.
        # - REJECT: Immediately reject the message.
    &quot;messageDisplayFont&quot;: &quot;A String&quot;, # Deprecated. The default message display font always has a value of &quot;DEFAULT_FONT&quot;.
    &quot;whoCanModifyMembers&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateMembers setting. Specifies who can change group members&#x27; roles. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanEnterFreeFormTags&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to enter free form tags for topics in a forum. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanPostMessage&quot;: &quot;A String&quot;, # Permissions to post messages. Possible values are:
        # - NONE_CAN_POST: The group is disabled and archived. No one can post a message to this group.
        # - When archiveOnly is false, updating whoCanPostMessage to NONE_CAN_POST, results in an error.
        # - If archiveOnly is reverted from true to false, whoCanPostMessages is set to ALL_MANAGERS_CAN_POST.
        # - ALL_MANAGERS_CAN_POST: Managers, including group owners, can post messages.
        # - ALL_MEMBERS_CAN_POST: Any group member can post a message.
        # - ALL_OWNERS_CAN_POST: Only group owners can post a message.
        # - ALL_IN_DOMAIN_CAN_POST: Anyone in the account can post a message.
        # - ANYONE_CAN_POST: Any Internet user who outside your account can access your Google Groups service and post a message. Note: When whoCanPostMessage is set to ANYONE_CAN_POST, we recommend the messageModerationLevel be set to MODERATE_NON_MEMBERS to protect the group from possible spam.
    &quot;customReplyTo&quot;: &quot;A String&quot;, # An email address used when replying to a message if the replyTo property is set to REPLY_TO_CUSTOM. This address is defined by an account administrator.
        # - When the group&#x27;s ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property holds a custom email address used when replying to a message.
        # - If the group&#x27;s ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property must have a text value or an error is returned.
    &quot;includeCustomFooter&quot;: &quot;A String&quot;, # Whether to include custom footer. Possible values are:
        # - true
        # - false
    &quot;includeInGlobalAddressList&quot;: &quot;A String&quot;, # Enables the group to be included in the Global Address List. For more information, see the help center. Possible values are:
        # - true: Group is included in the Global Address List.
        # - false: Group is not included in the Global Address List.
    &quot;messageModerationLevel&quot;: &quot;A String&quot;, # Moderation level of incoming messages. Possible values are:
        # - MODERATE_ALL_MESSAGES: All messages are sent to the group owner&#x27;s email address for approval. If approved, the message is sent to the group.
        # - MODERATE_NON_MEMBERS: All messages from non group members are sent to the group owner&#x27;s email address for approval. If approved, the message is sent to the group.
        # - MODERATE_NEW_MEMBERS: All messages from new members are sent to the group owner&#x27;s email address for approval. If approved, the message is sent to the group.
        # - MODERATE_NONE: No moderator approval is required. Messages are delivered directly to the group. Note: When the whoCanPostMessage is set to ANYONE_CAN_POST, we recommend the messageModerationLevel be set to MODERATE_NON_MEMBERS to protect the group from possible spam.
        # When memberCanPostAsTheGroup is true, any message moderation settings on individual users or new members will not apply to posts made on behalf of the group.
    &quot;whoCanContactOwner&quot;: &quot;A String&quot;, # Permission to contact owner of the group via web UI. Possible values are:
        # - ALL_IN_DOMAIN_CAN_CONTACT
        # - ALL_MANAGERS_CAN_CONTACT
        # - ALL_MEMBERS_CAN_CONTACT
        # - ANYONE_CAN_CONTACT
    &quot;kind&quot;: &quot;groupsSettings#groups&quot;, # The type of the resource. It is always groupsSettings#groups.
    &quot;whoCanDiscoverGroup&quot;: &quot;A String&quot;, # Specifies the set of users for whom this group is discoverable. Possible values are:
        # - ANYONE_CAN_DISCOVER
        # - ALL_IN_DOMAIN_CAN_DISCOVER
        # - ALL_MEMBERS_CAN_DISCOVER
    &quot;email&quot;: &quot;A String&quot;, # The group&#x27;s email address. This property can be updated using the Directory API. Note: Only a group owner can change a group&#x27;s email address. A group manager can&#x27;t do this.
        # When you change your group&#x27;s address using the Directory API or the control panel, you are changing the address your subscribers use to send email and the web address people use to access your group. People can&#x27;t reach your group by visiting the old address.
    &quot;whoCanAssistContent&quot;: &quot;A String&quot;, # Specifies who can moderate metadata. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;primaryLanguage&quot;: &quot;A String&quot;, # The primary language for group. For a group&#x27;s primary language use the language tags from the G Suite languages found at G Suite Email Settings API Email Language Tags.
    &quot;whoCanModifyTagsAndCategories&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to change tags and categories. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanViewGroup&quot;: &quot;A String&quot;, # Permissions to view group messages. Possible values are:
        # - ANYONE_CAN_VIEW: Any Internet user can view the group&#x27;s messages.
        # - ALL_IN_DOMAIN_CAN_VIEW: Anyone in your account can view this group&#x27;s messages.
        # - ALL_MEMBERS_CAN_VIEW: All group members can view the group&#x27;s messages.
        # - ALL_MANAGERS_CAN_VIEW: Any group manager can view this group&#x27;s messages.
    &quot;whoCanViewMembership&quot;: &quot;A String&quot;, # Permissions to view membership. Possible values are:
        # - ALL_IN_DOMAIN_CAN_VIEW: Anyone in the account can view the group members list.
        # If a group already has external members, those members can still send email to this group.
        #
        # - ALL_MEMBERS_CAN_VIEW: The group members can view the group members list.
        # - ALL_MANAGERS_CAN_VIEW: The group managers can view group members list.
    &quot;whoCanModerateMembers&quot;: &quot;A String&quot;, # Specifies who can manage members. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanHideAbuse&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can hide posts by reporting them as abuse. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanUnmarkFavoriteReplyOnAnyTopic&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to unmark any post from a favorite reply. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanPostAnnouncements&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can post announcements, a special topic type. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanAddReferences&quot;: &quot;A String&quot;, # Deprecated. This functionality is no longer supported in the Google Groups UI. The value is always &quot;NONE&quot;.
    &quot;whoCanTakeTopics&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to take topics in a forum. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanBanUsers&quot;: &quot;A String&quot;, # Specifies who can deny membership to users. This permission will be deprecated once it is merged into the new whoCanModerateMembers setting. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;sendMessageDenyNotification&quot;: &quot;A String&quot;, # Allows a member to be notified if the member&#x27;s message to the group is denied by the group owner. Possible values are:
        # - true: When a message is rejected, send the deny message notification to the message author.
        # The defaultMessageDenyNotificationText property is dependent on the sendMessageDenyNotification property being true.
        #
        # - false: When a message is rejected, no notification is sent.
    &quot;whoCanJoin&quot;: &quot;A String&quot;, # Permission to join group. Possible values are:
        # - ANYONE_CAN_JOIN: Anyone in the account domain can join. This includes accounts with multiple domains.
        # - ALL_IN_DOMAIN_CAN_JOIN: Any Internet user who is outside your domain can access your Google Groups service and view the list of groups in your Groups directory. Warning: Group owners can add external addresses, outside of the domain to their groups. They can also allow people outside your domain to join their groups. If you later disable this option, any external addresses already added to users&#x27; groups remain in those groups.
        # - INVITED_CAN_JOIN: Candidates for membership can be invited to join.
        # - CAN_REQUEST_TO_JOIN: Non members can request an invitation to join.
    &quot;whoCanMarkFavoriteReplyOnAnyTopic&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark any other user&#x27;s post as a favorite reply. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanMakeTopicsSticky&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can make topics appear at the top of the topic list. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanMarkFavoriteReplyOnOwnTopic&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark a post for a topic they started as a favorite reply. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;allowWebPosting&quot;: &quot;A String&quot;, # Allows posting from web. Possible values are:
        # - true: Allows any member to post to the group forum.
        # - false: Members only use Gmail to communicate with the group.
    &quot;whoCanMarkNoResponseNeeded&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark a topic as not needing a response. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanUnassignTopic&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanAssistContent setting. Permission to unassign any topic in a forum. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - MANAGERS_ONLY
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanLockTopics&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can prevent users from posting replies to topics. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;showInGroupDirectory&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanDiscoverGroup setting. Allows the group to be visible in the Groups Directory. Possible values are:
        # - true: All groups in the account are listed in the Groups directory.
        # - false: All groups in the account are not listed in the directory.
    &quot;name&quot;: &quot;A String&quot;, # Name of the group, which has a maximum size of 75 characters.
    &quot;whoCanApproveMembers&quot;: &quot;A String&quot;, # Specifies who can approve members who ask to join groups. This permission will be deprecated once it is merged into the new whoCanModerateMembers setting. Possible values are:
        # - ALL_MEMBERS_CAN_APPROVE
        # - ALL_MANAGERS_CAN_APPROVE
        # - ALL_OWNERS_CAN_APPROVE
        # - NONE_CAN_APPROVE
    &quot;customFooterText&quot;: &quot;A String&quot;, # Set the content of custom footer text. The maximum number of characters is 1,000.
    &quot;whoCanMoveTopicsIn&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can move topics into the group or forum. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;archiveOnly&quot;: &quot;A String&quot;, # Allows the group to be archived only. Possible values are:
        # - true: Group is archived and the group is inactive. New messages to this group are rejected. The older archived messages are browseable and searchable.
        # - If true, the whoCanPostMessage property is set to NONE_CAN_POST.
        # - If reverted from true to false, whoCanPostMessages is set to ALL_MANAGERS_CAN_POST.
        # - false: The group is active and can receive messages.
        # - When false, updating whoCanPostMessage to NONE_CAN_POST, results in an error.
    &quot;whoCanModerateContent&quot;: &quot;A String&quot;, # Specifies who can moderate content. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;whoCanMoveTopicsOut&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can move topics out of the group or forum. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;maxMessageBytes&quot;: 42, # Deprecated. The maximum size of a message is 25Mb.
    &quot;description&quot;: &quot;A String&quot;, # Description of the group. This property value may be an empty string if no group description has been entered. If entered, the maximum group description is no more than 300 characters.
    &quot;favoriteRepliesOnTop&quot;: &quot;A String&quot;, # Indicates if favorite replies should be displayed above other replies.
        # - true: Favorite replies will be displayed above other replies.
        # - false: Favorite replies will not be displayed above other replies.
    &quot;replyTo&quot;: &quot;A String&quot;, # Specifies who receives the default reply. Possible values are:
        # - REPLY_TO_CUSTOM: For replies to messages, use the group&#x27;s custom email address.
        # When the group&#x27;s ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property holds the custom email address used when replying to a message. If the group&#x27;s ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property must have a value. Otherwise an error is returned.
        #
        # - REPLY_TO_SENDER: The reply sent to author of message.
        # - REPLY_TO_LIST: This reply message is sent to the group.
        # - REPLY_TO_OWNER: The reply is sent to the owner(s) of the group. This does not include the group&#x27;s managers.
        # - REPLY_TO_IGNORE: Group users individually decide where the message reply is sent.
        # - REPLY_TO_MANAGERS: This reply message is sent to the group&#x27;s managers, which includes all managers and the group owner.
    &quot;whoCanApproveMessages&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can approve pending messages in the moderation queue. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;customRolesEnabledForSettingsToBeMerged&quot;: &quot;A String&quot;, # Specifies whether the group has a custom role that&#x27;s included in one of the settings being merged. This field is read-only and update/patch requests to it are ignored. Possible values are:
        # - true
        # - false
    &quot;isArchived&quot;: &quot;A String&quot;, # Allows the Group contents to be archived. Possible values are:
        # - true: Archive messages sent to the group.
        # - false: Do not keep an archive of messages sent to this group. If false, previously archived messages remain in the archive.
    &quot;allowExternalMembers&quot;: &quot;A String&quot;, # Identifies whether members external to your organization can join the group. Possible values are:
        # - true: G Suite users external to your organization can become members of this group.
        # - false: Users not belonging to the organization are not allowed to become members of this group.
    &quot;whoCanInvite&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateMembers setting. Permissions to invite new members. Possible values are:
        # - ALL_MEMBERS_CAN_INVITE: Managers and members can invite a new member candidate.
        # - ALL_MANAGERS_CAN_INVITE: Only managers can invite a new member. This includes the group&#x27;s owner.
        # - ALL_OWNERS_CAN_INVITE: Only owners can invite a new member.
        # - NONE_CAN_INVITE: No one can invite a new member candidate.
    &quot;membersCanPostAsTheGroup&quot;: &quot;A String&quot;, # Enables members to post messages as the group. Possible values are:
        # - true: Group member can post messages using the group&#x27;s email address instead of their own email address. Message appear to originate from the group itself. Note: When true, any message moderation settings on individual users or new members do not apply to posts made on behalf of the group.
        # - false: Members can not post in behalf of the group&#x27;s email address.
    &quot;enableCollaborativeInbox&quot;: &quot;A String&quot;, # Specifies whether a collaborative inbox will remain turned on for the group. Possible values are:
        # - true
        # - false
  }</pre>
</div>

</body></html>