<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="vault_v1.html">G Suite Vault API</a> . <a href="vault_v1.matters.html">matters</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="vault_v1.matters.exports.html">exports()</a></code>
</p>
<p class="firstline">Returns the exports Resource.</p>

<p class="toc_element">
  <code><a href="vault_v1.matters.holds.html">holds()</a></code>
</p>
<p class="firstline">Returns the holds Resource.</p>

<p class="toc_element">
  <code><a href="vault_v1.matters.savedQueries.html">savedQueries()</a></code>
</p>
<p class="firstline">Returns the savedQueries Resource.</p>

<p class="toc_element">
  <code><a href="#addPermissions">addPermissions(matterId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Adds an account as a matter collaborator.</p>
<p class="toc_element">
  <code><a href="#close">close(matterId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Closes the specified matter. Returns matter with updated state.</p>
<p class="toc_element">
  <code><a href="#count">count(matterId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Counts the artifacts within the context of a matter and returns a detailed breakdown of metrics.</p>
<p class="toc_element">
  <code><a href="#create">create(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new matter with the given name and description. The initial state is open, and the owner is the method caller. Returns the created matter with default view.</p>
<p class="toc_element">
  <code><a href="#delete">delete(matterId, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes the specified matter. Returns matter with updated state.</p>
<p class="toc_element">
  <code><a href="#get">get(matterId, view=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the specified matter.</p>
<p class="toc_element">
  <code><a href="#list">list(pageSize=None, pageToken=None, state=None, view=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists matters the user has access to.</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="#removePermissions">removePermissions(matterId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Removes an account as a matter collaborator.</p>
<p class="toc_element">
  <code><a href="#reopen">reopen(matterId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Reopens the specified matter. Returns matter with updated state.</p>
<p class="toc_element">
  <code><a href="#undelete">undelete(matterId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Undeletes the specified matter. Returns matter with updated state.</p>
<p class="toc_element">
  <code><a href="#update">update(matterId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the specified matter. This updates only the name and description of the matter, identified by matter ID. Changes to any other fields are ignored. Returns the default view of the matter.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="addPermissions">addPermissions(matterId, body=None, x__xgafv=None)</code>
  <pre>Adds an account as a matter collaborator.

Args:
  matterId: string, The matter ID. (required)
  body: object, The request body.
    The object takes the form of:

{ # Add an account with the permission specified. The role cannot be owner. If an account already has a role in the matter, it will be overwritten.
  &quot;ccMe&quot;: True or False, # Only relevant if send_emails is true. True to CC requestor in the email message. False to not CC requestor.
  &quot;matterPermission&quot;: { # Currently each matter only has one owner, and all others are collaborators. When an account is purged, its corresponding MatterPermission resources cease to exist. # The MatterPermission to add.
    &quot;accountId&quot;: &quot;A String&quot;, # The account ID, as provided by Admin SDK.
    &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role in this matter.
  },
  &quot;sendEmails&quot;: True or False, # True to send notification email to the added account. False to not send notification email.
}

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

Returns:
  An object of the form:

    { # Currently each matter only has one owner, and all others are collaborators. When an account is purged, its corresponding MatterPermission resources cease to exist.
  &quot;accountId&quot;: &quot;A String&quot;, # The account ID, as provided by Admin SDK.
  &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role in this matter.
}</pre>
</div>

<div class="method">
    <code class="details" id="close">close(matterId, body=None, x__xgafv=None)</code>
  <pre>Closes the specified matter. Returns matter with updated state.

Args:
  matterId: string, The matter ID. (required)
  body: object, The request body.
    The object takes the form of:

{ # Close a matter by ID.
}

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

Returns:
  An object of the form:

    { # Response to a CloseMatterRequest.
  &quot;matter&quot;: { # Represents a matter. # The updated matter, with state CLOSED.
    &quot;description&quot;: &quot;A String&quot;, # The description of the matter.
    &quot;matterId&quot;: &quot;A String&quot;, # The matter ID which is generated by the server. Should be blank when creating a new matter.
    &quot;matterPermissions&quot;: [ # List of users and access to the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
      { # Currently each matter only has one owner, and all others are collaborators. When an account is purged, its corresponding MatterPermission resources cease to exist.
        &quot;accountId&quot;: &quot;A String&quot;, # The account ID, as provided by Admin SDK.
        &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role in this matter.
      },
    ],
    &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
    &quot;state&quot;: &quot;A String&quot;, # The state of the matter.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="count">count(matterId, body=None, x__xgafv=None)</code>
  <pre>Counts the artifacts within the context of a matter and returns a detailed breakdown of metrics.

Args:
  matterId: string, The matter ID. (required)
  body: object, The request body.
    The object takes the form of:

{ # Count artifacts request.
  &quot;query&quot;: { # A query definition relevant for search &amp; export. # The search query.
    &quot;accountInfo&quot;: { # Accounts to search # When &#x27;ACCOUNT&#x27; is chosen as search method, account_info needs to be specified.
      &quot;emails&quot;: [ # A set of accounts to search.
        &quot;A String&quot;,
      ],
    },
    &quot;corpus&quot;: &quot;A String&quot;, # The corpus to search.
    &quot;dataScope&quot;: &quot;A String&quot;, # The data source to search from.
    &quot;driveOptions&quot;: { # Drive search advanced options # For Drive search, specify more options in this field.
      &quot;includeSharedDrives&quot;: True or False, # Set to true to include shared drive.
      &quot;includeTeamDrives&quot;: True or False, # Set to true to include Team Drive.
      &quot;versionDate&quot;: &quot;A String&quot;, # Search the versions of the Drive file as of the reference date. These timestamps are in GMT and rounded down to the given date.
    },
    &quot;endTime&quot;: &quot;A String&quot;, # The end time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
    &quot;hangoutsChatInfo&quot;: { # Accounts to search # When &#x27;ROOM&#x27; is chosen as search method, hangout_chats_info needs to be specified. (read-only)
      &quot;roomId&quot;: [ # A set of rooms to search.
        &quot;A String&quot;,
      ],
    },
    &quot;hangoutsChatOptions&quot;: { # Hangouts chat search advanced options # For hangouts chat search, specify more options in this field. (read-only)
      &quot;includeRooms&quot;: True or False, # Set to true to include rooms.
    },
    &quot;mailOptions&quot;: { # Mail search advanced options # For mail search, specify more options in this field.
      &quot;excludeDrafts&quot;: True or False, # Set to true to exclude drafts.
    },
    &quot;method&quot;: &quot;A String&quot;, # The search method to use. This field is similar to the search_method field but is introduced to support shared drives. It supports all search method types. In case the search_method is TEAM_DRIVE the response of this field will be SHARED_DRIVE only.
    &quot;orgUnitInfo&quot;: { # Org Unit to search # When &#x27;ORG_UNIT&#x27; is chosen as as search method, org_unit_info needs to be specified.
      &quot;orgUnitId&quot;: &quot;A String&quot;, # Org unit to search, as provided by the Admin SDK Directory API.
    },
    &quot;searchMethod&quot;: &quot;A String&quot;, # The search method to use.
    &quot;sharedDriveInfo&quot;: { # Shared drives to search # When &#x27;SHARED_DRIVE&#x27; is chosen as search method, shared_drive_info needs to be specified.
      &quot;sharedDriveIds&quot;: [ # List of Shared drive IDs, as provided by Drive API.
        &quot;A String&quot;,
      ],
    },
    &quot;startTime&quot;: &quot;A String&quot;, # The start time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.
    &quot;teamDriveInfo&quot;: { # Team Drives to search # When &#x27;TEAM_DRIVE&#x27; is chosen as search method, team_drive_info needs to be specified.
      &quot;teamDriveIds&quot;: [ # List of Team Drive IDs, as provided by Drive API.
        &quot;A String&quot;,
      ],
    },
    &quot;terms&quot;: &quot;A String&quot;, # The corpus-specific search operators used to generate search results.
    &quot;timeZone&quot;: &quot;A String&quot;, # The time zone name. It should be an IANA TZ name, such as &quot;America/Los_Angeles&quot;. For more information, see Time Zone.
    &quot;voiceOptions&quot;: { # Voice search options # For voice search, specify more options in this field.
      &quot;coveredData&quot;: [ # Datatypes to search
        &quot;A String&quot;,
      ],
    },
  },
  &quot;view&quot;: &quot;A String&quot;, # Specifies the granularity of the count result returned in response.
}

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

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a network API call.
  &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.
  &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for 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). # The error result of the operation in case of failure or cancellation.
    &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
      {
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
      },
    ],
    &quot;message&quot;: &quot;A String&quot;, # 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.
  },
  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
  &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
  &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="create">create(body=None, x__xgafv=None)</code>
  <pre>Creates a new matter with the given name and description. The initial state is open, and the owner is the method caller. Returns the created matter with default view.

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

{ # Represents a matter.
  &quot;description&quot;: &quot;A String&quot;, # The description of the matter.
  &quot;matterId&quot;: &quot;A String&quot;, # The matter ID which is generated by the server. Should be blank when creating a new matter.
  &quot;matterPermissions&quot;: [ # List of users and access to the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
    { # Currently each matter only has one owner, and all others are collaborators. When an account is purged, its corresponding MatterPermission resources cease to exist.
      &quot;accountId&quot;: &quot;A String&quot;, # The account ID, as provided by Admin SDK.
      &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role in this matter.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
  &quot;state&quot;: &quot;A String&quot;, # The state of the matter.
}

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

Returns:
  An object of the form:

    { # Represents a matter.
  &quot;description&quot;: &quot;A String&quot;, # The description of the matter.
  &quot;matterId&quot;: &quot;A String&quot;, # The matter ID which is generated by the server. Should be blank when creating a new matter.
  &quot;matterPermissions&quot;: [ # List of users and access to the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
    { # Currently each matter only has one owner, and all others are collaborators. When an account is purged, its corresponding MatterPermission resources cease to exist.
      &quot;accountId&quot;: &quot;A String&quot;, # The account ID, as provided by Admin SDK.
      &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role in this matter.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
  &quot;state&quot;: &quot;A String&quot;, # The state of the matter.
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(matterId, x__xgafv=None)</code>
  <pre>Deletes the specified matter. Returns matter with updated state.

Args:
  matterId: string, The matter ID (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents a matter.
  &quot;description&quot;: &quot;A String&quot;, # The description of the matter.
  &quot;matterId&quot;: &quot;A String&quot;, # The matter ID which is generated by the server. Should be blank when creating a new matter.
  &quot;matterPermissions&quot;: [ # List of users and access to the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
    { # Currently each matter only has one owner, and all others are collaborators. When an account is purged, its corresponding MatterPermission resources cease to exist.
      &quot;accountId&quot;: &quot;A String&quot;, # The account ID, as provided by Admin SDK.
      &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role in this matter.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
  &quot;state&quot;: &quot;A String&quot;, # The state of the matter.
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(matterId, view=None, x__xgafv=None)</code>
  <pre>Gets the specified matter.

Args:
  matterId: string, The matter ID. (required)
  view: string, Specifies which parts of the Matter to return in the response.
    Allowed values
      VIEW_UNSPECIFIED - There is no specified view.
      BASIC - Response includes the matter_id, name, description, and state. Default choice.
      FULL - Full representation of matter is returned. Everything above and including MatterPermissions list.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents a matter.
  &quot;description&quot;: &quot;A String&quot;, # The description of the matter.
  &quot;matterId&quot;: &quot;A String&quot;, # The matter ID which is generated by the server. Should be blank when creating a new matter.
  &quot;matterPermissions&quot;: [ # List of users and access to the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
    { # Currently each matter only has one owner, and all others are collaborators. When an account is purged, its corresponding MatterPermission resources cease to exist.
      &quot;accountId&quot;: &quot;A String&quot;, # The account ID, as provided by Admin SDK.
      &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role in this matter.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
  &quot;state&quot;: &quot;A String&quot;, # The state of the matter.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(pageSize=None, pageToken=None, state=None, view=None, x__xgafv=None)</code>
  <pre>Lists matters the user has access to.

Args:
  pageSize: integer, The number of matters to return in the response. Default and maximum are 100.
  pageToken: string, The pagination token as returned in the response.
  state: string, If set, list only matters with that specific state. The default is listing matters of all states.
    Allowed values
      STATE_UNSPECIFIED - The matter has no specified state.
      OPEN - This matter is open.
      CLOSED - This matter is closed.
      DELETED - This matter is deleted.
  view: string, Specifies which parts of the matter to return in response.
    Allowed values
      VIEW_UNSPECIFIED - There is no specified view.
      BASIC - Response includes the matter_id, name, description, and state. Default choice.
      FULL - Full representation of matter is returned. Everything above and including MatterPermissions list.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Provides the list of matters.
  &quot;matters&quot;: [ # List of matters.
    { # Represents a matter.
      &quot;description&quot;: &quot;A String&quot;, # The description of the matter.
      &quot;matterId&quot;: &quot;A String&quot;, # The matter ID which is generated by the server. Should be blank when creating a new matter.
      &quot;matterPermissions&quot;: [ # List of users and access to the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
        { # Currently each matter only has one owner, and all others are collaborators. When an account is purged, its corresponding MatterPermission resources cease to exist.
          &quot;accountId&quot;: &quot;A String&quot;, # The account ID, as provided by Admin SDK.
          &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role in this matter.
        },
      ],
      &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
      &quot;state&quot;: &quot;A String&quot;, # The state of the matter.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Page token to retrieve the next page of results in the list.
}</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 &#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="removePermissions">removePermissions(matterId, body=None, x__xgafv=None)</code>
  <pre>Removes an account as a matter collaborator.

Args:
  matterId: string, The matter ID. (required)
  body: object, The request body.
    The object takes the form of:

{ # Remove an account as a matter collaborator.
  &quot;accountId&quot;: &quot;A String&quot;, # The account ID.
}

  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="reopen">reopen(matterId, body=None, x__xgafv=None)</code>
  <pre>Reopens the specified matter. Returns matter with updated state.

Args:
  matterId: string, The matter ID. (required)
  body: object, The request body.
    The object takes the form of:

{ # Reopen a matter by ID.
}

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

Returns:
  An object of the form:

    { # Response to a ReopenMatterRequest.
  &quot;matter&quot;: { # Represents a matter. # The updated matter, with state OPEN.
    &quot;description&quot;: &quot;A String&quot;, # The description of the matter.
    &quot;matterId&quot;: &quot;A String&quot;, # The matter ID which is generated by the server. Should be blank when creating a new matter.
    &quot;matterPermissions&quot;: [ # List of users and access to the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
      { # Currently each matter only has one owner, and all others are collaborators. When an account is purged, its corresponding MatterPermission resources cease to exist.
        &quot;accountId&quot;: &quot;A String&quot;, # The account ID, as provided by Admin SDK.
        &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role in this matter.
      },
    ],
    &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
    &quot;state&quot;: &quot;A String&quot;, # The state of the matter.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="undelete">undelete(matterId, body=None, x__xgafv=None)</code>
  <pre>Undeletes the specified matter. Returns matter with updated state.

Args:
  matterId: string, The matter ID. (required)
  body: object, The request body.
    The object takes the form of:

{ # Undelete a matter by ID.
}

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

Returns:
  An object of the form:

    { # Represents a matter.
  &quot;description&quot;: &quot;A String&quot;, # The description of the matter.
  &quot;matterId&quot;: &quot;A String&quot;, # The matter ID which is generated by the server. Should be blank when creating a new matter.
  &quot;matterPermissions&quot;: [ # List of users and access to the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
    { # Currently each matter only has one owner, and all others are collaborators. When an account is purged, its corresponding MatterPermission resources cease to exist.
      &quot;accountId&quot;: &quot;A String&quot;, # The account ID, as provided by Admin SDK.
      &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role in this matter.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
  &quot;state&quot;: &quot;A String&quot;, # The state of the matter.
}</pre>
</div>

<div class="method">
    <code class="details" id="update">update(matterId, body=None, x__xgafv=None)</code>
  <pre>Updates the specified matter. This updates only the name and description of the matter, identified by matter ID. Changes to any other fields are ignored. Returns the default view of the matter.

Args:
  matterId: string, The matter ID. (required)
  body: object, The request body.
    The object takes the form of:

{ # Represents a matter.
  &quot;description&quot;: &quot;A String&quot;, # The description of the matter.
  &quot;matterId&quot;: &quot;A String&quot;, # The matter ID which is generated by the server. Should be blank when creating a new matter.
  &quot;matterPermissions&quot;: [ # List of users and access to the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
    { # Currently each matter only has one owner, and all others are collaborators. When an account is purged, its corresponding MatterPermission resources cease to exist.
      &quot;accountId&quot;: &quot;A String&quot;, # The account ID, as provided by Admin SDK.
      &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role in this matter.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
  &quot;state&quot;: &quot;A String&quot;, # The state of the matter.
}

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

Returns:
  An object of the form:

    { # Represents a matter.
  &quot;description&quot;: &quot;A String&quot;, # The description of the matter.
  &quot;matterId&quot;: &quot;A String&quot;, # The matter ID which is generated by the server. Should be blank when creating a new matter.
  &quot;matterPermissions&quot;: [ # List of users and access to the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.
    { # Currently each matter only has one owner, and all others are collaborators. When an account is purged, its corresponding MatterPermission resources cease to exist.
      &quot;accountId&quot;: &quot;A String&quot;, # The account ID, as provided by Admin SDK.
      &quot;role&quot;: &quot;A String&quot;, # The user&#x27;s role in this matter.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # The name of the matter.
  &quot;state&quot;: &quot;A String&quot;, # The state of the matter.
}</pre>
</div>

</body></html>