<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="cloudsupport_v2beta.html">Google Cloud Support API</a> . <a href="cloudsupport_v2beta.cases.html">cases</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="cloudsupport_v2beta.cases.attachments.html">attachments()</a></code>
</p>
<p class="firstline">Returns the attachments Resource.</p>

<p class="toc_element">
  <code><a href="cloudsupport_v2beta.cases.comments.html">comments()</a></code>
</p>
<p class="firstline">Returns the comments Resource.</p>

<p class="toc_element">
  <code><a href="#close">close(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Close a case. EXAMPLES: cURL: ```shell case="projects/some-project/cases/43595344" curl \ --request POST \ --header "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://cloudsupport.googleapis.com/v2/$case:close" ``` Python: ```python import googleapiclient.discovery api_version = "v2" supportApiService = googleapiclient.discovery.build( serviceName="cloudsupport", version=api_version, discoveryServiceUrl=f"https://cloudsupport.googleapis.com/$discovery/rest?version={api_version}", ) request = supportApiService.cases().close( name="projects/some-project/cases/43595344" ) print(request.execute()) ```</p>
<p class="toc_element">
  <code><a href="#create">create(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Create a new case and associate it with a parent. It must have the following fields set: `display_name`, `description`, `classification`, and `priority`. If you're just testing the API and don't want to route your case to an agent, set `testCase=true`. EXAMPLES: cURL: ```shell parent="projects/some-project" curl \ --request POST \ --header "Authorization: Bearer $(gcloud auth print-access-token)" \ --header 'Content-Type: application/json' \ --data '{ "display_name": "Test case created by me.", "description": "a random test case, feel free to close", "classification": { "id": "100IK2AKCLHMGRJ9CDGMOCGP8DM6UTB4BT262T31BT1M2T31DHNMENPO6KS36CPJ786L2TBFEHGN6NPI64R3CDHN8880G08I1H3MURR7DHII0GRCDTQM8" }, "time_zone": "-07:00", "subscriber_email_addresses": [ "foo@domain.com", "bar@domain.com" ], "testCase": true, "priority": "P3" }' \ "https://cloudsupport.googleapis.com/v2/$parent/cases" ``` Python: ```python import googleapiclient.discovery api_version = "v2" supportApiService = googleapiclient.discovery.build( serviceName="cloudsupport", version=api_version, discoveryServiceUrl=f"https://cloudsupport.googleapis.com/$discovery/rest?version={api_version}", ) request = supportApiService.cases().create( parent="projects/some-project", body={ "displayName": "A Test Case", "description": "This is a test case.", "testCase": True, "priority": "P2", "classification": { "id": "100IK2AKCLHMGRJ9CDGMOCGP8DM6UTB4BT262T31BT1M2T31DHNMENPO6KS36CPJ786L2TBFEHGN6NPI64R3CDHN8880G08I1H3MURR7DHII0GRCDTQM8" }, }, ) print(request.execute()) ```</p>
<p class="toc_element">
  <code><a href="#escalate">escalate(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Escalate a case, starting the Google Cloud Support escalation management process. This operation is only available for some support services. Go to https://cloud.google.com/support and look for 'Technical support escalations' in the feature list to find out which ones let you do that. EXAMPLES: cURL: ```shell case="projects/some-project/cases/43595344" curl \ --request POST \ --header "Authorization: Bearer $(gcloud auth print-access-token)" \ --header "Content-Type: application/json" \ --data '{ "escalation": { "reason": "BUSINESS_IMPACT", "justification": "This is a test escalation." } }' \ "https://cloudsupport.googleapis.com/v2/$case:escalate" ``` Python: ```python import googleapiclient.discovery api_version = "v2" supportApiService = googleapiclient.discovery.build( serviceName="cloudsupport", version=api_version, discoveryServiceUrl=f"https://cloudsupport.googleapis.com/$discovery/rest?version={api_version}", ) request = supportApiService.cases().escalate( name="projects/some-project/cases/43595344", body={ "escalation": { "reason": "BUSINESS_IMPACT", "justification": "This is a test escalation.", }, }, ) print(request.execute()) ```</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieve a case. EXAMPLES: cURL: ```shell case="projects/some-project/cases/16033687" curl \ --header "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://cloudsupport.googleapis.com/v2/$case" ``` Python: ```python import googleapiclient.discovery api_version = "v2" supportApiService = googleapiclient.discovery.build( serviceName="cloudsupport", version=api_version, discoveryServiceUrl=f"https://cloudsupport.googleapis.com/$discovery/rest?version={api_version}", ) request = supportApiService.cases().get( name="projects/some-project/cases/43595344", ) print(request.execute()) ```</p>
<p class="toc_element">
  <code><a href="#list">list(parent, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieve all cases under a parent, but not its children. For example, listing cases under an organization only returns the cases that are directly parented by that organization. To retrieve cases under an organization and its projects, use `cases.search`. EXAMPLES: cURL: ```shell parent="projects/some-project" curl \ --header "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://cloudsupport.googleapis.com/v2/$parent/cases" ``` Python: ```python import googleapiclient.discovery api_version = "v2" supportApiService = googleapiclient.discovery.build( serviceName="cloudsupport", version=api_version, discoveryServiceUrl=f"https://cloudsupport.googleapis.com/$discovery/rest?version={api_version}", ) request = supportApiService.cases().list(parent="projects/some-project") print(request.execute()) ```</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 case. Only some fields can be updated. EXAMPLES: cURL: ```shell case="projects/some-project/cases/43595344" curl \ --request PATCH \ --header "Authorization: Bearer $(gcloud auth print-access-token)" \ --header "Content-Type: application/json" \ --data '{ "priority": "P1" }' \ "https://cloudsupport.googleapis.com/v2/$case?updateMask=priority" ``` Python: ```python import googleapiclient.discovery api_version = "v2" supportApiService = googleapiclient.discovery.build( serviceName="cloudsupport", version=api_version, discoveryServiceUrl=f"https://cloudsupport.googleapis.com/$discovery/rest?version={api_version}", ) request = supportApiService.cases().patch( name="projects/some-project/cases/43112854", body={ "displayName": "This is Now a New Title", "priority": "P2", }, ) print(request.execute()) ```</p>
<p class="toc_element">
  <code><a href="#search">search(pageSize=None, pageToken=None, parent=None, query=None, x__xgafv=None)</a></code></p>
<p class="firstline">Search for cases using a query. EXAMPLES: cURL: ```shell parent="projects/some-project" curl \ --header "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://cloudsupport.googleapis.com/v2/$parent/cases:search" ``` Python: ```python import googleapiclient.discovery api_version = "v2" supportApiService = googleapiclient.discovery.build( serviceName="cloudsupport", version=api_version, discoveryServiceUrl=f"https://cloudsupport.googleapis.com/$discovery/rest?version={api_version}", ) request = supportApiService.cases().search( parent="projects/some-project", query="state=OPEN" ) print(request.execute()) ```</p>
<p class="toc_element">
  <code><a href="#search_next">search_next()</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close(name, body=None, x__xgafv=None)</code>
  <pre>Close a case. EXAMPLES: cURL: ```shell case=&quot;projects/some-project/cases/43595344&quot; curl \ --request POST \ --header &quot;Authorization: Bearer $(gcloud auth print-access-token)&quot; \ &quot;https://cloudsupport.googleapis.com/v2/$case:close&quot; ``` Python: ```python import googleapiclient.discovery api_version = &quot;v2&quot; supportApiService = googleapiclient.discovery.build( serviceName=&quot;cloudsupport&quot;, version=api_version, discoveryServiceUrl=f&quot;https://cloudsupport.googleapis.com/$discovery/rest?version={api_version}&quot;, ) request = supportApiService.cases().close( name=&quot;projects/some-project/cases/43595344&quot; ) print(request.execute()) ```

Args:
  name: string, Required. The name of the case to close. (required)
  body: object, The request body.
    The object takes the form of:

{ # The request message for the CloseCase endpoint.
}

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

Returns:
  An object of the form:

    { # A support case.
  &quot;classification&quot;: { # A classification object with a product type and value. # The issue classification applicable to this case.
    &quot;displayName&quot;: &quot;A String&quot;, # A display name for the classification. The display name is not static and can change. To uniquely and consistently identify classifications, use the `CaseClassification.id` field.
    &quot;id&quot;: &quot;A String&quot;, # The unique ID for a classification. Must be specified for case creation. To retrieve valid classification IDs for case creation, use `caseClassifications.search`. Classification IDs returned by `caseClassifications.search` are guaranteed to be valid for at least 6 months. If a given classification is deactiveated, it will immediately stop being returned. After 6 months, `case.create` requests using the classification ID will fail.
  },
  &quot;contactEmail&quot;: &quot;A String&quot;, # A user-supplied email address to send case update notifications for. This should only be used in BYOID flows, where we cannot infer the user&#x27;s email address directly from their EUCs.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time this case was created.
  &quot;creator&quot;: { # An object containing information about the effective user and authenticated principal responsible for an action. # The user who created the case. Note: The name and email will be obfuscated if the case was created by Google Support.
    &quot;displayName&quot;: &quot;A String&quot;, # The name to display for the actor. If not provided, it is inferred from credentials supplied during case creation. When an email is provided, a display name must also be provided. This will be obfuscated if the user is a Google Support agent.
    &quot;email&quot;: &quot;A String&quot;, # The email address of the actor. If not provided, it is inferred from credentials supplied during case creation. If the authenticated principal does not have an email address, one must be provided. When a name is provided, an email must also be provided. This will be obfuscated if the user is a Google Support agent.
    &quot;googleSupport&quot;: True or False, # Output only. Whether the actor is a Google support actor.
  },
  &quot;description&quot;: &quot;A String&quot;, # A broad description of the issue.
  &quot;displayName&quot;: &quot;A String&quot;, # The short summary of the issue reported in this case.
  &quot;escalated&quot;: True or False, # Whether the case is currently escalated.
  &quot;languageCode&quot;: &quot;A String&quot;, # The language the user has requested to receive support in. This should be a BCP 47 language code (e.g., `&quot;en&quot;`, `&quot;zh-CN&quot;`, `&quot;zh-TW&quot;`, `&quot;ja&quot;`, `&quot;ko&quot;`). If no language or an unsupported language is specified, this field defaults to English (en). Language selection during case creation may affect your available support options. For a list of supported languages and their support working hours, see: https://cloud.google.com/support/docs/language-working-hours
  &quot;name&quot;: &quot;A String&quot;, # The resource name for the case.
  &quot;priority&quot;: &quot;A String&quot;, # The priority of this case.
  &quot;severity&quot;: &quot;A String&quot;, # REMOVED. The severity of this case. Use priority instead.
  &quot;state&quot;: &quot;A String&quot;, # Output only. The current status of the support case.
  &quot;subscriberEmailAddresses&quot;: [ # The email addresses to receive updates on this case.
    &quot;A String&quot;,
  ],
  &quot;testCase&quot;: True or False, # Whether this case was created for internal API testing and should not be acted on by the support team.
  &quot;timeZone&quot;: &quot;A String&quot;, # The timezone of the user who created the support case. It should be in a format IANA recognizes: https://www.iana.org/time-zones. There is no additional validation done by the API.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time this case was last updated.
}</pre>
</div>

<div class="method">
    <code class="details" id="create">create(parent, body=None, x__xgafv=None)</code>
  <pre>Create a new case and associate it with a parent. It must have the following fields set: `display_name`, `description`, `classification`, and `priority`. If you&#x27;re just testing the API and don&#x27;t want to route your case to an agent, set `testCase=true`. EXAMPLES: cURL: ```shell parent=&quot;projects/some-project&quot; curl \ --request POST \ --header &quot;Authorization: Bearer $(gcloud auth print-access-token)&quot; \ --header &#x27;Content-Type: application/json&#x27; \ --data &#x27;{ &quot;display_name&quot;: &quot;Test case created by me.&quot;, &quot;description&quot;: &quot;a random test case, feel free to close&quot;, &quot;classification&quot;: { &quot;id&quot;: &quot;100IK2AKCLHMGRJ9CDGMOCGP8DM6UTB4BT262T31BT1M2T31DHNMENPO6KS36CPJ786L2TBFEHGN6NPI64R3CDHN8880G08I1H3MURR7DHII0GRCDTQM8&quot; }, &quot;time_zone&quot;: &quot;-07:00&quot;, &quot;subscriber_email_addresses&quot;: [ &quot;foo@domain.com&quot;, &quot;bar@domain.com&quot; ], &quot;testCase&quot;: true, &quot;priority&quot;: &quot;P3&quot; }&#x27; \ &quot;https://cloudsupport.googleapis.com/v2/$parent/cases&quot; ``` Python: ```python import googleapiclient.discovery api_version = &quot;v2&quot; supportApiService = googleapiclient.discovery.build( serviceName=&quot;cloudsupport&quot;, version=api_version, discoveryServiceUrl=f&quot;https://cloudsupport.googleapis.com/$discovery/rest?version={api_version}&quot;, ) request = supportApiService.cases().create( parent=&quot;projects/some-project&quot;, body={ &quot;displayName&quot;: &quot;A Test Case&quot;, &quot;description&quot;: &quot;This is a test case.&quot;, &quot;testCase&quot;: True, &quot;priority&quot;: &quot;P2&quot;, &quot;classification&quot;: { &quot;id&quot;: &quot;100IK2AKCLHMGRJ9CDGMOCGP8DM6UTB4BT262T31BT1M2T31DHNMENPO6KS36CPJ786L2TBFEHGN6NPI64R3CDHN8880G08I1H3MURR7DHII0GRCDTQM8&quot; }, }, ) print(request.execute()) ```

Args:
  parent: string, Required. The name of the parent under which the case should be created. (required)
  body: object, The request body.
    The object takes the form of:

{ # A support case.
  &quot;classification&quot;: { # A classification object with a product type and value. # The issue classification applicable to this case.
    &quot;displayName&quot;: &quot;A String&quot;, # A display name for the classification. The display name is not static and can change. To uniquely and consistently identify classifications, use the `CaseClassification.id` field.
    &quot;id&quot;: &quot;A String&quot;, # The unique ID for a classification. Must be specified for case creation. To retrieve valid classification IDs for case creation, use `caseClassifications.search`. Classification IDs returned by `caseClassifications.search` are guaranteed to be valid for at least 6 months. If a given classification is deactiveated, it will immediately stop being returned. After 6 months, `case.create` requests using the classification ID will fail.
  },
  &quot;contactEmail&quot;: &quot;A String&quot;, # A user-supplied email address to send case update notifications for. This should only be used in BYOID flows, where we cannot infer the user&#x27;s email address directly from their EUCs.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time this case was created.
  &quot;creator&quot;: { # An object containing information about the effective user and authenticated principal responsible for an action. # The user who created the case. Note: The name and email will be obfuscated if the case was created by Google Support.
    &quot;displayName&quot;: &quot;A String&quot;, # The name to display for the actor. If not provided, it is inferred from credentials supplied during case creation. When an email is provided, a display name must also be provided. This will be obfuscated if the user is a Google Support agent.
    &quot;email&quot;: &quot;A String&quot;, # The email address of the actor. If not provided, it is inferred from credentials supplied during case creation. If the authenticated principal does not have an email address, one must be provided. When a name is provided, an email must also be provided. This will be obfuscated if the user is a Google Support agent.
    &quot;googleSupport&quot;: True or False, # Output only. Whether the actor is a Google support actor.
  },
  &quot;description&quot;: &quot;A String&quot;, # A broad description of the issue.
  &quot;displayName&quot;: &quot;A String&quot;, # The short summary of the issue reported in this case.
  &quot;escalated&quot;: True or False, # Whether the case is currently escalated.
  &quot;languageCode&quot;: &quot;A String&quot;, # The language the user has requested to receive support in. This should be a BCP 47 language code (e.g., `&quot;en&quot;`, `&quot;zh-CN&quot;`, `&quot;zh-TW&quot;`, `&quot;ja&quot;`, `&quot;ko&quot;`). If no language or an unsupported language is specified, this field defaults to English (en). Language selection during case creation may affect your available support options. For a list of supported languages and their support working hours, see: https://cloud.google.com/support/docs/language-working-hours
  &quot;name&quot;: &quot;A String&quot;, # The resource name for the case.
  &quot;priority&quot;: &quot;A String&quot;, # The priority of this case.
  &quot;severity&quot;: &quot;A String&quot;, # REMOVED. The severity of this case. Use priority instead.
  &quot;state&quot;: &quot;A String&quot;, # Output only. The current status of the support case.
  &quot;subscriberEmailAddresses&quot;: [ # The email addresses to receive updates on this case.
    &quot;A String&quot;,
  ],
  &quot;testCase&quot;: True or False, # Whether this case was created for internal API testing and should not be acted on by the support team.
  &quot;timeZone&quot;: &quot;A String&quot;, # The timezone of the user who created the support case. It should be in a format IANA recognizes: https://www.iana.org/time-zones. There is no additional validation done by the API.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time this case 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 support case.
  &quot;classification&quot;: { # A classification object with a product type and value. # The issue classification applicable to this case.
    &quot;displayName&quot;: &quot;A String&quot;, # A display name for the classification. The display name is not static and can change. To uniquely and consistently identify classifications, use the `CaseClassification.id` field.
    &quot;id&quot;: &quot;A String&quot;, # The unique ID for a classification. Must be specified for case creation. To retrieve valid classification IDs for case creation, use `caseClassifications.search`. Classification IDs returned by `caseClassifications.search` are guaranteed to be valid for at least 6 months. If a given classification is deactiveated, it will immediately stop being returned. After 6 months, `case.create` requests using the classification ID will fail.
  },
  &quot;contactEmail&quot;: &quot;A String&quot;, # A user-supplied email address to send case update notifications for. This should only be used in BYOID flows, where we cannot infer the user&#x27;s email address directly from their EUCs.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time this case was created.
  &quot;creator&quot;: { # An object containing information about the effective user and authenticated principal responsible for an action. # The user who created the case. Note: The name and email will be obfuscated if the case was created by Google Support.
    &quot;displayName&quot;: &quot;A String&quot;, # The name to display for the actor. If not provided, it is inferred from credentials supplied during case creation. When an email is provided, a display name must also be provided. This will be obfuscated if the user is a Google Support agent.
    &quot;email&quot;: &quot;A String&quot;, # The email address of the actor. If not provided, it is inferred from credentials supplied during case creation. If the authenticated principal does not have an email address, one must be provided. When a name is provided, an email must also be provided. This will be obfuscated if the user is a Google Support agent.
    &quot;googleSupport&quot;: True or False, # Output only. Whether the actor is a Google support actor.
  },
  &quot;description&quot;: &quot;A String&quot;, # A broad description of the issue.
  &quot;displayName&quot;: &quot;A String&quot;, # The short summary of the issue reported in this case.
  &quot;escalated&quot;: True or False, # Whether the case is currently escalated.
  &quot;languageCode&quot;: &quot;A String&quot;, # The language the user has requested to receive support in. This should be a BCP 47 language code (e.g., `&quot;en&quot;`, `&quot;zh-CN&quot;`, `&quot;zh-TW&quot;`, `&quot;ja&quot;`, `&quot;ko&quot;`). If no language or an unsupported language is specified, this field defaults to English (en). Language selection during case creation may affect your available support options. For a list of supported languages and their support working hours, see: https://cloud.google.com/support/docs/language-working-hours
  &quot;name&quot;: &quot;A String&quot;, # The resource name for the case.
  &quot;priority&quot;: &quot;A String&quot;, # The priority of this case.
  &quot;severity&quot;: &quot;A String&quot;, # REMOVED. The severity of this case. Use priority instead.
  &quot;state&quot;: &quot;A String&quot;, # Output only. The current status of the support case.
  &quot;subscriberEmailAddresses&quot;: [ # The email addresses to receive updates on this case.
    &quot;A String&quot;,
  ],
  &quot;testCase&quot;: True or False, # Whether this case was created for internal API testing and should not be acted on by the support team.
  &quot;timeZone&quot;: &quot;A String&quot;, # The timezone of the user who created the support case. It should be in a format IANA recognizes: https://www.iana.org/time-zones. There is no additional validation done by the API.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time this case was last updated.
}</pre>
</div>

<div class="method">
    <code class="details" id="escalate">escalate(name, body=None, x__xgafv=None)</code>
  <pre>Escalate a case, starting the Google Cloud Support escalation management process. This operation is only available for some support services. Go to https://cloud.google.com/support and look for &#x27;Technical support escalations&#x27; in the feature list to find out which ones let you do that. EXAMPLES: cURL: ```shell case=&quot;projects/some-project/cases/43595344&quot; curl \ --request POST \ --header &quot;Authorization: Bearer $(gcloud auth print-access-token)&quot; \ --header &quot;Content-Type: application/json&quot; \ --data &#x27;{ &quot;escalation&quot;: { &quot;reason&quot;: &quot;BUSINESS_IMPACT&quot;, &quot;justification&quot;: &quot;This is a test escalation.&quot; } }&#x27; \ &quot;https://cloudsupport.googleapis.com/v2/$case:escalate&quot; ``` Python: ```python import googleapiclient.discovery api_version = &quot;v2&quot; supportApiService = googleapiclient.discovery.build( serviceName=&quot;cloudsupport&quot;, version=api_version, discoveryServiceUrl=f&quot;https://cloudsupport.googleapis.com/$discovery/rest?version={api_version}&quot;, ) request = supportApiService.cases().escalate( name=&quot;projects/some-project/cases/43595344&quot;, body={ &quot;escalation&quot;: { &quot;reason&quot;: &quot;BUSINESS_IMPACT&quot;, &quot;justification&quot;: &quot;This is a test escalation.&quot;, }, }, ) print(request.execute()) ```

Args:
  name: string, Required. The name of the case to be escalated. (required)
  body: object, The request body.
    The object takes the form of:

{ # The request message for the EscalateCase endpoint.
  &quot;escalation&quot;: { # An escalation of a support case. # The escalation information to be sent with the escalation request.
    &quot;justification&quot;: &quot;A String&quot;, # Required. A free text description to accompany the `reason` field above. Provides additional context on why the case is being escalated.
    &quot;reason&quot;: &quot;A String&quot;, # Required. The reason why the Case is being escalated.
  },
}

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

Returns:
  An object of the form:

    { # A support case.
  &quot;classification&quot;: { # A classification object with a product type and value. # The issue classification applicable to this case.
    &quot;displayName&quot;: &quot;A String&quot;, # A display name for the classification. The display name is not static and can change. To uniquely and consistently identify classifications, use the `CaseClassification.id` field.
    &quot;id&quot;: &quot;A String&quot;, # The unique ID for a classification. Must be specified for case creation. To retrieve valid classification IDs for case creation, use `caseClassifications.search`. Classification IDs returned by `caseClassifications.search` are guaranteed to be valid for at least 6 months. If a given classification is deactiveated, it will immediately stop being returned. After 6 months, `case.create` requests using the classification ID will fail.
  },
  &quot;contactEmail&quot;: &quot;A String&quot;, # A user-supplied email address to send case update notifications for. This should only be used in BYOID flows, where we cannot infer the user&#x27;s email address directly from their EUCs.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time this case was created.
  &quot;creator&quot;: { # An object containing information about the effective user and authenticated principal responsible for an action. # The user who created the case. Note: The name and email will be obfuscated if the case was created by Google Support.
    &quot;displayName&quot;: &quot;A String&quot;, # The name to display for the actor. If not provided, it is inferred from credentials supplied during case creation. When an email is provided, a display name must also be provided. This will be obfuscated if the user is a Google Support agent.
    &quot;email&quot;: &quot;A String&quot;, # The email address of the actor. If not provided, it is inferred from credentials supplied during case creation. If the authenticated principal does not have an email address, one must be provided. When a name is provided, an email must also be provided. This will be obfuscated if the user is a Google Support agent.
    &quot;googleSupport&quot;: True or False, # Output only. Whether the actor is a Google support actor.
  },
  &quot;description&quot;: &quot;A String&quot;, # A broad description of the issue.
  &quot;displayName&quot;: &quot;A String&quot;, # The short summary of the issue reported in this case.
  &quot;escalated&quot;: True or False, # Whether the case is currently escalated.
  &quot;languageCode&quot;: &quot;A String&quot;, # The language the user has requested to receive support in. This should be a BCP 47 language code (e.g., `&quot;en&quot;`, `&quot;zh-CN&quot;`, `&quot;zh-TW&quot;`, `&quot;ja&quot;`, `&quot;ko&quot;`). If no language or an unsupported language is specified, this field defaults to English (en). Language selection during case creation may affect your available support options. For a list of supported languages and their support working hours, see: https://cloud.google.com/support/docs/language-working-hours
  &quot;name&quot;: &quot;A String&quot;, # The resource name for the case.
  &quot;priority&quot;: &quot;A String&quot;, # The priority of this case.
  &quot;severity&quot;: &quot;A String&quot;, # REMOVED. The severity of this case. Use priority instead.
  &quot;state&quot;: &quot;A String&quot;, # Output only. The current status of the support case.
  &quot;subscriberEmailAddresses&quot;: [ # The email addresses to receive updates on this case.
    &quot;A String&quot;,
  ],
  &quot;testCase&quot;: True or False, # Whether this case was created for internal API testing and should not be acted on by the support team.
  &quot;timeZone&quot;: &quot;A String&quot;, # The timezone of the user who created the support case. It should be in a format IANA recognizes: https://www.iana.org/time-zones. There is no additional validation done by the API.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time this case was last updated.
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Retrieve a case. EXAMPLES: cURL: ```shell case=&quot;projects/some-project/cases/16033687&quot; curl \ --header &quot;Authorization: Bearer $(gcloud auth print-access-token)&quot; \ &quot;https://cloudsupport.googleapis.com/v2/$case&quot; ``` Python: ```python import googleapiclient.discovery api_version = &quot;v2&quot; supportApiService = googleapiclient.discovery.build( serviceName=&quot;cloudsupport&quot;, version=api_version, discoveryServiceUrl=f&quot;https://cloudsupport.googleapis.com/$discovery/rest?version={api_version}&quot;, ) request = supportApiService.cases().get( name=&quot;projects/some-project/cases/43595344&quot;, ) print(request.execute()) ```

Args:
  name: string, Required. The full name of a case to be retrieved. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A support case.
  &quot;classification&quot;: { # A classification object with a product type and value. # The issue classification applicable to this case.
    &quot;displayName&quot;: &quot;A String&quot;, # A display name for the classification. The display name is not static and can change. To uniquely and consistently identify classifications, use the `CaseClassification.id` field.
    &quot;id&quot;: &quot;A String&quot;, # The unique ID for a classification. Must be specified for case creation. To retrieve valid classification IDs for case creation, use `caseClassifications.search`. Classification IDs returned by `caseClassifications.search` are guaranteed to be valid for at least 6 months. If a given classification is deactiveated, it will immediately stop being returned. After 6 months, `case.create` requests using the classification ID will fail.
  },
  &quot;contactEmail&quot;: &quot;A String&quot;, # A user-supplied email address to send case update notifications for. This should only be used in BYOID flows, where we cannot infer the user&#x27;s email address directly from their EUCs.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time this case was created.
  &quot;creator&quot;: { # An object containing information about the effective user and authenticated principal responsible for an action. # The user who created the case. Note: The name and email will be obfuscated if the case was created by Google Support.
    &quot;displayName&quot;: &quot;A String&quot;, # The name to display for the actor. If not provided, it is inferred from credentials supplied during case creation. When an email is provided, a display name must also be provided. This will be obfuscated if the user is a Google Support agent.
    &quot;email&quot;: &quot;A String&quot;, # The email address of the actor. If not provided, it is inferred from credentials supplied during case creation. If the authenticated principal does not have an email address, one must be provided. When a name is provided, an email must also be provided. This will be obfuscated if the user is a Google Support agent.
    &quot;googleSupport&quot;: True or False, # Output only. Whether the actor is a Google support actor.
  },
  &quot;description&quot;: &quot;A String&quot;, # A broad description of the issue.
  &quot;displayName&quot;: &quot;A String&quot;, # The short summary of the issue reported in this case.
  &quot;escalated&quot;: True or False, # Whether the case is currently escalated.
  &quot;languageCode&quot;: &quot;A String&quot;, # The language the user has requested to receive support in. This should be a BCP 47 language code (e.g., `&quot;en&quot;`, `&quot;zh-CN&quot;`, `&quot;zh-TW&quot;`, `&quot;ja&quot;`, `&quot;ko&quot;`). If no language or an unsupported language is specified, this field defaults to English (en). Language selection during case creation may affect your available support options. For a list of supported languages and their support working hours, see: https://cloud.google.com/support/docs/language-working-hours
  &quot;name&quot;: &quot;A String&quot;, # The resource name for the case.
  &quot;priority&quot;: &quot;A String&quot;, # The priority of this case.
  &quot;severity&quot;: &quot;A String&quot;, # REMOVED. The severity of this case. Use priority instead.
  &quot;state&quot;: &quot;A String&quot;, # Output only. The current status of the support case.
  &quot;subscriberEmailAddresses&quot;: [ # The email addresses to receive updates on this case.
    &quot;A String&quot;,
  ],
  &quot;testCase&quot;: True or False, # Whether this case was created for internal API testing and should not be acted on by the support team.
  &quot;timeZone&quot;: &quot;A String&quot;, # The timezone of the user who created the support case. It should be in a format IANA recognizes: https://www.iana.org/time-zones. There is no additional validation done by the API.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time this case was last updated.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Retrieve all cases under a parent, but not its children. For example, listing cases under an organization only returns the cases that are directly parented by that organization. To retrieve cases under an organization and its projects, use `cases.search`. EXAMPLES: cURL: ```shell parent=&quot;projects/some-project&quot; curl \ --header &quot;Authorization: Bearer $(gcloud auth print-access-token)&quot; \ &quot;https://cloudsupport.googleapis.com/v2/$parent/cases&quot; ``` Python: ```python import googleapiclient.discovery api_version = &quot;v2&quot; supportApiService = googleapiclient.discovery.build( serviceName=&quot;cloudsupport&quot;, version=api_version, discoveryServiceUrl=f&quot;https://cloudsupport.googleapis.com/$discovery/rest?version={api_version}&quot;, ) request = supportApiService.cases().list(parent=&quot;projects/some-project&quot;) print(request.execute()) ```

Args:
  parent: string, Required. The name of a parent to list cases under. (required)
  filter: string, An expression used to filter cases. If it&#x27;s an empty string, then no filtering happens. Otherwise, the endpoint returns the cases that match the filter. Expressions use the following fields separated by `AND` and specified with `=`: - `state`: Can be `OPEN` or `CLOSED`. - `priority`: Can be `P0`, `P1`, `P2`, `P3`, or `P4`. You can specify multiple values for priority using the `OR` operator. For example, `priority=P1 OR priority=P2`. - `creator.email`: The email address of the case creator. EXAMPLES: - `state=CLOSED` - `state=OPEN AND creator.email=&quot;tester@example.com&quot;` - `state=OPEN AND (priority=P0 OR priority=P1)`
  pageSize: integer, The maximum number of cases fetched with each request. Defaults to 10.
  pageToken: string, A token identifying the page of results to return. If unspecified, the first page is retrieved.
  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 the ListCases endpoint.
  &quot;cases&quot;: [ # The list of cases associated with the parent after any filters have been applied.
    { # A support case.
      &quot;classification&quot;: { # A classification object with a product type and value. # The issue classification applicable to this case.
        &quot;displayName&quot;: &quot;A String&quot;, # A display name for the classification. The display name is not static and can change. To uniquely and consistently identify classifications, use the `CaseClassification.id` field.
        &quot;id&quot;: &quot;A String&quot;, # The unique ID for a classification. Must be specified for case creation. To retrieve valid classification IDs for case creation, use `caseClassifications.search`. Classification IDs returned by `caseClassifications.search` are guaranteed to be valid for at least 6 months. If a given classification is deactiveated, it will immediately stop being returned. After 6 months, `case.create` requests using the classification ID will fail.
      },
      &quot;contactEmail&quot;: &quot;A String&quot;, # A user-supplied email address to send case update notifications for. This should only be used in BYOID flows, where we cannot infer the user&#x27;s email address directly from their EUCs.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time this case was created.
      &quot;creator&quot;: { # An object containing information about the effective user and authenticated principal responsible for an action. # The user who created the case. Note: The name and email will be obfuscated if the case was created by Google Support.
        &quot;displayName&quot;: &quot;A String&quot;, # The name to display for the actor. If not provided, it is inferred from credentials supplied during case creation. When an email is provided, a display name must also be provided. This will be obfuscated if the user is a Google Support agent.
        &quot;email&quot;: &quot;A String&quot;, # The email address of the actor. If not provided, it is inferred from credentials supplied during case creation. If the authenticated principal does not have an email address, one must be provided. When a name is provided, an email must also be provided. This will be obfuscated if the user is a Google Support agent.
        &quot;googleSupport&quot;: True or False, # Output only. Whether the actor is a Google support actor.
      },
      &quot;description&quot;: &quot;A String&quot;, # A broad description of the issue.
      &quot;displayName&quot;: &quot;A String&quot;, # The short summary of the issue reported in this case.
      &quot;escalated&quot;: True or False, # Whether the case is currently escalated.
      &quot;languageCode&quot;: &quot;A String&quot;, # The language the user has requested to receive support in. This should be a BCP 47 language code (e.g., `&quot;en&quot;`, `&quot;zh-CN&quot;`, `&quot;zh-TW&quot;`, `&quot;ja&quot;`, `&quot;ko&quot;`). If no language or an unsupported language is specified, this field defaults to English (en). Language selection during case creation may affect your available support options. For a list of supported languages and their support working hours, see: https://cloud.google.com/support/docs/language-working-hours
      &quot;name&quot;: &quot;A String&quot;, # The resource name for the case.
      &quot;priority&quot;: &quot;A String&quot;, # The priority of this case.
      &quot;severity&quot;: &quot;A String&quot;, # REMOVED. The severity of this case. Use priority instead.
      &quot;state&quot;: &quot;A String&quot;, # Output only. The current status of the support case.
      &quot;subscriberEmailAddresses&quot;: [ # The email addresses to receive updates on this case.
        &quot;A String&quot;,
      ],
      &quot;testCase&quot;: True or False, # Whether this case was created for internal API testing and should not be acted on by the support team.
      &quot;timeZone&quot;: &quot;A String&quot;, # The timezone of the user who created the support case. It should be in a format IANA recognizes: https://www.iana.org/time-zones. There is no additional validation done by the API.
      &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time this case was last updated.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # A token to retrieve the next page of results. Set this in the `page_token` field of subsequent `cases.list` requests. If unspecified, there are no more results to retrieve.
}</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 case. Only some fields can be updated. EXAMPLES: cURL: ```shell case=&quot;projects/some-project/cases/43595344&quot; curl \ --request PATCH \ --header &quot;Authorization: Bearer $(gcloud auth print-access-token)&quot; \ --header &quot;Content-Type: application/json&quot; \ --data &#x27;{ &quot;priority&quot;: &quot;P1&quot; }&#x27; \ &quot;https://cloudsupport.googleapis.com/v2/$case?updateMask=priority&quot; ``` Python: ```python import googleapiclient.discovery api_version = &quot;v2&quot; supportApiService = googleapiclient.discovery.build( serviceName=&quot;cloudsupport&quot;, version=api_version, discoveryServiceUrl=f&quot;https://cloudsupport.googleapis.com/$discovery/rest?version={api_version}&quot;, ) request = supportApiService.cases().patch( name=&quot;projects/some-project/cases/43112854&quot;, body={ &quot;displayName&quot;: &quot;This is Now a New Title&quot;, &quot;priority&quot;: &quot;P2&quot;, }, ) print(request.execute()) ```

Args:
  name: string, The resource name for the case. (required)
  body: object, The request body.
    The object takes the form of:

{ # A support case.
  &quot;classification&quot;: { # A classification object with a product type and value. # The issue classification applicable to this case.
    &quot;displayName&quot;: &quot;A String&quot;, # A display name for the classification. The display name is not static and can change. To uniquely and consistently identify classifications, use the `CaseClassification.id` field.
    &quot;id&quot;: &quot;A String&quot;, # The unique ID for a classification. Must be specified for case creation. To retrieve valid classification IDs for case creation, use `caseClassifications.search`. Classification IDs returned by `caseClassifications.search` are guaranteed to be valid for at least 6 months. If a given classification is deactiveated, it will immediately stop being returned. After 6 months, `case.create` requests using the classification ID will fail.
  },
  &quot;contactEmail&quot;: &quot;A String&quot;, # A user-supplied email address to send case update notifications for. This should only be used in BYOID flows, where we cannot infer the user&#x27;s email address directly from their EUCs.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time this case was created.
  &quot;creator&quot;: { # An object containing information about the effective user and authenticated principal responsible for an action. # The user who created the case. Note: The name and email will be obfuscated if the case was created by Google Support.
    &quot;displayName&quot;: &quot;A String&quot;, # The name to display for the actor. If not provided, it is inferred from credentials supplied during case creation. When an email is provided, a display name must also be provided. This will be obfuscated if the user is a Google Support agent.
    &quot;email&quot;: &quot;A String&quot;, # The email address of the actor. If not provided, it is inferred from credentials supplied during case creation. If the authenticated principal does not have an email address, one must be provided. When a name is provided, an email must also be provided. This will be obfuscated if the user is a Google Support agent.
    &quot;googleSupport&quot;: True or False, # Output only. Whether the actor is a Google support actor.
  },
  &quot;description&quot;: &quot;A String&quot;, # A broad description of the issue.
  &quot;displayName&quot;: &quot;A String&quot;, # The short summary of the issue reported in this case.
  &quot;escalated&quot;: True or False, # Whether the case is currently escalated.
  &quot;languageCode&quot;: &quot;A String&quot;, # The language the user has requested to receive support in. This should be a BCP 47 language code (e.g., `&quot;en&quot;`, `&quot;zh-CN&quot;`, `&quot;zh-TW&quot;`, `&quot;ja&quot;`, `&quot;ko&quot;`). If no language or an unsupported language is specified, this field defaults to English (en). Language selection during case creation may affect your available support options. For a list of supported languages and their support working hours, see: https://cloud.google.com/support/docs/language-working-hours
  &quot;name&quot;: &quot;A String&quot;, # The resource name for the case.
  &quot;priority&quot;: &quot;A String&quot;, # The priority of this case.
  &quot;severity&quot;: &quot;A String&quot;, # REMOVED. The severity of this case. Use priority instead.
  &quot;state&quot;: &quot;A String&quot;, # Output only. The current status of the support case.
  &quot;subscriberEmailAddresses&quot;: [ # The email addresses to receive updates on this case.
    &quot;A String&quot;,
  ],
  &quot;testCase&quot;: True or False, # Whether this case was created for internal API testing and should not be acted on by the support team.
  &quot;timeZone&quot;: &quot;A String&quot;, # The timezone of the user who created the support case. It should be in a format IANA recognizes: https://www.iana.org/time-zones. There is no additional validation done by the API.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time this case was last updated.
}

  updateMask: string, A list of attributes of the case that should be updated. Supported values are `priority`, `display_name`, and `subscriber_email_addresses`. If no fields are specified, all supported fields are updated. Be careful - if you do not provide a field mask, then you might accidentally clear some fields. For example, if you leave the field mask empty and do not provide a value for `subscriber_email_addresses`, then `subscriber_email_addresses` is updated to empty.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A support case.
  &quot;classification&quot;: { # A classification object with a product type and value. # The issue classification applicable to this case.
    &quot;displayName&quot;: &quot;A String&quot;, # A display name for the classification. The display name is not static and can change. To uniquely and consistently identify classifications, use the `CaseClassification.id` field.
    &quot;id&quot;: &quot;A String&quot;, # The unique ID for a classification. Must be specified for case creation. To retrieve valid classification IDs for case creation, use `caseClassifications.search`. Classification IDs returned by `caseClassifications.search` are guaranteed to be valid for at least 6 months. If a given classification is deactiveated, it will immediately stop being returned. After 6 months, `case.create` requests using the classification ID will fail.
  },
  &quot;contactEmail&quot;: &quot;A String&quot;, # A user-supplied email address to send case update notifications for. This should only be used in BYOID flows, where we cannot infer the user&#x27;s email address directly from their EUCs.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time this case was created.
  &quot;creator&quot;: { # An object containing information about the effective user and authenticated principal responsible for an action. # The user who created the case. Note: The name and email will be obfuscated if the case was created by Google Support.
    &quot;displayName&quot;: &quot;A String&quot;, # The name to display for the actor. If not provided, it is inferred from credentials supplied during case creation. When an email is provided, a display name must also be provided. This will be obfuscated if the user is a Google Support agent.
    &quot;email&quot;: &quot;A String&quot;, # The email address of the actor. If not provided, it is inferred from credentials supplied during case creation. If the authenticated principal does not have an email address, one must be provided. When a name is provided, an email must also be provided. This will be obfuscated if the user is a Google Support agent.
    &quot;googleSupport&quot;: True or False, # Output only. Whether the actor is a Google support actor.
  },
  &quot;description&quot;: &quot;A String&quot;, # A broad description of the issue.
  &quot;displayName&quot;: &quot;A String&quot;, # The short summary of the issue reported in this case.
  &quot;escalated&quot;: True or False, # Whether the case is currently escalated.
  &quot;languageCode&quot;: &quot;A String&quot;, # The language the user has requested to receive support in. This should be a BCP 47 language code (e.g., `&quot;en&quot;`, `&quot;zh-CN&quot;`, `&quot;zh-TW&quot;`, `&quot;ja&quot;`, `&quot;ko&quot;`). If no language or an unsupported language is specified, this field defaults to English (en). Language selection during case creation may affect your available support options. For a list of supported languages and their support working hours, see: https://cloud.google.com/support/docs/language-working-hours
  &quot;name&quot;: &quot;A String&quot;, # The resource name for the case.
  &quot;priority&quot;: &quot;A String&quot;, # The priority of this case.
  &quot;severity&quot;: &quot;A String&quot;, # REMOVED. The severity of this case. Use priority instead.
  &quot;state&quot;: &quot;A String&quot;, # Output only. The current status of the support case.
  &quot;subscriberEmailAddresses&quot;: [ # The email addresses to receive updates on this case.
    &quot;A String&quot;,
  ],
  &quot;testCase&quot;: True or False, # Whether this case was created for internal API testing and should not be acted on by the support team.
  &quot;timeZone&quot;: &quot;A String&quot;, # The timezone of the user who created the support case. It should be in a format IANA recognizes: https://www.iana.org/time-zones. There is no additional validation done by the API.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time this case was last updated.
}</pre>
</div>

<div class="method">
    <code class="details" id="search">search(pageSize=None, pageToken=None, parent=None, query=None, x__xgafv=None)</code>
  <pre>Search for cases using a query. EXAMPLES: cURL: ```shell parent=&quot;projects/some-project&quot; curl \ --header &quot;Authorization: Bearer $(gcloud auth print-access-token)&quot; \ &quot;https://cloudsupport.googleapis.com/v2/$parent/cases:search&quot; ``` Python: ```python import googleapiclient.discovery api_version = &quot;v2&quot; supportApiService = googleapiclient.discovery.build( serviceName=&quot;cloudsupport&quot;, version=api_version, discoveryServiceUrl=f&quot;https://cloudsupport.googleapis.com/$discovery/rest?version={api_version}&quot;, ) request = supportApiService.cases().search( parent=&quot;projects/some-project&quot;, query=&quot;state=OPEN&quot; ) print(request.execute()) ```

Args:
  pageSize: integer, The maximum number of cases fetched with each request. The default page size is 10.
  pageToken: string, A token identifying the page of results to return. If unspecified, the first page is retrieved.
  parent: string, The name of the parent resource to search for cases under.
  query: string, An expression used to filter cases. Expressions use the following fields separated by `AND` and specified with `=`: - `organization`: An organization name in the form `organizations/`. - `project`: A project name in the form `projects/`. - `state`: Can be `OPEN` or `CLOSED`. - `priority`: Can be `P0`, `P1`, `P2`, `P3`, or `P4`. You can specify multiple values for priority using the `OR` operator. For example, `priority=P1 OR priority=P2`. - `creator.email`: The email address of the case creator. You must specify either `organization` or `project`. To search across `displayName`, `description`, and comments, use a global restriction with no keyword or operator. For example, `&quot;my search&quot;`. To search only cases updated after a certain date, use `update_time` restricted with that particular date, time, and timezone in ISO datetime format. For example, `update_time&gt;&quot;2020-01-01T00:00:00-05:00&quot;`. `update_time` only supports the greater than operator (`&gt;`). Examples: - `organization=&quot;organizations/123456789&quot;` - `project=&quot;projects/my-project-id&quot;` - `project=&quot;projects/123456789&quot;` - `organization=&quot;organizations/123456789&quot; AND state=CLOSED` - `project=&quot;projects/my-project-id&quot; AND creator.email=&quot;tester@example.com&quot;` - `project=&quot;projects/my-project-id&quot; AND (priority=P0 OR priority=P1)`
  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 the SearchCases endpoint.
  &quot;cases&quot;: [ # The list of cases associated with the parent after any filters have been applied.
    { # A support case.
      &quot;classification&quot;: { # A classification object with a product type and value. # The issue classification applicable to this case.
        &quot;displayName&quot;: &quot;A String&quot;, # A display name for the classification. The display name is not static and can change. To uniquely and consistently identify classifications, use the `CaseClassification.id` field.
        &quot;id&quot;: &quot;A String&quot;, # The unique ID for a classification. Must be specified for case creation. To retrieve valid classification IDs for case creation, use `caseClassifications.search`. Classification IDs returned by `caseClassifications.search` are guaranteed to be valid for at least 6 months. If a given classification is deactiveated, it will immediately stop being returned. After 6 months, `case.create` requests using the classification ID will fail.
      },
      &quot;contactEmail&quot;: &quot;A String&quot;, # A user-supplied email address to send case update notifications for. This should only be used in BYOID flows, where we cannot infer the user&#x27;s email address directly from their EUCs.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time this case was created.
      &quot;creator&quot;: { # An object containing information about the effective user and authenticated principal responsible for an action. # The user who created the case. Note: The name and email will be obfuscated if the case was created by Google Support.
        &quot;displayName&quot;: &quot;A String&quot;, # The name to display for the actor. If not provided, it is inferred from credentials supplied during case creation. When an email is provided, a display name must also be provided. This will be obfuscated if the user is a Google Support agent.
        &quot;email&quot;: &quot;A String&quot;, # The email address of the actor. If not provided, it is inferred from credentials supplied during case creation. If the authenticated principal does not have an email address, one must be provided. When a name is provided, an email must also be provided. This will be obfuscated if the user is a Google Support agent.
        &quot;googleSupport&quot;: True or False, # Output only. Whether the actor is a Google support actor.
      },
      &quot;description&quot;: &quot;A String&quot;, # A broad description of the issue.
      &quot;displayName&quot;: &quot;A String&quot;, # The short summary of the issue reported in this case.
      &quot;escalated&quot;: True or False, # Whether the case is currently escalated.
      &quot;languageCode&quot;: &quot;A String&quot;, # The language the user has requested to receive support in. This should be a BCP 47 language code (e.g., `&quot;en&quot;`, `&quot;zh-CN&quot;`, `&quot;zh-TW&quot;`, `&quot;ja&quot;`, `&quot;ko&quot;`). If no language or an unsupported language is specified, this field defaults to English (en). Language selection during case creation may affect your available support options. For a list of supported languages and their support working hours, see: https://cloud.google.com/support/docs/language-working-hours
      &quot;name&quot;: &quot;A String&quot;, # The resource name for the case.
      &quot;priority&quot;: &quot;A String&quot;, # The priority of this case.
      &quot;severity&quot;: &quot;A String&quot;, # REMOVED. The severity of this case. Use priority instead.
      &quot;state&quot;: &quot;A String&quot;, # Output only. The current status of the support case.
      &quot;subscriberEmailAddresses&quot;: [ # The email addresses to receive updates on this case.
        &quot;A String&quot;,
      ],
      &quot;testCase&quot;: True or False, # Whether this case was created for internal API testing and should not be acted on by the support team.
      &quot;timeZone&quot;: &quot;A String&quot;, # The timezone of the user who created the support case. It should be in a format IANA recognizes: https://www.iana.org/time-zones. There is no additional validation done by the API.
      &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time this case was last updated.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # A token to retrieve the next page of results. Set this in the `page_token` field of subsequent `cases.search` requests. If unspecified, there are no more results to retrieve.
}</pre>
</div>

<div class="method">
    <code class="details" id="search_next">search_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>

</body></html>