<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="apigee_v1.html">Apigee API</a> . <a href="apigee_v1.organizations.html">organizations</a> . <a href="apigee_v1.organizations.environments.html">environments</a> . <a href="apigee_v1.organizations.environments.traceConfig.html">traceConfig</a> . <a href="apigee_v1.organizations.environments.traceConfig.overrides.html">overrides</a></h1>
<h2>Instance Methods</h2>
<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 a trace configuration override. The response contains a system-generated UUID, that can be used to view, update, or delete the configuration override. Use the List API to view the existing trace configuration overrides.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a distributed trace configuration override.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a trace configuration override.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists all of the distributed trace configuration overrides in an environment.</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 a distributed trace configuration override. Note that the repeated fields have replace semantics when included in the field mask and that they will be overwritten by the value of the fields in the request body.</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 a trace configuration override. The response contains a system-generated UUID, that can be used to view, update, or delete the configuration override. Use the List API to view the existing trace configuration overrides.

Args:
  parent: string, Required. Parent resource of the trace configuration override. Use the following structure in your request. &quot;organizations/*/environments/*/traceConfig&quot;. (required)
  body: object, The request body.
    The object takes the form of:

{ # A representation of a configuration override.
  &quot;apiProxy&quot;: &quot;A String&quot;, # ID of the API proxy that will have its trace configuration overridden.
  &quot;name&quot;: &quot;A String&quot;, # ID of the trace configuration override specified as a system-generated UUID.
  &quot;samplingConfig&quot;: { # TraceSamplingConfig represents the detail settings of distributed tracing. Only the fields that are defined in the distributed trace configuration can be overridden using the distribute trace configuration override APIs. # Trace configuration to override.
    &quot;sampler&quot;: &quot;A String&quot;, # Sampler of distributed tracing. OFF is the default value.
    &quot;samplingRate&quot;: 3.14, # Field sampling rate. This value is only applicable when using the PROBABILITY sampler. The supported values are &gt; 0 and &lt;= 0.5.
  },
}

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

