<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="analytics_v3.html">Google Analytics API</a> . <a href="analytics_v3.management.html">management</a> . <a href="analytics_v3.management.customMetrics.html">customMetrics</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="#get">get(accountId, webPropertyId, customMetricId)</a></code></p>
<p class="firstline">Get a custom metric to which the user has access.</p>
<p class="toc_element">
  <code><a href="#insert">insert(accountId, webPropertyId, body=None)</a></code></p>
<p class="firstline">Create a new custom metric.</p>
<p class="toc_element">
  <code><a href="#list">list(accountId, webPropertyId, start_index=None, max_results=None)</a></code></p>
<p class="firstline">Lists custom metrics to which the user has access.</p>
<p class="toc_element">
  <code><a href="#patch">patch(accountId, webPropertyId, customMetricId, body=None, ignoreCustomDataSourceLinks=None)</a></code></p>
<p class="firstline">Updates an existing custom metric. This method supports patch semantics.</p>
<p class="toc_element">
  <code><a href="#update">update(accountId, webPropertyId, customMetricId, body=None, ignoreCustomDataSourceLinks=None)</a></code></p>
<p class="firstline">Updates an existing custom metric.</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="get">get(accountId, webPropertyId, customMetricId)</code>
  <pre>Get a custom metric to which the user has access.

Args:
  accountId: string, Account ID for the custom metric to retrieve. (required)
  webPropertyId: string, Web property ID for the custom metric to retrieve. (required)
  customMetricId: string, The ID of the custom metric to retrieve. (required)

Returns:
  An object of the form:

    { # JSON template for Analytics Custom Metric.
      &quot;webPropertyId&quot;: &quot;A String&quot;, # Property ID.
      &quot;selfLink&quot;: &quot;A String&quot;, # Link for the custom metric
      &quot;scope&quot;: &quot;A String&quot;, # Scope of the custom metric: HIT or PRODUCT.
      &quot;index&quot;: 42, # Index of the custom metric.
      &quot;id&quot;: &quot;A String&quot;, # Custom metric ID.
      &quot;created&quot;: &quot;A String&quot;, # Time the custom metric was created.
      &quot;parentLink&quot;: { # Parent link for the custom metric. Points to the property to which the custom metric belongs.
        &quot;type&quot;: &quot;analytics#webproperty&quot;, # Type of the parent link. Set to &quot;analytics#webproperty&quot;.
        &quot;href&quot;: &quot;A String&quot;, # Link to the property to which the custom metric belongs.
      },
      &quot;active&quot;: True or False, # Boolean indicating whether the custom metric is active.
      &quot;name&quot;: &quot;A String&quot;, # Name of the custom metric.
      &quot;updated&quot;: &quot;A String&quot;, # Time the custom metric was last modified.
      &quot;max_value&quot;: &quot;A String&quot;, # Max value of custom metric.
      &quot;min_value&quot;: &quot;A String&quot;, # Min value of custom metric.
      &quot;kind&quot;: &quot;analytics#customMetric&quot;, # Kind value for a custom metric. Set to &quot;analytics#customMetric&quot;. It is a read-only field.
      &quot;accountId&quot;: &quot;A String&quot;, # Account ID.
      &quot;type&quot;: &quot;A String&quot;, # Data type of custom metric.
    }</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(accountId, webPropertyId, body=None)</code>
  <pre>Create a new custom metric.

Args:
  accountId: string, Account ID for the custom metric to create. (required)
  webPropertyId: string, Web property ID for the custom dimension to create. (required)
  body: object, The request body.
    The object takes the form of:

{ # JSON template for Analytics Custom Metric.
    &quot;webPropertyId&quot;: &quot;A String&quot;, # Property ID.
    &quot;selfLink&quot;: &quot;A String&quot;, # Link for the custom metric
    &quot;scope&quot;: &quot;A String&quot;, # Scope of the custom metric: HIT or PRODUCT.
    &quot;index&quot;: 42, # Index of the custom metric.
    &quot;id&quot;: &quot;A String&quot;, # Custom metric ID.
    &quot;created&quot;: &quot;A String&quot;, # Time the custom metric was created.
    &quot;parentLink&quot;: { # Parent link for the custom metric. Points to the property to which the custom metric belongs.
      &quot;type&quot;: &quot;analytics#webproperty&quot;, # Type of the parent link. Set to &quot;analytics#webproperty&quot;.
      &quot;href&quot;: &quot;A String&quot;, # Link to the property to which the custom metric belongs.
    },
    &quot;active&quot;: True or False, # Boolean indicating whether the custom metric is active.
    &quot;name&quot;: &quot;A String&quot;, # Name of the custom metric.
    &quot;updated&quot;: &quot;A String&quot;, # Time the custom metric was last modified.
    &quot;max_value&quot;: &quot;A String&quot;, # Max value of custom metric.
    &quot;min_value&quot;: &quot;A String&quot;, # Min value of custom metric.
    &quot;kind&quot;: &quot;analytics#customMetric&quot;, # Kind value for a custom metric. Set to &quot;analytics#customMetric&quot;. It is a read-only field.
    &quot;accountId&quot;: &quot;A String&quot;, # Account ID.
    &quot;type&quot;: &quot;A String&quot;, # Data type of custom metric.
  }


