<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.dataStreams.html">dataStreams</a> . <a href="analyticsadmin_v1alpha.properties.dataStreams.eventCreateRules.html">eventCreateRules</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 an EventCreateRule.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes an EventCreateRule.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Lookup for a single EventCreateRule.</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 EventCreateRules on a web data stream.</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">Updates an EventCreateRule.</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 EventCreateRule.

Args:
  parent: string, Required. Example format: properties/123/dataStreams/456 (required)
  body: object, The request body.
    The object takes the form of:

{ # An Event Create Rule defines conditions that will trigger the creation of an entirely new event based upon matched criteria of a source event. Additional mutations of the parameters from the source event can be defined. Unlike Event Edit rules, Event Creation Rules have no defined order. They will all be run independently. Event Edit and Event Create rules can&#x27;t be used to modify an event created from an Event Create rule.
  &quot;destinationEvent&quot;: &quot;A String&quot;, # Required. The name of the new event to be created. This value must: * be less than 40 characters * consist only of letters, digits or _ (underscores) * start with a letter
  &quot;eventConditions&quot;: [ # Required. Must have at least one condition, and can have up to 10 max. Conditions on the source event must match for this rule to be applied.
    { # Defines a condition for when an Event Edit or Event Creation rule applies to an event.
      &quot;comparisonType&quot;: &quot;A String&quot;, # Required. The type of comparison to be applied to the value.
      &quot;field&quot;: &quot;A String&quot;, # Required. The name of the field that is compared against for the condition. If &#x27;event_name&#x27; is specified this condition will apply to the name of the event. Otherwise the condition will apply to a parameter with the specified name. This value cannot contain spaces.
      &quot;negated&quot;: True or False, # Whether or not the result of the comparison should be negated. For example, if `negated` is true, then &#x27;equals&#x27; comparisons would function as &#x27;not equals&#x27;.
      &quot;value&quot;: &quot;A String&quot;, # Required. The value being compared against for this condition. The runtime implementation may perform type coercion of this value to evaluate this condition based on the type of the parameter value.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name for this EventCreateRule resource. Format: properties/{property}/dataStreams/{data_stream}/eventCreateRules/{event_create_rule}
  &quot;parameterMutations&quot;: [ # Parameter mutations define parameter behavior on the new event, and are applied in order. A maximum of 20 mutations can be applied.
    { # Defines an event parameter to mutate.
      &quot;parameter&quot;: &quot;A String&quot;, # Required. The name of the parameter to mutate. This value must: * be less than 40 characters. * be unique across across all mutations within the rule * consist only of letters, digits or _ (underscores) For event edit rules, the name may also be set to &#x27;event_name&#x27; to modify the event_name in place.
      &quot;parameterValue&quot;: &quot;A String&quot;, # Required. The value mutation to perform. * Must be less than 100 characters. * To specify a constant value for the param, use the value&#x27;s string. * To copy value from another parameter, use syntax like &quot;[[other_parameter]]&quot; For more details, see this [help center article](https://support.google.com/analytics/answer/10085872#modify-an-event&amp;zippy=%2Cin-this-article%2Cmodify-parameters).
    },
  ],
  &quot;sourceCopyParameters&quot;: True or False, # If true, the source parameters are copied to the new event. If false, or unset, all non-internal parameters are not copied from the source event. Parameter mutations are applied after the parameters have been copied.
}

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

Returns:
  An object of the form:

    { # An Event Create Rule defines conditions that will trigger the creation of an entirely new event based upon matched criteria of a source event. Additional mutations of the parameters from the source event can be defined. Unlike Event Edit rules, Event Creation Rules have no defined order. They will all be run independently. Event Edit and Event Create rules can&#x27;t be used to modify an event created from an Event Create rule.
  &quot;destinationEvent&quot;: &quot;A String&quot;, # Required. The name of the new event to be created. This value must: * be less than 40 characters * consist only of letters, digits or _ (underscores) * start with a letter
  &quot;eventConditions&quot;: [ # Required. Must have at least one condition, and can have up to 10 max. Conditions on the source event must match for this rule to be applied.
    { # Defines a condition for when an Event Edit or Event Creation rule applies to an event.
      &quot;comparisonType&quot;: &quot;A String&quot;, # Required. The type of comparison to be applied to the value.
      &quot;field&quot;: &quot;A String&quot;, # Required. The name of the field that is compared against for the condition. If &#x27;event_name&#x27; is specified this condition will apply to the name of the event. Otherwise the condition will apply to a parameter with the specified name. This value cannot contain spaces.
      &quot;negated&quot;: True or False, # Whether or not the result of the comparison should be negated. For example, if `negated` is true, then &#x27;equals&#x27; comparisons would function as &#x27;not equals&#x27;.
      &quot;value&quot;: &quot;A String&quot;, # Required. The value being compared against for this condition. The runtime implementation may perform type coercion of this value to evaluate this condition based on the type of the parameter value.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name for this EventCreateRule resource. Format: properties/{property}/dataStreams/{data_stream}/eventCreateRules/{event_create_rule}
  &quot;parameterMutations&quot;: [ # Parameter mutations define parameter behavior on the new event, and are applied in order. A maximum of 20 mutations can be applied.
    { # Defines an event parameter to mutate.
      &quot;parameter&quot;: &quot;A String&quot;, # Required. The name of the parameter to mutate. This value must: * be less than 40 characters. * be unique across across all mutations within the rule * consist only of letters, digits or _ (underscores) For event edit rules, the name may also be set to &#x27;event_name&#x27; to modify the event_name in place.
      &quot;parameterValue&quot;: &quot;A String&quot;, # Required. The value mutation to perform. * Must be less than 100 characters. * To specify a constant value for the param, use the value&#x27;s string. * To copy value from another parameter, use syntax like &quot;[[other_parameter]]&quot; For more details, see this [help center article](https://support.google.com/analytics/answer/10085872#modify-an-event&amp;zippy=%2Cin-this-article%2Cmodify-parameters).
    },
  ],
  &quot;sourceCopyParameters&quot;: True or False, # If true, the source parameters are copied to the new event. If false, or unset, all non-internal parameters are not copied from the source event. Parameter mutations are applied after the parameters have been copied.
}</pre>
</div>

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

Args:
  name: string, Required. Example format: properties/123/dataStreams/456/eventCreateRules/789 (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); }
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Lookup for a single EventCreateRule.

Args:
  name: string, Required. The name of the EventCreateRule to get. Example format: properties/123/dataStreams/456/eventCreateRules/789 (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # An Event Create Rule defines conditions that will trigger the creation of an entirely new event based upon matched criteria of a source event. Additional mutations of the parameters from the source event can be defined. Unlike Event Edit rules, Event Creation Rules have no defined order. They will all be run independently. Event Edit and Event Create rules can&#x27;t be used to modify an event created from an Event Create rule.
  &quot;destinationEvent&quot;: &quot;A String&quot;, # Required. The name of the new event to be created. This value must: * be less than 40 characters * consist only of letters, digits or _ (underscores) * start with a letter
  &quot;eventConditions&quot;: [ # Required. Must have at least one condition, and can have up to 10 max. Conditions on the source event must match for this rule to be applied.
    { # Defines a condition for when an Event Edit or Event Creation rule applies to an event.
      &quot;comparisonType&quot;: &quot;A String&quot;, # Required. The type of comparison to be applied to the value.
      &quot;field&quot;: &quot;A String&quot;, # Required. The name of the field that is compared against for the condition. If &#x27;event_name&#x27; is specified this condition will apply to the name of the event. Otherwise the condition will apply to a parameter with the specified name. This value cannot contain spaces.
      &quot;negated&quot;: True or False, # Whether or not the result of the comparison should be negated. For example, if `negated` is true, then &#x27;equals&#x27; comparisons would function as &#x27;not equals&#x27;.
      &quot;value&quot;: &quot;A String&quot;, # Required. The value being compared against for this condition. The runtime implementation may perform type coercion of this value to evaluate this condition based on the type of the parameter value.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name for this EventCreateRule resource. Format: properties/{property}/dataStreams/{data_stream}/eventCreateRules/{event_create_rule}
  &quot;parameterMutations&quot;: [ # Parameter mutations define parameter behavior on the new event, and are applied in order. A maximum of 20 mutations can be applied.
    { # Defines an event parameter to mutate.
      &quot;parameter&quot;: &quot;A String&quot;, # Required. The name of the parameter to mutate. This value must: * be less than 40 characters. * be unique across across all mutations within the rule * consist only of letters, digits or _ (underscores) For event edit rules, the name may also be set to &#x27;event_name&#x27; to modify the event_name in place.
      &quot;parameterValue&quot;: &quot;A String&quot;, # Required. The value mutation to perform. * Must be less than 100 characters. * To specify a constant value for the param, use the value&#x27;s string. * To copy value from another parameter, use syntax like &quot;[[other_parameter]]&quot; For more details, see this [help center article](https://support.google.com/analytics/answer/10085872#modify-an-event&amp;zippy=%2Cin-this-article%2Cmodify-parameters).
    },
  ],
  &quot;sourceCopyParameters&quot;: True or False, # If true, the source parameters are copied to the new event. If false, or unset, all non-internal parameters are not copied from the source event. Parameter mutations are applied after the parameters have been copied.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists EventCreateRules on a web data stream.

Args:
  parent: string, Required. Example format: properties/123/dataStreams/456 (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 `ListEventCreateRules` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListEventCreateRules` 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 ListEventCreateRules RPC.
  &quot;eventCreateRules&quot;: [ # List of EventCreateRules. These will be ordered stably, but in an arbitrary order.
    { # An Event Create Rule defines conditions that will trigger the creation of an entirely new event based upon matched criteria of a source event. Additional mutations of the parameters from the source event can be defined. Unlike Event Edit rules, Event Creation Rules have no defined order. They will all be run independently. Event Edit and Event Create rules can&#x27;t be used to modify an event created from an Event Create rule.
      &quot;destinationEvent&quot;: &quot;A String&quot;, # Required. The name of the new event to be created. This value must: * be less than 40 characters * consist only of letters, digits or _ (underscores) * start with a letter
      &quot;eventConditions&quot;: [ # Required. Must have at least one condition, and can have up to 10 max. Conditions on the source event must match for this rule to be applied.
        { # Defines a condition for when an Event Edit or Event Creation rule applies to an event.
          &quot;comparisonType&quot;: &quot;A String&quot;, # Required. The type of comparison to be applied to the value.
          &quot;field&quot;: &quot;A String&quot;, # Required. The name of the field that is compared against for the condition. If &#x27;event_name&#x27; is specified this condition will apply to the name of the event. Otherwise the condition will apply to a parameter with the specified name. This value cannot contain spaces.
          &quot;negated&quot;: True or False, # Whether or not the result of the comparison should be negated. For example, if `negated` is true, then &#x27;equals&#x27; comparisons would function as &#x27;not equals&#x27;.
          &quot;value&quot;: &quot;A String&quot;, # Required. The value being compared against for this condition. The runtime implementation may perform type coercion of this value to evaluate this condition based on the type of the parameter value.
        },
      ],
      &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name for this EventCreateRule resource. Format: properties/{property}/dataStreams/{data_stream}/eventCreateRules/{event_create_rule}
      &quot;parameterMutations&quot;: [ # Parameter mutations define parameter behavior on the new event, and are applied in order. A maximum of 20 mutations can be applied.
        { # Defines an event parameter to mutate.
          &quot;parameter&quot;: &quot;A String&quot;, # Required. The name of the parameter to mutate. This value must: * be less than 40 characters. * be unique across across all mutations within the rule * consist only of letters, digits or _ (underscores) For event edit rules, the name may also be set to &#x27;event_name&#x27; to modify the event_name in place.
          &quot;parameterValue&quot;: &quot;A String&quot;, # Required. The value mutation to perform. * Must be less than 100 characters. * To specify a constant value for the param, use the value&#x27;s string. * To copy value from another parameter, use syntax like &quot;[[other_parameter]]&quot; For more details, see this [help center article](https://support.google.com/analytics/answer/10085872#modify-an-event&amp;zippy=%2Cin-this-article%2Cmodify-parameters).
        },
      ],
      &quot;sourceCopyParameters&quot;: True or False, # If true, the source parameters are copied to the new event. If false, or unset, all non-internal parameters are not copied from the source event. Parameter mutations are applied after the parameters have been copied.
    },
  ],
  &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()</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 an EventCreateRule.

Args:
  name: string, Output only. Resource name for this EventCreateRule resource. Format: properties/{property}/dataStreams/{data_stream}/eventCreateRules/{event_create_rule} (required)
  body: object, The request body.
    The object takes the form of:

{ # An Event Create Rule defines conditions that will trigger the creation of an entirely new event based upon matched criteria of a source event. Additional mutations of the parameters from the source event can be defined. Unlike Event Edit rules, Event Creation Rules have no defined order. They will all be run independently. Event Edit and Event Create rules can&#x27;t be used to modify an event created from an Event Create rule.
  &quot;destinationEvent&quot;: &quot;A String&quot;, # Required. The name of the new event to be created. This value must: * be less than 40 characters * consist only of letters, digits or _ (underscores) * start with a letter
  &quot;eventConditions&quot;: [ # Required. Must have at least one condition, and can have up to 10 max. Conditions on the source event must match for this rule to be applied.
    { # Defines a condition for when an Event Edit or Event Creation rule applies to an event.
      &quot;comparisonType&quot;: &quot;A String&quot;, # Required. The type of comparison to be applied to the value.
      &quot;field&quot;: &quot;A String&quot;, # Required. The name of the field that is compared against for the condition. If &#x27;event_name&#x27; is specified this condition will apply to the name of the event. Otherwise the condition will apply to a parameter with the specified name. This value cannot contain spaces.
      &quot;negated&quot;: True or False, # Whether or not the result of the comparison should be negated. For example, if `negated` is true, then &#x27;equals&#x27; comparisons would function as &#x27;not equals&#x27;.
      &quot;value&quot;: &quot;A String&quot;, # Required. The value being compared against for this condition. The runtime implementation may perform type coercion of this value to evaluate this condition based on the type of the parameter value.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name for this EventCreateRule resource. Format: properties/{property}/dataStreams/{data_stream}/eventCreateRules/{event_create_rule}
  &quot;parameterMutations&quot;: [ # Parameter mutations define parameter behavior on the new event, and are applied in order. A maximum of 20 mutations can be applied.
    { # Defines an event parameter to mutate.
      &quot;parameter&quot;: &quot;A String&quot;, # Required. The name of the parameter to mutate. This value must: * be less than 40 characters. * be unique across across all mutations within the rule * consist only of letters, digits or _ (underscores) For event edit rules, the name may also be set to &#x27;event_name&#x27; to modify the event_name in place.
      &quot;parameterValue&quot;: &quot;A String&quot;, # Required. The value mutation to perform. * Must be less than 100 characters. * To specify a constant value for the param, use the value&#x27;s string. * To copy value from another parameter, use syntax like &quot;[[other_parameter]]&quot; For more details, see this [help center article](https://support.google.com/analytics/answer/10085872#modify-an-event&amp;zippy=%2Cin-this-article%2Cmodify-parameters).
    },
  ],
  &quot;sourceCopyParameters&quot;: True or False, # If true, the source parameters are copied to the new event. If false, or unset, all non-internal parameters are not copied from the source event. Parameter mutations are applied after the parameters have been copied.
}

  updateMask: string, Required. The list of fields to be updated. Field names must be in snake case (e.g., &quot;field_to_update&quot;). Omitted fields will not be updated. To replace the entire entity, use one path with the string &quot;*&quot; to match all fields.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # An Event Create Rule defines conditions that will trigger the creation of an entirely new event based upon matched criteria of a source event. Additional mutations of the parameters from the source event can be defined. Unlike Event Edit rules, Event Creation Rules have no defined order. They will all be run independently. Event Edit and Event Create rules can&#x27;t be used to modify an event created from an Event Create rule.
  &quot;destinationEvent&quot;: &quot;A String&quot;, # Required. The name of the new event to be created. This value must: * be less than 40 characters * consist only of letters, digits or _ (underscores) * start with a letter
  &quot;eventConditions&quot;: [ # Required. Must have at least one condition, and can have up to 10 max. Conditions on the source event must match for this rule to be applied.
    { # Defines a condition for when an Event Edit or Event Creation rule applies to an event.
      &quot;comparisonType&quot;: &quot;A String&quot;, # Required. The type of comparison to be applied to the value.
      &quot;field&quot;: &quot;A String&quot;, # Required. The name of the field that is compared against for the condition. If &#x27;event_name&#x27; is specified this condition will apply to the name of the event. Otherwise the condition will apply to a parameter with the specified name. This value cannot contain spaces.
      &quot;negated&quot;: True or False, # Whether or not the result of the comparison should be negated. For example, if `negated` is true, then &#x27;equals&#x27; comparisons would function as &#x27;not equals&#x27;.
      &quot;value&quot;: &quot;A String&quot;, # Required. The value being compared against for this condition. The runtime implementation may perform type coercion of this value to evaluate this condition based on the type of the parameter value.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name for this EventCreateRule resource. Format: properties/{property}/dataStreams/{data_stream}/eventCreateRules/{event_create_rule}
  &quot;parameterMutations&quot;: [ # Parameter mutations define parameter behavior on the new event, and are applied in order. A maximum of 20 mutations can be applied.
    { # Defines an event parameter to mutate.
      &quot;parameter&quot;: &quot;A String&quot;, # Required. The name of the parameter to mutate. This value must: * be less than 40 characters. * be unique across across all mutations within the rule * consist only of letters, digits or _ (underscores) For event edit rules, the name may also be set to &#x27;event_name&#x27; to modify the event_name in place.
      &quot;parameterValue&quot;: &quot;A String&quot;, # Required. The value mutation to perform. * Must be less than 100 characters. * To specify a constant value for the param, use the value&#x27;s string. * To copy value from another parameter, use syntax like &quot;[[other_parameter]]&quot; For more details, see this [help center article](https://support.google.com/analytics/answer/10085872#modify-an-event&amp;zippy=%2Cin-this-article%2Cmodify-parameters).
    },
  ],
  &quot;sourceCopyParameters&quot;: True or False, # If true, the source parameters are copied to the new event. If false, or unset, all non-internal parameters are not copied from the source event. Parameter mutations are applied after the parameters have been copied.
}</pre>
</div>

</body></html>