Returns:
  An object of the form:

    { # A representation of a configuration override.
  &quot;apiProxy&quot;: &quot;A String&quot;, # ID of the API proxy that will have its trace configuration overridden.
  &quot;name&quot;: &quot;A String&quot;, # ID of the trace configuration override specified as a system-generated UUID.
  &quot;samplingConfig&quot;: { # TraceSamplingConfig represents the detail settings of distributed tracing. Only the fields that are defined in the distributed trace configuration can be overridden using the distribute trace configuration override APIs. # Trace configuration to override.
    &quot;sampler&quot;: &quot;A String&quot;, # Sampler of distributed tracing. OFF is the default value.
    &quot;samplingRate&quot;: 3.14, # Field sampling rate. This value is only applicable when using the PROBABILITY sampler. The supported values are &gt; 0 and &lt;= 0.5.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes a distributed trace configuration override.

Args:
  name: string, Required. Name of the trace configuration override. Use the following structure in your request: &quot;organizations/*/environments/*/traceConfig/overrides/*&quot;. (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="get">get(name, x__xgafv=None)</code>
  <pre>Gets a trace configuration override.

Args:
  name: string, Required. Name of the trace configuration override. Use the following structure in your request: &quot;organizations/*/environments/*/traceConfig/overrides/*&quot;. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A representation of a configuration override.
  &quot;apiProxy&quot;: &quot;A String&quot;, # ID of the API proxy that will have its trace configuration overridden.
  &quot;name&quot;: &quot;A String&quot;, # ID of the trace configuration override specified as a system-generated UUID.
  &quot;samplingConfig&quot;: { # TraceSamplingConfig represents the detail settings of distributed tracing. Only the fields that are defined in the distributed trace configuration can be overridden using the distribute trace configuration override APIs. # Trace configuration to override.
    &quot;sampler&quot;: &quot;A String&quot;, # Sampler of distributed tracing. OFF is the default value.
    &quot;samplingRate&quot;: 3.14, # Field sampling rate. This value is only applicable when using the PROBABILITY sampler. The supported values are &gt; 0 and &lt;= 0.5.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists all of the distributed trace configuration overrides in an environment.

Args:
  parent: string, Required. Parent resource of the trace configuration override. Use the following structure in your request: &quot;organizations/*/environments/*/traceConfig&quot;. (required)
  pageSize: integer, Maximum number of trace configuration overrides to return. If not specified, the maximum number returned is 25. The maximum number cannot exceed 100.
  pageToken: string, A page token, returned from a previous `ListTraceConfigOverrides` call. Token value that can be used to retrieve the subsequent page. When paginating, all other parameters provided to `ListTraceConfigOverrides` must match those specified in the call to obtain the page token.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response for ListTraceConfigOverrides.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Token value that can be passed as `page_token` to retrieve the next page of content.
  &quot;traceConfigOverrides&quot;: [ # List all trace configuration overrides in an environment.
    { # A representation of a configuration override.
      &quot;apiProxy&quot;: &quot;A String&quot;, # ID of the API proxy that will have its trace configuration overridden.
      &quot;name&quot;: &quot;A String&quot;, # ID of the trace configuration override specified as a system-generated UUID.
      &quot;samplingConfig&quot;: { # TraceSamplingConfig represents the detail settings of distributed tracing. Only the fields that are defined in the distributed trace configuration can be overridden using the distribute trace configuration override APIs. # Trace configuration to override.
        &quot;sampler&quot;: &quot;A String&quot;, # Sampler of distributed tracing. OFF is the default value.
        &quot;samplingRate&quot;: 3.14, # Field sampling rate. This value is only applicable when using the PROBABILITY sampler. The supported values are &gt; 0 and &lt;= 0.5.
      },
    },
  ],
}</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 a distributed trace configuration override. Note that the repeated fields have replace semantics when included in the field mask and that they will be overwritten by the value of the fields in the request body.

Args:
  name: string, Required. Name of the trace configuration override. Use the following structure in your request: &quot;organizations/*/environments/*/traceConfig/overrides/*&quot;. (required)
  body: object, The request body.
    The object takes the form of:

{ # A representation of a configuration override.
  &quot;apiProxy&quot;: &quot;A String&quot;, # ID of the API proxy that will have its trace configuration overridden.
  &quot;name&quot;: &quot;A String&quot;, # ID of the trace configuration override specified as a system-generated UUID.
  &quot;samplingConfig&quot;: { # TraceSamplingConfig represents the detail settings of distributed tracing. Only the fields that are defined in the distributed trace configuration can be overridden using the distribute trace configuration override APIs. # Trace configuration to override.
    &quot;sampler&quot;: &quot;A String&quot;, # Sampler of distributed tracing. OFF is the default value.
    &quot;samplingRate&quot;: 3.14, # Field sampling rate. This value is only applicable when using the PROBABILITY sampler. The supported values are &gt; 0 and &lt;= 0.5.
  },
}

  updateMask: string, List of fields to be updated.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A representation of a configuration override.
  &quot;apiProxy&quot;: &quot;A String&quot;, # ID of the API proxy that will have its trace configuration overridden.
  &quot;name&quot;: &quot;A String&quot;, # ID of the trace configuration override specified as a system-generated UUID.
  &quot;samplingConfig&quot;: { # TraceSamplingConfig represents the detail settings of distributed tracing. Only the fields that are defined in the distributed trace configuration can be overridden using the distribute trace configuration override APIs. # Trace configuration to override.
    &quot;sampler&quot;: &quot;A String&quot;, # Sampler of distributed tracing. OFF is the default value.
    &quot;samplingRate&quot;: 3.14, # Field sampling rate. This value is only applicable when using the PROBABILITY sampler. The supported values are &gt; 0 and &lt;= 0.5.
  },
}</pre>
</div>

</body></html>