Returns:
  An object of the form:

    { # JSON template for Analytics Custom Metric.
      &quot;webPropertyId&quot;: &quot;A String&quot;, # Property ID.
      &quot;selfLink&quot;: &quot;A String&quot;, # Link for the custom metric
      &quot;scope&quot;: &quot;A String&quot;, # Scope of the custom metric: HIT or PRODUCT.
      &quot;index&quot;: 42, # Index of the custom metric.
      &quot;id&quot;: &quot;A String&quot;, # Custom metric ID.
      &quot;created&quot;: &quot;A String&quot;, # Time the custom metric was created.
      &quot;parentLink&quot;: { # Parent link for the custom metric. Points to the property to which the custom metric belongs.
        &quot;type&quot;: &quot;analytics#webproperty&quot;, # Type of the parent link. Set to &quot;analytics#webproperty&quot;.
        &quot;href&quot;: &quot;A String&quot;, # Link to the property to which the custom metric belongs.
      },
      &quot;active&quot;: True or False, # Boolean indicating whether the custom metric is active.
      &quot;name&quot;: &quot;A String&quot;, # Name of the custom metric.
      &quot;updated&quot;: &quot;A String&quot;, # Time the custom metric was last modified.
      &quot;max_value&quot;: &quot;A String&quot;, # Max value of custom metric.
      &quot;min_value&quot;: &quot;A String&quot;, # Min value of custom metric.
      &quot;kind&quot;: &quot;analytics#customMetric&quot;, # Kind value for a custom metric. Set to &quot;analytics#customMetric&quot;. It is a read-only field.
      &quot;accountId&quot;: &quot;A String&quot;, # Account ID.
      &quot;type&quot;: &quot;A String&quot;, # Data type of custom metric.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(accountId, webPropertyId, start_index=None, max_results=None)</code>
  <pre>Lists custom metrics to which the user has access.

Args:
  accountId: string, Account ID for the custom metrics to retrieve. (required)
  webPropertyId: string, Web property ID for the custom metrics to retrieve. (required)
  start_index: integer, An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.
  max_results: integer, The maximum number of custom metrics to include in this response.

Returns:
  An object of the form:

    { # A custom metric collection lists Analytics custom metrics to which the user has access. Each resource in the collection corresponds to a single Analytics custom metric.
    &quot;startIndex&quot;: 42, # The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.
    &quot;previousLink&quot;: &quot;A String&quot;, # Link to previous page for this custom metric collection.
    &quot;kind&quot;: &quot;analytics#customMetrics&quot;, # Collection type.
    &quot;items&quot;: [ # Collection of custom metrics.
      { # JSON template for Analytics Custom Metric.
          &quot;webPropertyId&quot;: &quot;A String&quot;, # Property ID.
          &quot;selfLink&quot;: &quot;A String&quot;, # Link for the custom metric
          &quot;scope&quot;: &quot;A String&quot;, # Scope of the custom metric: HIT or PRODUCT.
          &quot;index&quot;: 42, # Index of the custom metric.
          &quot;id&quot;: &quot;A String&quot;, # Custom metric ID.
          &quot;created&quot;: &quot;A String&quot;, # Time the custom metric was created.
          &quot;parentLink&quot;: { # Parent link for the custom metric. Points to the property to which the custom metric belongs.
            &quot;type&quot;: &quot;analytics#webproperty&quot;, # Type of the parent link. Set to &quot;analytics#webproperty&quot;.
            &quot;href&quot;: &quot;A String&quot;, # Link to the property to which the custom metric belongs.
          },
          &quot;active&quot;: True or False, # Boolean indicating whether the custom metric is active.
          &quot;name&quot;: &quot;A String&quot;, # Name of the custom metric.
          &quot;updated&quot;: &quot;A String&quot;, # Time the custom metric was last modified.
          &quot;max_value&quot;: &quot;A String&quot;, # Max value of custom metric.
          &quot;min_value&quot;: &quot;A String&quot;, # Min value of custom metric.
          &quot;kind&quot;: &quot;analytics#customMetric&quot;, # Kind value for a custom metric. Set to &quot;analytics#customMetric&quot;. It is a read-only field.
          &quot;accountId&quot;: &quot;A String&quot;, # Account ID.
          &quot;type&quot;: &quot;A String&quot;, # Data type of custom metric.
        },
    ],
    &quot;itemsPerPage&quot;: 42, # The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.
    &quot;username&quot;: &quot;A String&quot;, # Email ID of the authenticated user
    &quot;nextLink&quot;: &quot;A String&quot;, # Link to next page for this custom metric collection.
    &quot;totalResults&quot;: 42, # The total number of results for the query, regardless of the number of results in the response.
  }</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(accountId, webPropertyId, customMetricId, body=None, ignoreCustomDataSourceLinks=None)</code>
  <pre>Updates an existing custom metric. This method supports patch semantics.

Args:
  accountId: string, Account ID for the custom metric to update. (required)
  webPropertyId: string, Web property ID for the custom metric to update. (required)
  customMetricId: string, Custom metric ID for the custom metric to update. (required)
  body: object, The request body.
    The object takes the form of:

{ # JSON template for Analytics Custom Metric.
    &quot;webPropertyId&quot;: &quot;A String&quot;, # Property ID.
    &quot;selfLink&quot;: &quot;A String&quot;, # Link for the custom metric
    &quot;scope&quot;: &quot;A String&quot;, # Scope of the custom metric: HIT or PRODUCT.
    &quot;index&quot;: 42, # Index of the custom metric.
    &quot;id&quot;: &quot;A String&quot;, # Custom metric ID.
    &quot;created&quot;: &quot;A String&quot;, # Time the custom metric was created.
    &quot;parentLink&quot;: { # Parent link for the custom metric. Points to the property to which the custom metric belongs.
      &quot;type&quot;: &quot;analytics#webproperty&quot;, # Type of the parent link. Set to &quot;analytics#webproperty&quot;.
      &quot;href&quot;: &quot;A String&quot;, # Link to the property to which the custom metric belongs.
    },
    &quot;active&quot;: True or False, # Boolean indicating whether the custom metric is active.
    &quot;name&quot;: &quot;A String&quot;, # Name of the custom metric.
    &quot;updated&quot;: &quot;A String&quot;, # Time the custom metric was last modified.
    &quot;max_value&quot;: &quot;A String&quot;, # Max value of custom metric.
    &quot;min_value&quot;: &quot;A String&quot;, # Min value of custom metric.
    &quot;kind&quot;: &quot;analytics#customMetric&quot;, # Kind value for a custom metric. Set to &quot;analytics#customMetric&quot;. It is a read-only field.
    &quot;accountId&quot;: &quot;A String&quot;, # Account ID.
    &quot;type&quot;: &quot;A String&quot;, # Data type of custom metric.
  }

  ignoreCustomDataSourceLinks: boolean, Force the update and ignore any warnings related to the custom metric being linked to a custom data source / data set.

Returns:
  An object of the form:

    { # JSON template for Analytics Custom Metric.
      &quot;webPropertyId&quot;: &quot;A String&quot;, # Property ID.
      &quot;selfLink&quot;: &quot;A String&quot;, # Link for the custom metric
      &quot;scope&quot;: &quot;A String&quot;, # Scope of the custom metric: HIT or PRODUCT.
      &quot;index&quot;: 42, # Index of the custom metric.
      &quot;id&quot;: &quot;A String&quot;, # Custom metric ID.
      &quot;created&quot;: &quot;A String&quot;, # Time the custom metric was created.
      &quot;parentLink&quot;: { # Parent link for the custom metric. Points to the property to which the custom metric belongs.
        &quot;type&quot;: &quot;analytics#webproperty&quot;, # Type of the parent link. Set to &quot;analytics#webproperty&quot;.
        &quot;href&quot;: &quot;A String&quot;, # Link to the property to which the custom metric belongs.
      },
      &quot;active&quot;: True or False, # Boolean indicating whether the custom metric is active.
      &quot;name&quot;: &quot;A String&quot;, # Name of the custom metric.
      &quot;updated&quot;: &quot;A String&quot;, # Time the custom metric was last modified.
      &quot;max_value&quot;: &quot;A String&quot;, # Max value of custom metric.
      &quot;min_value&quot;: &quot;A String&quot;, # Min value of custom metric.
      &quot;kind&quot;: &quot;analytics#customMetric&quot;, # Kind value for a custom metric. Set to &quot;analytics#customMetric&quot;. It is a read-only field.
      &quot;accountId&quot;: &quot;A String&quot;, # Account ID.
      &quot;type&quot;: &quot;A String&quot;, # Data type of custom metric.
    }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(accountId, webPropertyId, customMetricId, body=None, ignoreCustomDataSourceLinks=None)</code>
  <pre>Updates an existing custom metric.

Args:
  accountId: string, Account ID for the custom metric to update. (required)
  webPropertyId: string, Web property ID for the custom metric to update. (required)
  customMetricId: string, Custom metric ID for the custom metric to update. (required)
  body: object, The request body.
    The object takes the form of:

{ # JSON template for Analytics Custom Metric.
    &quot;webPropertyId&quot;: &quot;A String&quot;, # Property ID.
    &quot;selfLink&quot;: &quot;A String&quot;, # Link for the custom metric
    &quot;scope&quot;: &quot;A String&quot;, # Scope of the custom metric: HIT or PRODUCT.
    &quot;index&quot;: 42, # Index of the custom metric.
    &quot;id&quot;: &quot;A String&quot;, # Custom metric ID.
    &quot;created&quot;: &quot;A String&quot;, # Time the custom metric was created.
    &quot;parentLink&quot;: { # Parent link for the custom metric. Points to the property to which the custom metric belongs.
      &quot;type&quot;: &quot;analytics#webproperty&quot;, # Type of the parent link. Set to &quot;analytics#webproperty&quot;.
      &quot;href&quot;: &quot;A String&quot;, # Link to the property to which the custom metric belongs.
    },
    &quot;active&quot;: True or False, # Boolean indicating whether the custom metric is active.
    &quot;name&quot;: &quot;A String&quot;, # Name of the custom metric.
    &quot;updated&quot;: &quot;A String&quot;, # Time the custom metric was last modified.
    &quot;max_value&quot;: &quot;A String&quot;, # Max value of custom metric.
    &quot;min_value&quot;: &quot;A String&quot;, # Min value of custom metric.
    &quot;kind&quot;: &quot;analytics#customMetric&quot;, # Kind value for a custom metric. Set to &quot;analytics#customMetric&quot;. It is a read-only field.
    &quot;accountId&quot;: &quot;A String&quot;, # Account ID.
    &quot;type&quot;: &quot;A String&quot;, # Data type of custom metric.
  }

  ignoreCustomDataSourceLinks: boolean, Force the update and ignore any warnings related to the custom metric being linked to a custom data source / data set.

Returns:
  An object of the form:

    { # JSON template for Analytics Custom Metric.
      &quot;webPropertyId&quot;: &quot;A String&quot;, # Property ID.
      &quot;selfLink&quot;: &quot;A String&quot;, # Link for the custom metric
      &quot;scope&quot;: &quot;A String&quot;, # Scope of the custom metric: HIT or PRODUCT.
      &quot;index&quot;: 42, # Index of the custom metric.
      &quot;id&quot;: &quot;A String&quot;, # Custom metric ID.
      &quot;created&quot;: &quot;A String&quot;, # Time the custom metric was created.
      &quot;parentLink&quot;: { # Parent link for the custom metric. Points to the property to which the custom metric belongs.
        &quot;type&quot;: &quot;analytics#webproperty&quot;, # Type of the parent link. Set to &quot;analytics#webproperty&quot;.
        &quot;href&quot;: &quot;A String&quot;, # Link to the property to which the custom metric belongs.
      },
      &quot;active&quot;: True or False, # Boolean indicating whether the custom metric is active.
      &quot;name&quot;: &quot;A String&quot;, # Name of the custom metric.
      &quot;updated&quot;: &quot;A String&quot;, # Time the custom metric was last modified.
      &quot;max_value&quot;: &quot;A String&quot;, # Max value of custom metric.
      &quot;min_value&quot;: &quot;A String&quot;, # Min value of custom metric.
      &quot;kind&quot;: &quot;analytics#customMetric&quot;, # Kind value for a custom metric. Set to &quot;analytics#customMetric&quot;. It is a read-only field.
      &quot;accountId&quot;: &quot;A String&quot;, # Account ID.
      &quot;type&quot;: &quot;A String&quot;, # Data type of custom metric.
    }</pre>
</div>

</body></html>