<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="firebaseappdistribution_v1.html">Firebase App Distribution API</a> . <a href="firebaseappdistribution_v1.projects.html">projects</a> . <a href="firebaseappdistribution_v1.projects.groups.html">groups</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#batchJoin">batchJoin(group, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Batch adds members to a group. The testers will gain access to all releases that the groups have access to.</p>
<p class="toc_element">
  <code><a href="#batchLeave">batchLeave(group, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Batch removed members from a group. The testers will lose access to all releases that the groups have access to.</p>
<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="#create">create(parent, body=None, groupId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Create a group.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Delete a group.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Get a group.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">List groups.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next()</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Update a group.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="batchJoin">batchJoin(group, body=None, x__xgafv=None)</code>
  <pre>Batch adds members to a group. The testers will gain access to all releases that the groups have access to.

Args:
  group: string, Required. The name of the group resource to which testers are added. Format: `projects/{project_number}/groups/{group_alias}` (required)
  body: object, The request body.
    The object takes the form of:

{ # The request message for `BatchJoinGroup`
  &quot;createMissingTesters&quot;: True or False, # Indicates whether to create tester resources based on `emails` if they don&#x27;t exist yet.
  &quot;emails&quot;: [ # Required. The emails of the testers to be added to the group. A maximum of 999 and a minimum of 1 tester can be created in a batch.
    &quot;A String&quot;,
  ],
}

  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); }
}</pre>
</div>

<div class="method">
    <code class="details" id="batchLeave">batchLeave(group, body=None, x__xgafv=None)</code>
  <pre>Batch removed members from a group. The testers will lose access to all releases that the groups have access to.

Args:
  group: string, Required. The name of the group resource from which testers are removed. Format: `projects/{project_number}/groups/{group_alias}` (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for `BatchLeaveGroup`
  &quot;emails&quot;: [ # Required. The email addresses of the testers to be removed from the group. A maximum of 999 and a minimum of 1 testers can be removed in a batch.
    &quot;A String&quot;,
  ],
}

  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); }
}</pre>
</div>

<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="create">create(parent, body=None, groupId=None, x__xgafv=None)</code>
  <pre>Create a group.

Args:
  parent: string, Required. The name of the project resource, which is the parent of the group resource. Format: `projects/{project_number}` (required)
  body: object, The request body.
    The object takes the form of:

{ # A group which can contain testers. A group can be invited to test apps in a Firebase project.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The display name of the group.
  &quot;inviteLinkCount&quot;: 42, # Output only. The number of invite links for this group.
  &quot;name&quot;: &quot;A String&quot;, # The name of the group resource. Format: `projects/{project_number}/groups/{group_alias}`
  &quot;releaseCount&quot;: 42, # Output only. The number of releases this group is permitted to access.
  &quot;testerCount&quot;: 42, # Output only. The number of testers who are members of this group.
}

  groupId: string, Optional. The &quot;alias&quot; to use for the group, which will become the final component of the group&#x27;s resource name. This value must be unique per project. The field is named `groupId` to comply with AIP guidance for user-specified IDs. This value should be 4-63 characters, and valid characters are `/a-z-/`. If not set, it will be generated based on the display name.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A group which can contain testers. A group can be invited to test apps in a Firebase project.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The display name of the group.
  &quot;inviteLinkCount&quot;: 42, # Output only. The number of invite links for this group.
  &quot;name&quot;: &quot;A String&quot;, # The name of the group resource. Format: `projects/{project_number}/groups/{group_alias}`
  &quot;releaseCount&quot;: 42, # Output only. The number of releases this group is permitted to access.
  &quot;testerCount&quot;: 42, # Output only. The number of testers who are members of this group.
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Delete a group.

Args:
  name: string, Required. The name of the group resource. Format: `projects/{project_number}/groups/{group_alias}` (required)
  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); }
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Get a group.

Args:
  name: string, Required. The name of the group resource to retrieve. Format: `projects/{project_number}/groups/{group_alias}` (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A group which can contain testers. A group can be invited to test apps in a Firebase project.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The display name of the group.
  &quot;inviteLinkCount&quot;: 42, # Output only. The number of invite links for this group.
  &quot;name&quot;: &quot;A String&quot;, # The name of the group resource. Format: `projects/{project_number}/groups/{group_alias}`
  &quot;releaseCount&quot;: 42, # Output only. The number of releases this group is permitted to access.
  &quot;testerCount&quot;: 42, # Output only. The number of testers who are members of this group.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>List groups.

Args:
  parent: string, Required. The name of the project resource, which is the parent of the group resources. Format: `projects/{project_number}` (required)
  pageSize: integer, Optional. The maximum number of groups to return. The service may return fewer than this value. The valid range is [1-1000]; If unspecified (0), at most 25 groups are returned. Values above 1000 are coerced to 1000.
  pageToken: string, Optional. A page token, received from a previous `ListGroups` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListGroups` must match the call that provided the page token.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response message for `ListGroups`.
  &quot;groups&quot;: [ # The groups listed.
    { # A group which can contain testers. A group can be invited to test apps in a Firebase project.
      &quot;displayName&quot;: &quot;A String&quot;, # Required. The display name of the group.
      &quot;inviteLinkCount&quot;: 42, # Output only. The number of invite links for this group.
      &quot;name&quot;: &quot;A String&quot;, # The name of the group resource. Format: `projects/{project_number}/groups/{group_alias}`
      &quot;releaseCount&quot;: 42, # Output only. The number of releases this group is permitted to access.
      &quot;testerCount&quot;: 42, # Output only. The number of testers who are members of this group.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # A short-lived token, which can be sent as `pageToken` to retrieve the next page. If this field is omitted, there are no subsequent pages.
}</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next()</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 &#x27;execute()&#x27; 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="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Update a group.

Args:
  name: string, The name of the group resource. Format: `projects/{project_number}/groups/{group_alias}` (required)
  body: object, The request body.
    The object takes the form of:

{ # A group which can contain testers. A group can be invited to test apps in a Firebase project.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The display name of the group.
  &quot;inviteLinkCount&quot;: 42, # Output only. The number of invite links for this group.
  &quot;name&quot;: &quot;A String&quot;, # The name of the group resource. Format: `projects/{project_number}/groups/{group_alias}`
  &quot;releaseCount&quot;: 42, # Output only. The number of releases this group is permitted to access.
  &quot;testerCount&quot;: 42, # Output only. The number of testers who are members of this group.
}

  updateMask: string, The list of fields to update.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A group which can contain testers. A group can be invited to test apps in a Firebase project.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The display name of the group.
  &quot;inviteLinkCount&quot;: 42, # Output only. The number of invite links for this group.
  &quot;name&quot;: &quot;A String&quot;, # The name of the group resource. Format: `projects/{project_number}/groups/{group_alias}`
  &quot;releaseCount&quot;: 42, # Output only. The number of releases this group is permitted to access.
  &quot;testerCount&quot;: 42, # Output only. The number of testers who are members of this group.
}</pre>
</div>

</body></html>