<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="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<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="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<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;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;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;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;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;includeCustomFooter&quot;: &quot;A String&quot;, # Whether to include custom footer. Possible values are:
          # - true
          # - false
      &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;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;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;whoCanModerateMembers&quot;: &quot;A String&quot;, # Specifies who can manage members. Possible values are:
          # - ALL_MEMBERS
          # - OWNERS_AND_MANAGERS
          # - OWNERS_ONLY
          # - NONE
      &quot;kind&quot;: &quot;groupsSettings#groups&quot;, # The type of the resource. It is always groupsSettings#groups.
      &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;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;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;maxMessageBytes&quot;: 42, # Deprecated. The maximum size of a message is 25Mb.
      &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;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;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;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;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;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;name&quot;: &quot;A String&quot;, # Name of the group, which has a maximum size of 75 characters.
      &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;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;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;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;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;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;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;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;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;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;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;customFooterText&quot;: &quot;A String&quot;, # Set the content of custom footer text. The maximum number of characters is 1,000.
      &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;enableCollaborativeInbox&quot;: &quot;A String&quot;, # Specifies whether a collaborative inbox will remain turned on for the group. Possible values are:
          # - true
          # - false
      &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;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;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;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;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;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;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;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;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;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;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;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;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;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;whoCanModerateContent&quot;: &quot;A String&quot;, # Specifies who can moderate content. Possible values are:
          # - ALL_MEMBERS
          # - OWNERS_AND_MANAGERS
          # - OWNERS_ONLY
          # - NONE
      &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;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;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;messageDisplayFont&quot;: &quot;A String&quot;, # Deprecated. The default message display font always has a value of &quot;DEFAULT_FONT&quot;.
      &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;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;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;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;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;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;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
    }</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;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;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;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;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;includeCustomFooter&quot;: &quot;A String&quot;, # Whether to include custom footer. Possible values are:
        # - true
        # - false
    &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;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;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;whoCanModerateMembers&quot;: &quot;A String&quot;, # Specifies who can manage members. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;kind&quot;: &quot;groupsSettings#groups&quot;, # The type of the resource. It is always groupsSettings#groups.
    &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;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;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;maxMessageBytes&quot;: 42, # Deprecated. The maximum size of a message is 25Mb.
    &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;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;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;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;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;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;name&quot;: &quot;A String&quot;, # Name of the group, which has a maximum size of 75 characters.
    &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;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;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;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;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;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;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;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;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;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;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;customFooterText&quot;: &quot;A String&quot;, # Set the content of custom footer text. The maximum number of characters is 1,000.
    &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;enableCollaborativeInbox&quot;: &quot;A String&quot;, # Specifies whether a collaborative inbox will remain turned on for the group. Possible values are:
        # - true
        # - false
    &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;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;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;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;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;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;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;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;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;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;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;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;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;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;whoCanModerateContent&quot;: &quot;A String&quot;, # Specifies who can moderate content. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &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;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;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;messageDisplayFont&quot;: &quot;A String&quot;, # Deprecated. The default message display font always has a value of &quot;DEFAULT_FONT&quot;.
    &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;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;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;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;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;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;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
  }


