<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.webDataStreams.html">webDataStreams</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 web stream with the specified location and attributes.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a web stream on a property.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Lookup for a single WebDataStream Throws "Target not found" if no such web data stream found, or if the caller does not have permissions to access it.</p>
<p class="toc_element">
  <code><a href="#getEnhancedMeasurementSettings">getEnhancedMeasurementSettings(name, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the singleton enhanced measurement settings for this web stream. Note that the stream must enable enhanced measurement for these settings to take effect.</p>
<p class="toc_element">
  <code><a href="#getGlobalSiteTag">getGlobalSiteTag(name, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the Site Tag for the specified web stream. Site Tags are immutable singletons.</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 child web data streams under the specified parent property. Web data streams will be excluded if the caller does not have access. Returns an empty list if no relevant web data streams 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>
<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 web stream on a property.</p>
<p class="toc_element">
  <code><a href="#updateEnhancedMeasurementSettings">updateEnhancedMeasurementSettings(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the singleton enhanced measurement settings for this web stream. Note that the stream must enable enhanced measurement for these settings to take effect.</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 web stream with the specified location and attributes.

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

{ # A resource message representing a Google Analytics web stream.
    &quot;measurementId&quot;: &quot;A String&quot;, # Output only. Analytics &quot;Measurement ID&quot;, without the &quot;G-&quot; prefix. Example: &quot;G-1A2BCD345E&quot; would just be &quot;1A2BCD345E&quot;
    &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name of this Data Stream. Format: properties/{property_id}/webDataStreams/{stream_id} Example: &quot;properties/1000/webDataStreams/2000&quot;
    &quot;defaultUri&quot;: &quot;A String&quot;, # Immutable. Domain name of the web app being measured, or empty. Example: &quot;http://www.google.com&quot;, &quot;https://www.google.com&quot;
    &quot;displayName&quot;: &quot;A String&quot;, # Required. Human-readable display name for the Data Stream. The max allowed display name length is 100 UTF-16 code units.
    &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Time when stream payload fields were last updated.
    &quot;firebaseAppId&quot;: &quot;A String&quot;, # Output only. ID of the corresponding web app in Firebase, if any. This ID can change if the web app is deleted and recreated.
    &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time when this stream was originally created.
  }

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

Returns:
  An object of the form:

    { # A resource message representing a Google Analytics web stream.
      &quot;measurementId&quot;: &quot;A String&quot;, # Output only. Analytics &quot;Measurement ID&quot;, without the &quot;G-&quot; prefix. Example: &quot;G-1A2BCD345E&quot; would just be &quot;1A2BCD345E&quot;
      &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name of this Data Stream. Format: properties/{property_id}/webDataStreams/{stream_id} Example: &quot;properties/1000/webDataStreams/2000&quot;
      &quot;defaultUri&quot;: &quot;A String&quot;, # Immutable. Domain name of the web app being measured, or empty. Example: &quot;http://www.google.com&quot;, &quot;https://www.google.com&quot;
      &quot;displayName&quot;: &quot;A String&quot;, # Required. Human-readable display name for the Data Stream. The max allowed display name length is 100 UTF-16 code units.
      &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Time when stream payload fields were last updated.
      &quot;firebaseAppId&quot;: &quot;A String&quot;, # Output only. ID of the corresponding web app in Firebase, if any. This ID can change if the web app is deleted and recreated.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time when this stream was originally created.
    }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes a web stream on a property.

Args:
  name: string, Required. The name of the web data stream to delete. Format: properties/{property_id}/webDataStreams/{stream_id} Example: &quot;properties/123/webDataStreams/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>Lookup for a single WebDataStream Throws &quot;Target not found&quot; if no such web data stream found, or if the caller does not have permissions to access it.

Args:
  name: string, Required. The name of the web data stream to lookup. Format: properties/{property_id}/webDataStreams/{stream_id} Example: &quot;properties/123/webDataStreams/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 resource message representing a Google Analytics web stream.
      &quot;measurementId&quot;: &quot;A String&quot;, # Output only. Analytics &quot;Measurement ID&quot;, without the &quot;G-&quot; prefix. Example: &quot;G-1A2BCD345E&quot; would just be &quot;1A2BCD345E&quot;
      &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name of this Data Stream. Format: properties/{property_id}/webDataStreams/{stream_id} Example: &quot;properties/1000/webDataStreams/2000&quot;
      &quot;defaultUri&quot;: &quot;A String&quot;, # Immutable. Domain name of the web app being measured, or empty. Example: &quot;http://www.google.com&quot;, &quot;https://www.google.com&quot;
      &quot;displayName&quot;: &quot;A String&quot;, # Required. Human-readable display name for the Data Stream. The max allowed display name length is 100 UTF-16 code units.
      &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Time when stream payload fields were last updated.
      &quot;firebaseAppId&quot;: &quot;A String&quot;, # Output only. ID of the corresponding web app in Firebase, if any. This ID can change if the web app is deleted and recreated.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time when this stream was originally created.
    }</pre>
</div>

<div class="method">
    <code class="details" id="getEnhancedMeasurementSettings">getEnhancedMeasurementSettings(name, x__xgafv=None)</code>
  <pre>Returns the singleton enhanced measurement settings for this web stream. Note that the stream must enable enhanced measurement for these settings to take effect.

Args:
  name: string, Required. The name of the settings to lookup. Format: properties/{property_id}/webDataStreams/{stream_id}/enhancedMeasurementSettings Example: &quot;properties/1000/webDataStreams/2000/enhancedMeasurementSettings&quot; (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Singleton resource under a WebDataStream, configuring measurement of additional site interactions and content.
      &quot;searchQueryParameter&quot;: &quot;A String&quot;, # Required. URL query parameters to interpret as site search parameters. Max length is 1024 characters. Must not be empty.
      &quot;productsAndEcommerceEnabled&quot;: True or False, # Capture events when your visitors view content on your site that has product details screens, etc.
      &quot;scrollsEnabled&quot;: True or False, # If enabled, capture scroll events each time a visitor gets to the bottom of a page.
      &quot;outboundClicksEnabled&quot;: True or False, # If enabled, capture an outbound click event each time a visitor clicks a link that leads them away from your domain.
      &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name of this Data Stream. Format: properties/{property_id}/webDataStreams/{stream_id}/enhancedMeasurementSettings Example: &quot;properties/1000/webDataStreams/2000/enhancedMeasurementSettings&quot;
      &quot;pageLoadsEnabled&quot;: True or False, # If enabled, capture a page view event each time a page loads.
      &quot;contentViewsEnabled&quot;: True or False, # Capture events when your visitors view content on your site that has structured data (eg, articles, blog posts, product details screens, etc.).
      &quot;siteSearchEnabled&quot;: True or False, # If enabled, capture a view search results event each time a visitor performs a search on your site (based on a query parameter).
      &quot;videoEngagementEnabled&quot;: True or False, # If enabled, capture video play, progress, and complete events as visitors view embedded videos on your site.
      &quot;dataTaggedElementClicksEnabled&quot;: True or False, # If enabled, capture a click event each time a visitor clicks a link or element that has data attributes beginning with &quot;data-ga&quot;.
      &quot;formInteractionsEnabled&quot;: True or False, # If enabled, capture a view search results event each time a visitor interacts with a form on your site.
      &quot;streamEnabled&quot;: True or False, # Indicates whether Enhanced Measurement Settings will be used to automatically measure interactions and content on this web stream. Changing this value does not affect the settings themselves, but determines whether they are respected.
      &quot;articlesAndBlogsEnabled&quot;: True or False, # Capture events when your visitors view content on your site that has articles or blog posts.
      &quot;pageViewsEnabled&quot;: True or False, # Output only. If enabled, capture a page view event each time a page loads or the website changes the browser history state.
      &quot;fileDownloadsEnabled&quot;: True or False, # If enabled, capture a file download event each time a link is clicked with a common document, compressed file, application, video, or audio extension.
      &quot;pageChangesEnabled&quot;: True or False, # If enabled, capture a page view event each time the website changes the browser history state.
      &quot;excludedDomains&quot;: &quot;A String&quot;, # Domains to exclude from measurement. Max length is 1024 characters.
      &quot;urlQueryParameter&quot;: &quot;A String&quot;, # Additional URL query parameters. Max length is 1024 characters.
    }</pre>
</div>

<div class="method">
    <code class="details" id="getGlobalSiteTag">getGlobalSiteTag(name, x__xgafv=None)</code>
  <pre>Returns the Site Tag for the specified web stream. Site Tags are immutable singletons.

Args:
  name: string, Required. The name of the site tag to lookup. Note that site tags are singletons and do not have unique IDs. Format: properties/{property_id}/webDataStreams/{stream_id}/globalSiteTag Example: &quot;properties/123/webDataStreams/456/globalSiteTag&quot; (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Read-only resource with the tag for sending data from a website to a WebDataStream.
    &quot;snippet&quot;: &quot;A String&quot;, # Immutable. JavaScript code snippet to be pasted as the first item into the head tag of every webpage to measure.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Returns child web data streams under the specified parent property. Web data streams will be excluded if the caller does not have access. Returns an empty list if no relevant web data streams are found.

Args:
  parent: string, Required. The name of the parent property. For example, to list results of web streams under the property with Id 123: &quot;properties/123&quot; (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 `ListWebDataStreams` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListWebDataStreams` 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:

    { # Request message for ListWebDataStreams RPC.
    &quot;webDataStreams&quot;: [ # Results that matched the filter criteria and were accessible to the caller.
      { # A resource message representing a Google Analytics web stream.
          &quot;measurementId&quot;: &quot;A String&quot;, # Output only. Analytics &quot;Measurement ID&quot;, without the &quot;G-&quot; prefix. Example: &quot;G-1A2BCD345E&quot; would just be &quot;1A2BCD345E&quot;
          &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name of this Data Stream. Format: properties/{property_id}/webDataStreams/{stream_id} Example: &quot;properties/1000/webDataStreams/2000&quot;
          &quot;defaultUri&quot;: &quot;A String&quot;, # Immutable. Domain name of the web app being measured, or empty. Example: &quot;http://www.google.com&quot;, &quot;https://www.google.com&quot;
          &quot;displayName&quot;: &quot;A String&quot;, # Required. Human-readable display name for the Data Stream. The max allowed display name length is 100 UTF-16 code units.
          &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Time when stream payload fields were last updated.
          &quot;firebaseAppId&quot;: &quot;A String&quot;, # Output only. ID of the corresponding web app in Firebase, if any. This ID can change if the web app is deleted and recreated.
          &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time when this stream was originally created.
        },
    ],
    &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>

<div class="method">
    <code class="details" id="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates a web stream on a property.

Args:
  name: string, Output only. Resource name of this Data Stream. Format: properties/{property_id}/webDataStreams/{stream_id} Example: &quot;properties/1000/webDataStreams/2000&quot; (required)
  body: object, The request body.
    The object takes the form of:

{ # A resource message representing a Google Analytics web stream.
    &quot;measurementId&quot;: &quot;A String&quot;, # Output only. Analytics &quot;Measurement ID&quot;, without the &quot;G-&quot; prefix. Example: &quot;G-1A2BCD345E&quot; would just be &quot;1A2BCD345E&quot;
    &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name of this Data Stream. Format: properties/{property_id}/webDataStreams/{stream_id} Example: &quot;properties/1000/webDataStreams/2000&quot;
    &quot;defaultUri&quot;: &quot;A String&quot;, # Immutable. Domain name of the web app being measured, or empty. Example: &quot;http://www.google.com&quot;, &quot;https://www.google.com&quot;
    &quot;displayName&quot;: &quot;A String&quot;, # Required. Human-readable display name for the Data Stream. The max allowed display name length is 100 UTF-16 code units.
    &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Time when stream payload fields were last updated.
    &quot;firebaseAppId&quot;: &quot;A String&quot;, # Output only. ID of the corresponding web app in Firebase, if any. This ID can change if the web app is deleted and recreated.
    &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time when this stream was originally created.
  }

  updateMask: string, The list of fields to be updated. Omitted fields will not 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 resource message representing a Google Analytics web stream.
      &quot;measurementId&quot;: &quot;A String&quot;, # Output only. Analytics &quot;Measurement ID&quot;, without the &quot;G-&quot; prefix. Example: &quot;G-1A2BCD345E&quot; would just be &quot;1A2BCD345E&quot;
      &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name of this Data Stream. Format: properties/{property_id}/webDataStreams/{stream_id} Example: &quot;properties/1000/webDataStreams/2000&quot;
      &quot;defaultUri&quot;: &quot;A String&quot;, # Immutable. Domain name of the web app being measured, or empty. Example: &quot;http://www.google.com&quot;, &quot;https://www.google.com&quot;
      &quot;displayName&quot;: &quot;A String&quot;, # Required. Human-readable display name for the Data Stream. The max allowed display name length is 100 UTF-16 code units.
      &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Time when stream payload fields were last updated.
      &quot;firebaseAppId&quot;: &quot;A String&quot;, # Output only. ID of the corresponding web app in Firebase, if any. This ID can change if the web app is deleted and recreated.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time when this stream was originally created.
    }</pre>
</div>

<div class="method">
    <code class="details" id="updateEnhancedMeasurementSettings">updateEnhancedMeasurementSettings(name, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates the singleton enhanced measurement settings for this web stream. Note that the stream must enable enhanced measurement for these settings to take effect.

Args:
  name: string, Output only. Resource name of this Data Stream. Format: properties/{property_id}/webDataStreams/{stream_id}/enhancedMeasurementSettings Example: &quot;properties/1000/webDataStreams/2000/enhancedMeasurementSettings&quot; (required)
  body: object, The request body.
    The object takes the form of:

{ # Singleton resource under a WebDataStream, configuring measurement of additional site interactions and content.
    &quot;searchQueryParameter&quot;: &quot;A String&quot;, # Required. URL query parameters to interpret as site search parameters. Max length is 1024 characters. Must not be empty.
    &quot;productsAndEcommerceEnabled&quot;: True or False, # Capture events when your visitors view content on your site that has product details screens, etc.
    &quot;scrollsEnabled&quot;: True or False, # If enabled, capture scroll events each time a visitor gets to the bottom of a page.
    &quot;outboundClicksEnabled&quot;: True or False, # If enabled, capture an outbound click event each time a visitor clicks a link that leads them away from your domain.
    &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name of this Data Stream. Format: properties/{property_id}/webDataStreams/{stream_id}/enhancedMeasurementSettings Example: &quot;properties/1000/webDataStreams/2000/enhancedMeasurementSettings&quot;
    &quot;pageLoadsEnabled&quot;: True or False, # If enabled, capture a page view event each time a page loads.
    &quot;contentViewsEnabled&quot;: True or False, # Capture events when your visitors view content on your site that has structured data (eg, articles, blog posts, product details screens, etc.).
    &quot;siteSearchEnabled&quot;: True or False, # If enabled, capture a view search results event each time a visitor performs a search on your site (based on a query parameter).
    &quot;videoEngagementEnabled&quot;: True or False, # If enabled, capture video play, progress, and complete events as visitors view embedded videos on your site.
    &quot;dataTaggedElementClicksEnabled&quot;: True or False, # If enabled, capture a click event each time a visitor clicks a link or element that has data attributes beginning with &quot;data-ga&quot;.
    &quot;formInteractionsEnabled&quot;: True or False, # If enabled, capture a view search results event each time a visitor interacts with a form on your site.
    &quot;streamEnabled&quot;: True or False, # Indicates whether Enhanced Measurement Settings will be used to automatically measure interactions and content on this web stream. Changing this value does not affect the settings themselves, but determines whether they are respected.
    &quot;articlesAndBlogsEnabled&quot;: True or False, # Capture events when your visitors view content on your site that has articles or blog posts.
    &quot;pageViewsEnabled&quot;: True or False, # Output only. If enabled, capture a page view event each time a page loads or the website changes the browser history state.
    &quot;fileDownloadsEnabled&quot;: True or False, # If enabled, capture a file download event each time a link is clicked with a common document, compressed file, application, video, or audio extension.
    &quot;pageChangesEnabled&quot;: True or False, # If enabled, capture a page view event each time the website changes the browser history state.
    &quot;excludedDomains&quot;: &quot;A String&quot;, # Domains to exclude from measurement. Max length is 1024 characters.
    &quot;urlQueryParameter&quot;: &quot;A String&quot;, # Additional URL query parameters. Max length is 1024 characters.
  }

  updateMask: string, The list of fields to be updated. Omitted fields will not be updated.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Singleton resource under a WebDataStream, configuring measurement of additional site interactions and content.
      &quot;searchQueryParameter&quot;: &quot;A String&quot;, # Required. URL query parameters to interpret as site search parameters. Max length is 1024 characters. Must not be empty.
      &quot;productsAndEcommerceEnabled&quot;: True or False, # Capture events when your visitors view content on your site that has product details screens, etc.
      &quot;scrollsEnabled&quot;: True or False, # If enabled, capture scroll events each time a visitor gets to the bottom of a page.
      &quot;outboundClicksEnabled&quot;: True or False, # If enabled, capture an outbound click event each time a visitor clicks a link that leads them away from your domain.
      &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name of this Data Stream. Format: properties/{property_id}/webDataStreams/{stream_id}/enhancedMeasurementSettings Example: &quot;properties/1000/webDataStreams/2000/enhancedMeasurementSettings&quot;
      &quot;pageLoadsEnabled&quot;: True or False, # If enabled, capture a page view event each time a page loads.
      &quot;contentViewsEnabled&quot;: True or False, # Capture events when your visitors view content on your site that has structured data (eg, articles, blog posts, product details screens, etc.).
      &quot;siteSearchEnabled&quot;: True or False, # If enabled, capture a view search results event each time a visitor performs a search on your site (based on a query parameter).
      &quot;videoEngagementEnabled&quot;: True or False, # If enabled, capture video play, progress, and complete events as visitors view embedded videos on your site.
      &quot;dataTaggedElementClicksEnabled&quot;: True or False, # If enabled, capture a click event each time a visitor clicks a link or element that has data attributes beginning with &quot;data-ga&quot;.
      &quot;formInteractionsEnabled&quot;: True or False, # If enabled, capture a view search results event each time a visitor interacts with a form on your site.
      &quot;streamEnabled&quot;: True or False, # Indicates whether Enhanced Measurement Settings will be used to automatically measure interactions and content on this web stream. Changing this value does not affect the settings themselves, but determines whether they are respected.
      &quot;articlesAndBlogsEnabled&quot;: True or False, # Capture events when your visitors view content on your site that has articles or blog posts.
      &quot;pageViewsEnabled&quot;: True or False, # Output only. If enabled, capture a page view event each time a page loads or the website changes the browser history state.
      &quot;fileDownloadsEnabled&quot;: True or False, # If enabled, capture a file download event each time a link is clicked with a common document, compressed file, application, video, or audio extension.
      &quot;pageChangesEnabled&quot;: True or False, # If enabled, capture a page view event each time the website changes the browser history state.
      &quot;excludedDomains&quot;: &quot;A String&quot;, # Domains to exclude from measurement. Max length is 1024 characters.
      &quot;urlQueryParameter&quot;: &quot;A String&quot;, # Additional URL query parameters. Max length is 1024 characters.
    }</pre>
</div>

</body></html>