<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.eventEditRules.html">eventEditRules</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 EventEditRule.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes an EventEditRule.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Lookup for a single EventEditRule.</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 EventEditRules 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 EventEditRule.</p>
<p class="toc_element">
  <code><a href="#reorder">reorder(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Changes the processing order of event edit rules on the specified stream.</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 EventEditRule.

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

{ # An Event Edit 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 Create rules, Event Edit Rules are applied in their defined order. Event Edit rules can&#x27;t be used to modify an event created from an Event Create rule.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The display name of this event edit rule. Maximum of 255 characters.
  &quot;eventConditions&quot;: [ # Required. Conditions on the source event must match for this rule to be applied. Must have at least one condition, and can have up to 10 max.
    { # 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;, # Identifier. Resource name for this EventEditRule resource. Format: properties/{property}/dataStreams/{data_stream}/eventEditRules/{event_edit_rule}
  &quot;parameterMutations&quot;: [ # Required. 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;processingOrder&quot;: &quot;A String&quot;, # Output only. The order for which this rule will be processed. Rules with an order value lower than this will be processed before this rule, rules with an order value higher than this will be processed after this rule. New event edit rules will be assigned an order value at the end of the order. This value does not apply to event create rules.
}

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

Returns:
  An object of the form:

    { # An Event Edit 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 Create rules, Event Edit Rules are applied in their defined order. Event Edit rules can&#x27;t be used to modify an event created from an Event Create rule.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The display name of this event edit rule. Maximum of 255 characters.
  &quot;eventConditions&quot;: [ # Required. Conditions on the source event must match for this rule to be applied. Must have at least one condition, and can have up to 10 max.
    { # 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;, # Identifier. Resource name for this EventEditRule resource. Format: properties/{property}/dataStreams/{data_stream}/eventEditRules/{event_edit_rule}
  &quot;parameterMutations&quot;: [ # Required. 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;processingOrder&quot;: &quot;A String&quot;, # Output only. The order for which this rule will be processed. Rules with an order value lower than this will be processed before this rule, rules with an order value higher than this will be processed after this rule. New event edit rules will be assigned an order value at the end of the order. This value does not apply to event create rules.
}</pre>
</div>

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

Args:
  name: string, Required. Example format: properties/123/dataStreams/456/eventEditRules/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 EventEditRule.

Args:
  name: string, Required. The name of the EventEditRule to get. Example format: properties/123/dataStreams/456/eventEditRules/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 Edit 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 Create rules, Event Edit Rules are applied in their defined order. Event Edit rules can&#x27;t be used to modify an event created from an Event Create rule.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The display name of this event edit rule. Maximum of 255 characters.
  &quot;eventConditions&quot;: [ # Required. Conditions on the source event must match for this rule to be applied. Must have at least one condition, and can have up to 10 max.
    { # 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;, # Identifier. Resource name for this EventEditRule resource. Format: properties/{property}/dataStreams/{data_stream}/eventEditRules/{event_edit_rule}
  &quot;parameterMutations&quot;: [ # Required. 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;processingOrder&quot;: &quot;A String&quot;, # Output only. The order for which this rule will be processed. Rules with an order value lower than this will be processed before this rule, rules with an order value higher than this will be processed after this rule. New event edit rules will be assigned an order value at the end of the order. This value does not apply to event create rules.
}</pre>
</div>

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

Args:
  parent: string, Required. Example format: properties/123/dataStreams/456 (required)
  pageSize: integer, Optional. 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, Optional. A page token, received from a previous `ListEventEditRules` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListEventEditRules` 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 ListEventEditRules RPC.
  &quot;eventEditRules&quot;: [ # List of EventEditRules. These will be ordered stably, but in an arbitrary order.
    { # An Event Edit 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 Create rules, Event Edit Rules are applied in their defined order. Event Edit rules can&#x27;t be used to modify an event created from an Event Create rule.
      &quot;displayName&quot;: &quot;A String&quot;, # Required. The display name of this event edit rule. Maximum of 255 characters.
      &quot;eventConditions&quot;: [ # Required. Conditions on the source event must match for this rule to be applied. Must have at least one condition, and can have up to 10 max.
        { # 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;, # Identifier. Resource name for this EventEditRule resource. Format: properties/{property}/dataStreams/{data_stream}/eventEditRules/{event_edit_rule}
      &quot;parameterMutations&quot;: [ # Required. 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;processingOrder&quot;: &quot;A String&quot;, # Output only. The order for which this rule will be processed. Rules with an order value lower than this will be processed before this rule, rules with an order value higher than this will be processed after this rule. New event edit rules will be assigned an order value at the end of the order. This value does not apply to event create rules.
    },
  ],
  &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 EventEditRule.

Args:
  name: string, Identifier. Resource name for this EventEditRule resource. Format: properties/{property}/dataStreams/{data_stream}/eventEditRules/{event_edit_rule} (required)
  body: object, The request body.
    The object takes the form of:

{ # An Event Edit 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 Create rules, Event Edit Rules are applied in their defined order. Event Edit rules can&#x27;t be used to modify an event created from an Event Create rule.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The display name of this event edit rule. Maximum of 255 characters.
  &quot;eventConditions&quot;: [ # Required. Conditions on the source event must match for this rule to be applied. Must have at least one condition, and can have up to 10 max.
    { # 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;, # Identifier. Resource name for this EventEditRule resource. Format: properties/{property}/dataStreams/{data_stream}/eventEditRules/{event_edit_rule}
  &quot;parameterMutations&quot;: [ # Required. 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;processingOrder&quot;: &quot;A String&quot;, # Output only. The order for which this rule will be processed. Rules with an order value lower than this will be processed before this rule, rules with an order value higher than this will be processed after this rule. New event edit rules will be assigned an order value at the end of the order. This value does not apply to event create rules.
}

  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 Edit 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 Create rules, Event Edit Rules are applied in their defined order. Event Edit rules can&#x27;t be used to modify an event created from an Event Create rule.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The display name of this event edit rule. Maximum of 255 characters.
  &quot;eventConditions&quot;: [ # Required. Conditions on the source event must match for this rule to be applied. Must have at least one condition, and can have up to 10 max.
    { # 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;, # Identifier. Resource name for this EventEditRule resource. Format: properties/{property}/dataStreams/{data_stream}/eventEditRules/{event_edit_rule}
  &quot;parameterMutations&quot;: [ # Required. 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;processingOrder&quot;: &quot;A String&quot;, # Output only. The order for which this rule will be processed. Rules with an order value lower than this will be processed before this rule, rules with an order value higher than this will be processed after this rule. New event edit rules will be assigned an order value at the end of the order. This value does not apply to event create rules.
}</pre>
</div>

<div class="method">
    <code class="details" id="reorder">reorder(parent, body=None, x__xgafv=None)</code>
  <pre>Changes the processing order of event edit rules on the specified stream.

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

{ # Request message for ReorderEventEditRules RPC.
  &quot;eventEditRules&quot;: [ # Required. EventEditRule resource names for the specified data stream, in the needed processing order. All EventEditRules for the stream must be present in the list.
    &quot;A String&quot;,
  ],
}

  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>

</body></html>