<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="dialogflow_v3beta1.html">Dialogflow API</a> . <a href="dialogflow_v3beta1.projects.html">projects</a> . <a href="dialogflow_v3beta1.projects.locations.html">locations</a> . <a href="dialogflow_v3beta1.projects.locations.agents.html">agents</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="dialogflow_v3beta1.projects.locations.agents.entityTypes.html">entityTypes()</a></code>
</p>
<p class="firstline">Returns the entityTypes Resource.</p>

<p class="toc_element">
  <code><a href="dialogflow_v3beta1.projects.locations.agents.environments.html">environments()</a></code>
</p>
<p class="firstline">Returns the environments Resource.</p>

<p class="toc_element">
  <code><a href="dialogflow_v3beta1.projects.locations.agents.flows.html">flows()</a></code>
</p>
<p class="firstline">Returns the flows Resource.</p>

<p class="toc_element">
  <code><a href="dialogflow_v3beta1.projects.locations.agents.intents.html">intents()</a></code>
</p>
<p class="firstline">Returns the intents Resource.</p>

<p class="toc_element">
  <code><a href="dialogflow_v3beta1.projects.locations.agents.sessions.html">sessions()</a></code>
</p>
<p class="firstline">Returns the sessions Resource.</p>

<p class="toc_element">
  <code><a href="dialogflow_v3beta1.projects.locations.agents.webhooks.html">webhooks()</a></code>