Returns:
  An object of the form:

    { # JSON template for Group resource
      &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;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;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;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;includeCustomFooter&quot;: &quot;A String&quot;, # Whether to include custom footer. Possible values are:
          # - true
          # - false
      &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;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;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;whoCanModerateMembers&quot;: &quot;A String&quot;, # Specifies who can manage members. Possible values are:
          # - ALL_MEMBERS
          # - OWNERS_AND_MANAGERS
          # - OWNERS_ONLY
          # - NONE
      &quot;kind&quot;: &quot;groupsSettings#groups&quot;, # The type of the resource. It is always groupsSettings#groups.
      &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;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;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;maxMessageBytes&quot;: 42, # Deprecated. The maximum size of a message is 25Mb.
      &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;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;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;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;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;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;name&quot;: &quot;A String&quot;, # Name of the group, which has a maximum size of 75 characters.
      &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;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;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;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;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;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;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;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;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;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;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;customFooterText&quot;: &quot;A String&quot;, # Set the content of custom footer text. The maximum number of characters is 1,000.
      &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;enableCollaborativeInbox&quot;: &quot;A String&quot;, # Specifies whether a collaborative inbox will remain turned on for the group. Possible values are:
          # - true
          # - false
      &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;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;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;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;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;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;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;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;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;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;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;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;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;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;whoCanModerateContent&quot;: &quot;A String&quot;, # Specifies who can moderate content. Possible values are:
          # - ALL_MEMBERS
          # - OWNERS_AND_MANAGERS
          # - OWNERS_ONLY
          # - NONE
      &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;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;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;messageDisplayFont&quot;: &quot;A String&quot;, # Deprecated. The default message display font always has a value of &quot;DEFAULT_FONT&quot;.
      &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;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;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;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;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;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;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
    }</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;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;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;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;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;includeCustomFooter&quot;: &quot;A String&quot;, # Whether to include custom footer. Possible values are:
        # - true
        # - false
    &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;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;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;whoCanModerateMembers&quot;: &quot;A String&quot;, # Specifies who can manage members. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &quot;kind&quot;: &quot;groupsSettings#groups&quot;, # The type of the resource. It is always groupsSettings#groups.
    &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;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;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;maxMessageBytes&quot;: 42, # Deprecated. The maximum size of a message is 25Mb.
    &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;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;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;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;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;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;name&quot;: &quot;A String&quot;, # Name of the group, which has a maximum size of 75 characters.
    &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;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;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;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;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;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;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;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;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;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;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;customFooterText&quot;: &quot;A String&quot;, # Set the content of custom footer text. The maximum number of characters is 1,000.
    &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;enableCollaborativeInbox&quot;: &quot;A String&quot;, # Specifies whether a collaborative inbox will remain turned on for the group. Possible values are:
        # - true
        # - false
    &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;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;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;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;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;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;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;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;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;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;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;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;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;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;whoCanModerateContent&quot;: &quot;A String&quot;, # Specifies who can moderate content. Possible values are:
        # - ALL_MEMBERS
        # - OWNERS_AND_MANAGERS
        # - OWNERS_ONLY
        # - NONE
    &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;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;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;messageDisplayFont&quot;: &quot;A String&quot;, # Deprecated. The default message display font always has a value of &quot;DEFAULT_FONT&quot;.
    &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;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;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;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;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;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;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
  }


Returns:
  An object of the form:

    { # JSON template for Group resource
      &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;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;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;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;includeCustomFooter&quot;: &quot;A String&quot;, # Whether to include custom footer. Possible values are:
          # - true
          # - false
      &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;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;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;whoCanModerateMembers&quot;: &quot;A String&quot;, # Specifies who can manage members. Possible values are:
          # - ALL_MEMBERS
          # - OWNERS_AND_MANAGERS
          # - OWNERS_ONLY
          # - NONE
      &quot;kind&quot;: &quot;groupsSettings#groups&quot;, # The type of the resource. It is always groupsSettings#groups.
      &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;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;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;maxMessageBytes&quot;: 42, # Deprecated. The maximum size of a message is 25Mb.
      &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;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;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;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;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;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;name&quot;: &quot;A String&quot;, # Name of the group, which has a maximum size of 75 characters.
      &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;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;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;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;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;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;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;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;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;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;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;customFooterText&quot;: &quot;A String&quot;, # Set the content of custom footer text. The maximum number of characters is 1,000.
      &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;enableCollaborativeInbox&quot;: &quot;A String&quot;, # Specifies whether a collaborative inbox will remain turned on for the group. Possible values are:
          # - true
          # - false
      &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;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;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;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;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;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;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;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;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;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;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;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;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;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;whoCanModerateContent&quot;: &quot;A String&quot;, # Specifies who can moderate content. Possible values are:
          # - ALL_MEMBERS
          # - OWNERS_AND_MANAGERS
          # - OWNERS_ONLY
          # - NONE
      &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;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;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;messageDisplayFont&quot;: &quot;A String&quot;, # Deprecated. The default message display font always has a value of &quot;DEFAULT_FONT&quot;.
      &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;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;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;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;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;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;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
    }</pre>
</div>

</body></html>