<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="people_v1.html">People API</a> . <a href="people_v1.contactGroups.html">contactGroups</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="people_v1.contactGroups.members.html">members()</a></code>
</p>
<p class="firstline">Returns the members Resource.</p>

<p class="toc_element">
  <code><a href="#batchGet">batchGet(resourceNames=None, maxMembers=None, x__xgafv=None)</a></code></p>
<p class="firstline">Get a list of contact groups owned by the authenticated user by specifying</p>
<p class="toc_element">
  <code><a href="#create">create(body, x__xgafv=None)</a></code></p>
<p class="firstline">Create a new contact group owned by the authenticated user.</p>
<p class="toc_element">
  <code><a href="#delete">delete(resourceName, deleteContacts=None, x__xgafv=None)</a></code></p>
<p class="firstline">Delete an existing contact group owned by the authenticated user by</p>
<p class="toc_element">
  <code><a href="#get">get(resourceName, maxMembers=None, x__xgafv=None)</a></code></p>
<p class="firstline">Get a specific contact group owned by the authenticated user by specifying</p>
<p class="toc_element">
  <code><a href="#list">list(pageSize=None, syncToken=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">List all contact groups owned by the authenticated user. Members of the</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#update">update(resourceName, body, x__xgafv=None)</a></code></p>
<p class="firstline">Update the name of an existing contact group owned by the authenticated</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="batchGet">batchGet(resourceNames=None, maxMembers=None, x__xgafv=None)</code>
  <pre>Get a list of contact groups owned by the authenticated user by specifying
a list of contact group resource names.

Args:
  resourceNames: string, The resource names of the contact groups to get. (repeated)
  maxMembers: integer, Specifies the maximum number of members to return for each group.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response to a batch get contact groups request.
    "responses": [ # The list of responses for each requested contact group resource.
      { # The response for a specific contact group.
        "status": { # The `Status` type defines a logical error model that is suitable for # The status of the response.
            # different programming environments, including REST APIs and RPC APIs. It is
            # used by [gRPC](https://github.com/grpc). Each `Status` message contains
            # three pieces of data: error code, error message, and error details.
            #
            # You can find out more about this error model and how to work with it in the
            # [API Design Guide](https://cloud.google.com/apis/design/errors).
          "message": "A String", # A developer-facing error message, which should be in English. Any
              # user-facing error message should be localized and sent in the
              # google.rpc.Status.details field, or localized by the client.
          "code": 42, # The status code, which should be an enum value of google.rpc.Code.
          "details": [ # A list of messages that carry the error details.  There is a common set of
              # message types for APIs to use.
            {
              "a_key": "", # Properties of the object. Contains field @type with type URL.
            },
          ],
        },
        "requestedResourceName": "A String", # The original requested resource name.
        "contactGroup": { # A contact group. # The contact group.
          "formattedName": "A String", # The read-only name translated and formatted in the viewer's account locale
              # or the `Accept-Language` HTTP header locale for system groups names.
              # Group names set by the owner are the same as name.
          "groupType": "A String", # The read-only contact group type.
          "name": "A String", # The contact group name set by the group owner or a system provided name
              # for system groups.
          "memberResourceNames": [ # The list of contact person resource names that are members of the contact
              # group. The field is not populated for LIST requests and can only be updated
              # through the
              # [ModifyContactGroupMembers](/people/api/rest/v1/contactgroups/members/modify).
            "A String",
          ],
          "memberCount": 42, # The total number of contacts in the group irrespective of max members in
              # specified in the request.
          "etag": "A String", # The [HTTP entity tag](https://en.wikipedia.org/wiki/HTTP_ETag) of the
              # resource. Used for web cache validation.
          "resourceName": "A String", # The resource name for the contact group, assigned by the server. An ASCII
              # string, in the form of `contactGroups/`<var>contact_group_id</var>.
          "metadata": { # The read-only metadata about a contact group. # Metadata about the contact group.
            "deleted": True or False, # True if the contact group resource has been deleted. Populated only for
                # [`ListContactGroups`](/people/api/rest/v1/contactgroups/list) requests
                # that include a sync token.
            "updateTime": "A String", # The time the group was last updated.
          },
        },
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="create">create(body, x__xgafv=None)</code>
  <pre>Create a new contact group owned by the authenticated user.

Args:
  body: object, The request body. (required)
    The object takes the form of:

{ # A request to create a new contact group.
    "contactGroup": { # A contact group. # The contact group to create.
      "formattedName": "A String", # The read-only name translated and formatted in the viewer's account locale
          # or the `Accept-Language` HTTP header locale for system groups names.
          # Group names set by the owner are the same as name.
      "groupType": "A String", # The read-only contact group type.
      "name": "A String", # The contact group name set by the group owner or a system provided name
          # for system groups.
      "memberResourceNames": [ # The list of contact person resource names that are members of the contact
          # group. The field is not populated for LIST requests and can only be updated
          # through the
          # [ModifyContactGroupMembers](/people/api/rest/v1/contactgroups/members/modify).
        "A String",
      ],
      "memberCount": 42, # The total number of contacts in the group irrespective of max members in
          # specified in the request.
      "etag": "A String", # The [HTTP entity tag](https://en.wikipedia.org/wiki/HTTP_ETag) of the
          # resource. Used for web cache validation.
      "resourceName": "A String", # The resource name for the contact group, assigned by the server. An ASCII
          # string, in the form of `contactGroups/`<var>contact_group_id</var>.
      "metadata": { # The read-only metadata about a contact group. # Metadata about the contact group.
        "deleted": True or False, # True if the contact group resource has been deleted. Populated only for
            # [`ListContactGroups`](/people/api/rest/v1/contactgroups/list) requests
            # that include a sync token.
        "updateTime": "A String", # The time the group was last updated.
      },
    },
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A contact group.
    "formattedName": "A String", # The read-only name translated and formatted in the viewer's account locale
        # or the `Accept-Language` HTTP header locale for system groups names.
        # Group names set by the owner are the same as name.
    "groupType": "A String", # The read-only contact group type.
    "name": "A String", # The contact group name set by the group owner or a system provided name
        # for system groups.
    "memberResourceNames": [ # The list of contact person resource names that are members of the contact
        # group. The field is not populated for LIST requests and can only be updated
        # through the
        # [ModifyContactGroupMembers](/people/api/rest/v1/contactgroups/members/modify).
      "A String",
    ],
    "memberCount": 42, # The total number of contacts in the group irrespective of max members in
        # specified in the request.
    "etag": "A String", # The [HTTP entity tag](https://en.wikipedia.org/wiki/HTTP_ETag) of the
        # resource. Used for web cache validation.
    "resourceName": "A String", # The resource name for the contact group, assigned by the server. An ASCII
        # string, in the form of `contactGroups/`<var>contact_group_id</var>.
    "metadata": { # The read-only metadata about a contact group. # Metadata about the contact group.
      "deleted": True or False, # True if the contact group resource has been deleted. Populated only for
          # [`ListContactGroups`](/people/api/rest/v1/contactgroups/list) requests
          # that include a sync token.
      "updateTime": "A String", # The time the group was last updated.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(resourceName, deleteContacts=None, x__xgafv=None)</code>
  <pre>Delete an existing contact group owned by the authenticated user by
specifying a contact group resource name.

Args:
  resourceName: string, The resource name of the contact group to delete. (required)
  deleteContacts: boolean, Set to true to also delete the contacts in the specified group.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated
      # empty messages in your APIs. A typical example is to use it as the request
      # or the response type of an API method. For instance:
      #
      #     service Foo {
      #       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
      #     }
      #
      # The JSON representation for `Empty` is empty JSON object `{}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(resourceName, maxMembers=None, x__xgafv=None)</code>
  <pre>Get a specific contact group owned by the authenticated user by specifying
a contact group resource name.

Args:
  resourceName: string, The resource name of the contact group to get. (required)
  maxMembers: integer, Specifies the maximum number of members to return.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A contact group.
    "formattedName": "A String", # The read-only name translated and formatted in the viewer's account locale
        # or the `Accept-Language` HTTP header locale for system groups names.
        # Group names set by the owner are the same as name.
    "groupType": "A String", # The read-only contact group type.
    "name": "A String", # The contact group name set by the group owner or a system provided name
        # for system groups.
    "memberResourceNames": [ # The list of contact person resource names that are members of the contact
        # group. The field is not populated for LIST requests and can only be updated
        # through the
        # [ModifyContactGroupMembers](/people/api/rest/v1/contactgroups/members/modify).
      "A String",
    ],
    "memberCount": 42, # The total number of contacts in the group irrespective of max members in
        # specified in the request.
    "etag": "A String", # The [HTTP entity tag](https://en.wikipedia.org/wiki/HTTP_ETag) of the
        # resource. Used for web cache validation.
    "resourceName": "A String", # The resource name for the contact group, assigned by the server. An ASCII
        # string, in the form of `contactGroups/`<var>contact_group_id</var>.
    "metadata": { # The read-only metadata about a contact group. # Metadata about the contact group.
      "deleted": True or False, # True if the contact group resource has been deleted. Populated only for
          # [`ListContactGroups`](/people/api/rest/v1/contactgroups/list) requests
          # that include a sync token.
      "updateTime": "A String", # The time the group was last updated.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(pageSize=None, syncToken=None, pageToken=None, x__xgafv=None)</code>
  <pre>List all contact groups owned by the authenticated user. Members of the
contact groups are not populated.

Args:
  pageSize: integer, The maximum number of resources to return.
  syncToken: string, A sync token, returned by a previous call to `contactgroups.list`.
Only resources changed since the sync token was created will be returned.
  pageToken: string, The next_page_token value returned from a previous call to
[ListContactGroups](/people/api/rest/v1/contactgroups/list).
Requests the next page of resources.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response to a list contact groups request.
    "nextPageToken": "A String", # The token that can be used to retrieve the next page of results.
    "contactGroups": [ # The list of contact groups. Members of the contact groups are not
        # populated.
      { # A contact group.
        "formattedName": "A String", # The read-only name translated and formatted in the viewer's account locale
            # or the `Accept-Language` HTTP header locale for system groups names.
            # Group names set by the owner are the same as name.
        "groupType": "A String", # The read-only contact group type.
        "name": "A String", # The contact group name set by the group owner or a system provided name
            # for system groups.
        "memberResourceNames": [ # The list of contact person resource names that are members of the contact
            # group. The field is not populated for LIST requests and can only be updated
            # through the
            # [ModifyContactGroupMembers](/people/api/rest/v1/contactgroups/members/modify).
          "A String",
        ],
        "memberCount": 42, # The total number of contacts in the group irrespective of max members in
            # specified in the request.
        "etag": "A String", # The [HTTP entity tag](https://en.wikipedia.org/wiki/HTTP_ETag) of the
            # resource. Used for web cache validation.
        "resourceName": "A String", # The resource name for the contact group, assigned by the server. An ASCII
            # string, in the form of `contactGroups/`<var>contact_group_id</var>.
        "metadata": { # The read-only metadata about a contact group. # Metadata about the contact group.
          "deleted": True or False, # True if the contact group resource has been deleted. Populated only for
              # [`ListContactGroups`](/people/api/rest/v1/contactgroups/list) requests
              # that include a sync token.
          "updateTime": "A String", # The time the group was last updated.
        },
      },
    ],
    "nextSyncToken": "A String", # The token that can be used to retrieve changes since the last request.
    "totalItems": 42, # The total number of items in the list without pagination.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call 'execute()' on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="update">update(resourceName, body, x__xgafv=None)</code>
  <pre>Update the name of an existing contact group owned by the authenticated
user.

Args:
  resourceName: string, The resource name for the contact group, assigned by the server. An ASCII
string, in the form of `contactGroups/`<var>contact_group_id</var>. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A request to update an existing user contact group. All updated fields will
      # be replaced.
    "contactGroup": { # A contact group. # The contact group to update.
      "formattedName": "A String", # The read-only name translated and formatted in the viewer's account locale
          # or the `Accept-Language` HTTP header locale for system groups names.
          # Group names set by the owner are the same as name.
      "groupType": "A String", # The read-only contact group type.
      "name": "A String", # The contact group name set by the group owner or a system provided name
          # for system groups.
      "memberResourceNames": [ # The list of contact person resource names that are members of the contact
          # group. The field is not populated for LIST requests and can only be updated
          # through the
          # [ModifyContactGroupMembers](/people/api/rest/v1/contactgroups/members/modify).
        "A String",
      ],
      "memberCount": 42, # The total number of contacts in the group irrespective of max members in
          # specified in the request.
      "etag": "A String", # The [HTTP entity tag](https://en.wikipedia.org/wiki/HTTP_ETag) of the
          # resource. Used for web cache validation.
      "resourceName": "A String", # The resource name for the contact group, assigned by the server. An ASCII
          # string, in the form of `contactGroups/`<var>contact_group_id</var>.
      "metadata": { # The read-only metadata about a contact group. # Metadata about the contact group.
        "deleted": True or False, # True if the contact group resource has been deleted. Populated only for
            # [`ListContactGroups`](/people/api/rest/v1/contactgroups/list) requests
            # that include a sync token.
        "updateTime": "A String", # The time the group was last updated.
      },
    },
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A contact group.
    "formattedName": "A String", # The read-only name translated and formatted in the viewer's account locale
        # or the `Accept-Language` HTTP header locale for system groups names.
        # Group names set by the owner are the same as name.
    "groupType": "A String", # The read-only contact group type.
    "name": "A String", # The contact group name set by the group owner or a system provided name
        # for system groups.
    "memberResourceNames": [ # The list of contact person resource names that are members of the contact
        # group. The field is not populated for LIST requests and can only be updated
        # through the
        # [ModifyContactGroupMembers](/people/api/rest/v1/contactgroups/members/modify).
      "A String",
    ],
    "memberCount": 42, # The total number of contacts in the group irrespective of max members in
        # specified in the request.
    "etag": "A String", # The [HTTP entity tag](https://en.wikipedia.org/wiki/HTTP_ETag) of the
        # resource. Used for web cache validation.
    "resourceName": "A String", # The resource name for the contact group, assigned by the server. An ASCII
        # string, in the form of `contactGroups/`<var>contact_group_id</var>.
    "metadata": { # The read-only metadata about a contact group. # Metadata about the contact group.
      "deleted": True or False, # True if the contact group resource has been deleted. Populated only for
          # [`ListContactGroups`](/people/api/rest/v1/contactgroups/list) requests
          # that include a sync token.
      "updateTime": "A String", # The time the group was last updated.
    },
  }</pre>
</div>

</body></html>