</p>
<p class="firstline">Returns the webhooks Resource.</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, x__xgafv=None)</a></code></p>
<p class="firstline">Creates an agent in the specified location.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes the specified agent.</p>
<p class="toc_element">
  <code><a href="#export">export(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Exports the specified agent to a binary file.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves the specified agent.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageToken=None, pageSize=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the list of all agents in the specified location.</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="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the specified agent.</p>
<p class="toc_element">
  <code><a href="#restore">restore(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Restores the specified agent from a binary file. Replaces the current agent with a new one. Note that all existing resources in agent (e.g. intents, entity types, flows) will be removed.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="create">create(parent, body=None, x__xgafv=None)</code>
  <pre>Creates an agent in the specified location.

Args:
  parent: string, Required. The location to create a agent for. Format: `projects//locations/`. (required)
  body: object, The request body.
    The object takes the form of:

{ # Agents are best described as Natural Language Understanding (NLU) modules that transform user requests into actionable data. You can include agents in your app, product, or service to determine user intent and respond to the user in a natural way. After you create an agent, you can add Intents, Entity Types, Flows, Fulfillments, Webhooks, and so on to manage the conversation flows..
  &quot;startFlow&quot;: &quot;A String&quot;, # Immutable. Name of the start flow in this agent. A start flow will be automatically created when the agent is created, and can only be deleted by deleting the agent. Format: `projects//locations//agents//flows/`.
  &quot;enableSpellCorrection&quot;: True or False, # Indicates if automatic spell correction is enabled in detect intent requests.
  &quot;timeZone&quot;: &quot;A String&quot;, # Required. The time zone of the agent from the [time zone database](https://www.iana.org/time-zones), e.g., America/New_York, Europe/Paris.
  &quot;description&quot;: &quot;A String&quot;, # The description of the agent. The maximum length is 500 characters. If exceeded, the request is rejected.
  &quot;name&quot;: &quot;A String&quot;, # The unique identifier of the agent. Required for the Agents.UpdateAgent method. Agents.CreateAgent populates the name automatically. Format: `projects//locations//agents/`.
  &quot;enableStackdriverLogging&quot;: True or False, # Indicates if stackdriver logging is enabled for the agent.
  &quot;defaultLanguageCode&quot;: &quot;A String&quot;, # Immutable. The default language of the agent as a language tag. See [Language Support](https://cloud.google.com/dialogflow/docs/reference/language) for a list of the currently supported language codes. This field cannot be set by the Agents.UpdateAgent method.
  &quot;speechToTextSettings&quot;: { # Settings related to speech recognition. # Speech recognition related settings.
    &quot;enableSpeechAdaptation&quot;: True or False, # Whether to use speech adaptation for speech recognition.
  },
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The human-readable name of the agent, unique within the location.
  &quot;avatarUri&quot;: &quot;A String&quot;, # The URI of the agent&#x27;s avatar. Avatars are used throughout the Dialogflow console and in the self-hosted [Web Demo](https://cloud.google.com/dialogflow/docs/integrations/web-demo) integration.
}

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

Returns:
  An object of the form:

    { # Agents are best described as Natural Language Understanding (NLU) modules that transform user requests into actionable data. You can include agents in your app, product, or service to determine user intent and respond to the user in a natural way. After you create an agent, you can add Intents, Entity Types, Flows, Fulfillments, Webhooks, and so on to manage the conversation flows..
    &quot;startFlow&quot;: &quot;A String&quot;, # Immutable. Name of the start flow in this agent. A start flow will be automatically created when the agent is created, and can only be deleted by deleting the agent. Format: `projects//locations//agents//flows/`.
    &quot;enableSpellCorrection&quot;: True or False, # Indicates if automatic spell correction is enabled in detect intent requests.
    &quot;timeZone&quot;: &quot;A String&quot;, # Required. The time zone of the agent from the [time zone database](https://www.iana.org/time-zones), e.g., America/New_York, Europe/Paris.
    &quot;description&quot;: &quot;A String&quot;, # The description of the agent. The maximum length is 500 characters. If exceeded, the request is rejected.
    &quot;name&quot;: &quot;A String&quot;, # The unique identifier of the agent. Required for the Agents.UpdateAgent method. Agents.CreateAgent populates the name automatically. Format: `projects//locations//agents/`.
    &quot;enableStackdriverLogging&quot;: True or False, # Indicates if stackdriver logging is enabled for the agent.
    &quot;defaultLanguageCode&quot;: &quot;A String&quot;, # Immutable. The default language of the agent as a language tag. See [Language Support](https://cloud.google.com/dialogflow/docs/reference/language) for a list of the currently supported language codes. This field cannot be set by the Agents.UpdateAgent method.
    &quot;speechToTextSettings&quot;: { # Settings related to speech recognition. # Speech recognition related settings.
      &quot;enableSpeechAdaptation&quot;: True or False, # Whether to use speech adaptation for speech recognition.
    },
    &quot;displayName&quot;: &quot;A String&quot;, # Required. The human-readable name of the agent, unique within the location.
    &quot;avatarUri&quot;: &quot;A String&quot;, # The URI of the agent&#x27;s avatar. Avatars are used throughout the Dialogflow console and in the self-hosted [Web Demo](https://cloud.google.com/dialogflow/docs/integrations/web-demo) integration.
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes the specified agent.

Args:
  name: string, Required. The name of the agent to delete. Format: `projects//locations//agents/`. (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); } The JSON representation for `Empty` is empty JSON object `{}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="export">export(name, body=None, x__xgafv=None)</code>
  <pre>Exports the specified agent to a binary file.

Args:
  name: string, Required. The name of the agent to export. Format: `projects//locations//agents/`. (required)
  body: object, The request body.
    The object takes the form of:

{ # The request message for Agents.ExportAgent.
    &quot;agentUri&quot;: &quot;A String&quot;, # Optional. The [Google Cloud Storage](https://cloud.google.com/storage/docs/) URI to export the agent to. The format of this URI must be `gs:///`. If left unspecified, the serialized agent is returned inline.
  }

  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;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.
    },
    &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;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;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;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;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;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Retrieves the specified agent.

Args:
  name: string, Required. The name of the agent. Format: `projects//locations//agents/`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Agents are best described as Natural Language Understanding (NLU) modules that transform user requests into actionable data. You can include agents in your app, product, or service to determine user intent and respond to the user in a natural way. After you create an agent, you can add Intents, Entity Types, Flows, Fulfillments, Webhooks, and so on to manage the conversation flows..
    &quot;startFlow&quot;: &quot;A String&quot;, # Immutable. Name of the start flow in this agent. A start flow will be automatically created when the agent is created, and can only be deleted by deleting the agent. Format: `projects//locations//agents//flows/`.
    &quot;enableSpellCorrection&quot;: True or False, # Indicates if automatic spell correction is enabled in detect intent requests.
    &quot;timeZone&quot;: &quot;A String&quot;, # Required. The time zone of the agent from the [time zone database](https://www.iana.org/time-zones), e.g., America/New_York, Europe/Paris.
    &quot;description&quot;: &quot;A String&quot;, # The description of the agent. The maximum length is 500 characters. If exceeded, the request is rejected.
    &quot;name&quot;: &quot;A String&quot;, # The unique identifier of the agent. Required for the Agents.UpdateAgent method. Agents.CreateAgent populates the name automatically. Format: `projects//locations//agents/`.
    &quot;enableStackdriverLogging&quot;: True or False, # Indicates if stackdriver logging is enabled for the agent.
    &quot;defaultLanguageCode&quot;: &quot;A String&quot;, # Immutable. The default language of the agent as a language tag. See [Language Support](https://cloud.google.com/dialogflow/docs/reference/language) for a list of the currently supported language codes. This field cannot be set by the Agents.UpdateAgent method.
    &quot;speechToTextSettings&quot;: { # Settings related to speech recognition. # Speech recognition related settings.
      &quot;enableSpeechAdaptation&quot;: True or False, # Whether to use speech adaptation for speech recognition.
    },
    &quot;displayName&quot;: &quot;A String&quot;, # Required. The human-readable name of the agent, unique within the location.
    &quot;avatarUri&quot;: &quot;A String&quot;, # The URI of the agent&#x27;s avatar. Avatars are used throughout the Dialogflow console and in the self-hosted [Web Demo](https://cloud.google.com/dialogflow/docs/integrations/web-demo) integration.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageToken=None, pageSize=None, x__xgafv=None)</code>
  <pre>Returns the list of all agents in the specified location.

Args:
  parent: string, Required. The location to list all agents for. Format: `projects//locations/`. (required)
  pageToken: string, The next_page_token value returned from a previous list request.
  pageSize: integer, The maximum number of items to return in a single page. By default 100 and at most 1000.
  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 Agents.ListAgents.
    &quot;agents&quot;: [ # The list of agents. There will be a maximum number of items returned based on the page_size field in the request.
      { # Agents are best described as Natural Language Understanding (NLU) modules that transform user requests into actionable data. You can include agents in your app, product, or service to determine user intent and respond to the user in a natural way. After you create an agent, you can add Intents, Entity Types, Flows, Fulfillments, Webhooks, and so on to manage the conversation flows..
        &quot;startFlow&quot;: &quot;A String&quot;, # Immutable. Name of the start flow in this agent. A start flow will be automatically created when the agent is created, and can only be deleted by deleting the agent. Format: `projects//locations//agents//flows/`.
        &quot;enableSpellCorrection&quot;: True or False, # Indicates if automatic spell correction is enabled in detect intent requests.
        &quot;timeZone&quot;: &quot;A String&quot;, # Required. The time zone of the agent from the [time zone database](https://www.iana.org/time-zones), e.g., America/New_York, Europe/Paris.
        &quot;description&quot;: &quot;A String&quot;, # The description of the agent. The maximum length is 500 characters. If exceeded, the request is rejected.
        &quot;name&quot;: &quot;A String&quot;, # The unique identifier of the agent. Required for the Agents.UpdateAgent method. Agents.CreateAgent populates the name automatically. Format: `projects//locations//agents/`.
        &quot;enableStackdriverLogging&quot;: True or False, # Indicates if stackdriver logging is enabled for the agent.
        &quot;defaultLanguageCode&quot;: &quot;A String&quot;, # Immutable. The default language of the agent as a language tag. See [Language Support](https://cloud.google.com/dialogflow/docs/reference/language) for a list of the currently supported language codes. This field cannot be set by the Agents.UpdateAgent method.
        &quot;speechToTextSettings&quot;: { # Settings related to speech recognition. # Speech recognition related settings.
          &quot;enableSpeechAdaptation&quot;: True or False, # Whether to use speech adaptation for speech recognition.
        },
        &quot;displayName&quot;: &quot;A String&quot;, # Required. The human-readable name of the agent, unique within the location.
        &quot;avatarUri&quot;: &quot;A String&quot;, # The URI of the agent&#x27;s avatar. Avatars are used throughout the Dialogflow console and in the self-hosted [Web Demo](https://cloud.google.com/dialogflow/docs/integrations/web-demo) integration.
      },
    ],
    &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results, or empty if there are no more 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="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates the specified agent.

Args:
  name: string, The unique identifier of the agent. Required for the Agents.UpdateAgent method. Agents.CreateAgent populates the name automatically. Format: `projects//locations//agents/`. (required)
  body: object, The request body.
    The object takes the form of:

{ # Agents are best described as Natural Language Understanding (NLU) modules that transform user requests into actionable data. You can include agents in your app, product, or service to determine user intent and respond to the user in a natural way. After you create an agent, you can add Intents, Entity Types, Flows, Fulfillments, Webhooks, and so on to manage the conversation flows..
  &quot;startFlow&quot;: &quot;A String&quot;, # Immutable. Name of the start flow in this agent. A start flow will be automatically created when the agent is created, and can only be deleted by deleting the agent. Format: `projects//locations//agents//flows/`.
  &quot;enableSpellCorrection&quot;: True or False, # Indicates if automatic spell correction is enabled in detect intent requests.
  &quot;timeZone&quot;: &quot;A String&quot;, # Required. The time zone of the agent from the [time zone database](https://www.iana.org/time-zones), e.g., America/New_York, Europe/Paris.
  &quot;description&quot;: &quot;A String&quot;, # The description of the agent. The maximum length is 500 characters. If exceeded, the request is rejected.
  &quot;name&quot;: &quot;A String&quot;, # The unique identifier of the agent. Required for the Agents.UpdateAgent method. Agents.CreateAgent populates the name automatically. Format: `projects//locations//agents/`.
  &quot;enableStackdriverLogging&quot;: True or False, # Indicates if stackdriver logging is enabled for the agent.
  &quot;defaultLanguageCode&quot;: &quot;A String&quot;, # Immutable. The default language of the agent as a language tag. See [Language Support](https://cloud.google.com/dialogflow/docs/reference/language) for a list of the currently supported language codes. This field cannot be set by the Agents.UpdateAgent method.
  &quot;speechToTextSettings&quot;: { # Settings related to speech recognition. # Speech recognition related settings.
    &quot;enableSpeechAdaptation&quot;: True or False, # Whether to use speech adaptation for speech recognition.
  },
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The human-readable name of the agent, unique within the location.
  &quot;avatarUri&quot;: &quot;A String&quot;, # The URI of the agent&#x27;s avatar. Avatars are used throughout the Dialogflow console and in the self-hosted [Web Demo](https://cloud.google.com/dialogflow/docs/integrations/web-demo) integration.
}

  updateMask: string, The mask to control which fields get updated. If the mask is not present, all fields will be updated.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Agents are best described as Natural Language Understanding (NLU) modules that transform user requests into actionable data. You can include agents in your app, product, or service to determine user intent and respond to the user in a natural way. After you create an agent, you can add Intents, Entity Types, Flows, Fulfillments, Webhooks, and so on to manage the conversation flows..
    &quot;startFlow&quot;: &quot;A String&quot;, # Immutable. Name of the start flow in this agent. A start flow will be automatically created when the agent is created, and can only be deleted by deleting the agent. Format: `projects//locations//agents//flows/`.
    &quot;enableSpellCorrection&quot;: True or False, # Indicates if automatic spell correction is enabled in detect intent requests.
    &quot;timeZone&quot;: &quot;A String&quot;, # Required. The time zone of the agent from the [time zone database](https://www.iana.org/time-zones), e.g., America/New_York, Europe/Paris.
    &quot;description&quot;: &quot;A String&quot;, # The description of the agent. The maximum length is 500 characters. If exceeded, the request is rejected.
    &quot;name&quot;: &quot;A String&quot;, # The unique identifier of the agent. Required for the Agents.UpdateAgent method. Agents.CreateAgent populates the name automatically. Format: `projects//locations//agents/`.
    &quot;enableStackdriverLogging&quot;: True or False, # Indicates if stackdriver logging is enabled for the agent.
    &quot;defaultLanguageCode&quot;: &quot;A String&quot;, # Immutable. The default language of the agent as a language tag. See [Language Support](https://cloud.google.com/dialogflow/docs/reference/language) for a list of the currently supported language codes. This field cannot be set by the Agents.UpdateAgent method.
    &quot;speechToTextSettings&quot;: { # Settings related to speech recognition. # Speech recognition related settings.
      &quot;enableSpeechAdaptation&quot;: True or False, # Whether to use speech adaptation for speech recognition.
    },
    &quot;displayName&quot;: &quot;A String&quot;, # Required. The human-readable name of the agent, unique within the location.
    &quot;avatarUri&quot;: &quot;A String&quot;, # The URI of the agent&#x27;s avatar. Avatars are used throughout the Dialogflow console and in the self-hosted [Web Demo](https://cloud.google.com/dialogflow/docs/integrations/web-demo) integration.
  }</pre>
</div>

<div class="method">
    <code class="details" id="restore">restore(name, body=None, x__xgafv=None)</code>
  <pre>Restores the specified agent from a binary file. Replaces the current agent with a new one. Note that all existing resources in agent (e.g. intents, entity types, flows) will be removed.

Args:
  name: string, Required. The name of the agent to restore into. Format: `projects//locations//agents/`. (required)
  body: object, The request body.
    The object takes the form of:

{ # The request message for Agents.RestoreAgent.
    &quot;agentUri&quot;: &quot;A String&quot;, # The [Google Cloud Storage](https://cloud.google.com/storage/docs/) URI to restore agent from. The format of this URI must be `gs:///`.
    &quot;agentContent&quot;: &quot;A String&quot;, # Uncompressed raw byte content for agent.
  }

  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;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.
    },
    &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;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;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;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;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;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    },
  }</pre>
</div>

</body></html>