<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="analyticsadmin_v1alpha.html">Google Analytics Admin API</a> . <a href="analyticsadmin_v1alpha.properties.html">properties</a> . <a href="analyticsadmin_v1alpha.properties.conversionEvents.html">conversionEvents</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 conversion event with the specified attributes.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a conversion event in a property.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieve a single conversion event.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns a list of conversion events in the specified parent property. Returns an empty list if no conversion events are found.</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>
<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 conversion event with the specified attributes.

Args:
  parent: string, Required. The resource name of the parent property where this conversion event will be created. Format: properties/123 (required)
  body: object, The request body.
    The object takes the form of:

{ # A conversion event in a Google Analytics property.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time when this conversion event was created in the property.
  &quot;custom&quot;: True or False, # Output only. If set to true, this conversion event refers to a custom event. If set to false, this conversion event refers to a default event in GA. Default events typically have special meaning in GA. Default events are usually created for you by the GA system, but in some cases can be created by property admins. Custom events count towards the maximum number of custom conversion events that may be created per property.
  &quot;deletable&quot;: True or False, # Output only. If set, this event can currently be deleted via DeleteConversionEvent.
  &quot;eventName&quot;: &quot;A String&quot;, # Immutable. The event name for this conversion event. Examples: &#x27;click&#x27;, &#x27;purchase&#x27;
  &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name of this conversion event. Format: properties/{property}/conversionEvents/{conversion_event}
}

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

Returns:
  An object of the form:

    { # A conversion event in a Google Analytics property.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time when this conversion event was created in the property.
  &quot;custom&quot;: True or False, # Output only. If set to true, this conversion event refers to a custom event. If set to false, this conversion event refers to a default event in GA. Default events typically have special meaning in GA. Default events are usually created for you by the GA system, but in some cases can be created by property admins. Custom events count towards the maximum number of custom conversion events that may be created per property.
  &quot;deletable&quot;: True or False, # Output only. If set, this event can currently be deleted via DeleteConversionEvent.
  &quot;eventName&quot;: &quot;A String&quot;, # Immutable. The event name for this conversion event. Examples: &#x27;click&#x27;, &#x27;purchase&#x27;
  &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name of this conversion event. Format: properties/{property}/conversionEvents/{conversion_event}
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes a conversion event in a property.

Args:
  name: string, Required. The resource name of the conversion event to delete. Format: properties/{property}/conversionEvents/{conversion_event} Example: &quot;properties/123/conversionEvents/456&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>Retrieve a single conversion event.

Args:
  name: string, Required. The resource name of the conversion event to retrieve. Format: properties/{property}/conversionEvents/{conversion_event} Example: &quot;properties/123/conversionEvents/456&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 conversion event in a Google Analytics property.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time when this conversion event was created in the property.
  &quot;custom&quot;: True or False, # Output only. If set to true, this conversion event refers to a custom event. If set to false, this conversion event refers to a default event in GA. Default events typically have special meaning in GA. Default events are usually created for you by the GA system, but in some cases can be created by property admins. Custom events count towards the maximum number of custom conversion events that may be created per property.
  &quot;deletable&quot;: True or False, # Output only. If set, this event can currently be deleted via DeleteConversionEvent.
  &quot;eventName&quot;: &quot;A String&quot;, # Immutable. The event name for this conversion event. Examples: &#x27;click&#x27;, &#x27;purchase&#x27;
  &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name of this conversion event. Format: properties/{property}/conversionEvents/{conversion_event}
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Returns a list of conversion events in the specified parent property. Returns an empty list if no conversion events are found.

Args:
  parent: string, Required. The resource name of the parent property. Example: &#x27;properties/123&#x27; (required)
  pageSize: integer, The maximum number of resources to return. If unspecified, at most 50 resources will be returned. The maximum value is 200; (higher values will be coerced to the maximum)
  pageToken: string, A page token, received from a previous `ListConversionEvents` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListConversionEvents` must match the call that provided 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 message for ListConversionEvents RPC.
  &quot;conversionEvents&quot;: [ # The requested conversion events
    { # A conversion event in a Google Analytics property.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time when this conversion event was created in the property.
      &quot;custom&quot;: True or False, # Output only. If set to true, this conversion event refers to a custom event. If set to false, this conversion event refers to a default event in GA. Default events typically have special meaning in GA. Default events are usually created for you by the GA system, but in some cases can be created by property admins. Custom events count towards the maximum number of custom conversion events that may be created per property.
      &quot;deletable&quot;: True or False, # Output only. If set, this event can currently be deleted via DeleteConversionEvent.
      &quot;eventName&quot;: &quot;A String&quot;, # Immutable. The event name for this conversion event. Examples: &#x27;click&#x27;, &#x27;purchase&#x27;
      &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name of this conversion event. Format: properties/{property}/conversionEvents/{conversion_event}
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages.
}</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>

</body></html>