<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="analytics_v3.html">Google Analytics API</a> . <a href="analytics_v3.management.html">management</a> . <a href="analytics_v3.management.webproperties.html">webproperties</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#get">get(accountId, webPropertyId)</a></code></p>
<p class="firstline">Gets a web property to which the user has access.</p>
<p class="toc_element">
  <code><a href="#insert">insert(accountId, body=None)</a></code></p>
<p class="firstline">Create a new property if the account has fewer than 20 properties. Web properties are visible in the Google Analytics interface only if they have at least one profile.</p>
<p class="toc_element">
  <code><a href="#list">list(accountId, start_index=None, max_results=None)</a></code></p>
<p class="firstline">Lists web properties to which the user has access.</p>
<p class="toc_element">
  <code><a href="#patch">patch(accountId, webPropertyId, body=None)</a></code></p>
<p class="firstline">Updates an existing web property. This method supports patch semantics.</p>
<p class="toc_element">
  <code><a href="#update">update(accountId, webPropertyId, body=None)</a></code></p>
<p class="firstline">Updates an existing web property.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="get">get(accountId, webPropertyId)</code>
  <pre>Gets a web property to which the user has access.

Args:
  accountId: string, Account ID to retrieve the web property for. (required)
  webPropertyId: string, ID to retrieve the web property for. (required)

Returns:
  An object of the form:

    { # JSON template for an Analytics web property.
      &quot;dataRetentionTtl&quot;: &quot;A String&quot;, # The length of time for which user and event data is retained.
          # This property cannot be set on insert.
      &quot;selfLink&quot;: &quot;A String&quot;, # Link for this web property.
      &quot;childLink&quot;: { # Child link for this web property. Points to the list of views (profiles) for this web property.
        &quot;type&quot;: &quot;analytics#profiles&quot;, # Type of the parent link. Its value is &quot;analytics#profiles&quot;.
        &quot;href&quot;: &quot;A String&quot;, # Link to the list of views (profiles) for this web property.
      },
      &quot;permissions&quot;: { # Permissions the user has for this web property.
        &quot;effective&quot;: [ # All the permissions that the user has for this web property. These include any implied permissions (e.g., EDIT implies VIEW) or inherited permissions from the parent account.
          &quot;A String&quot;,
        ],
      },
      &quot;id&quot;: &quot;A String&quot;, # Web property ID of the form UA-XXXXX-YY.
      &quot;kind&quot;: &quot;analytics#webproperty&quot;, # Resource type for Analytics WebProperty.
      &quot;industryVertical&quot;: &quot;A String&quot;, # The industry vertical/category selected for this web property.
      &quot;internalWebPropertyId&quot;: &quot;A String&quot;, # Internal ID for this web property.
      &quot;defaultProfileId&quot;: &quot;A String&quot;, # Default view (profile) ID.
      &quot;parentLink&quot;: { # Parent link for this web property. Points to the account to which this web property belongs.
        &quot;href&quot;: &quot;A String&quot;, # Link to the account for this web property.
        &quot;type&quot;: &quot;analytics#account&quot;, # Type of the parent link. Its value is &quot;analytics#account&quot;.
      },
      &quot;name&quot;: &quot;A String&quot;, # Name of this web property.
      &quot;level&quot;: &quot;A String&quot;, # Level for this web property. Possible values are STANDARD or PREMIUM.
      &quot;dataRetentionResetOnNewActivity&quot;: True or False, # Set to true to reset the retention period of the user identifier with each new event from that user (thus setting the expiration date to current time plus retention period).
          # Set to false to delete data associated with the user identifier automatically after the rentention period.
          # This property cannot be set on insert.
      &quot;starred&quot;: True or False, # Indicates whether this web property is starred or not.
      &quot;created&quot;: &quot;A String&quot;, # Time this web property was created.
      &quot;updated&quot;: &quot;A String&quot;, # Time this web property was last modified.
      &quot;websiteUrl&quot;: &quot;A String&quot;, # Website url for this web property.
      &quot;profileCount&quot;: 42, # View (Profile) count for this web property.
      &quot;accountId&quot;: &quot;A String&quot;, # Account ID to which this web property belongs.
    }</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(accountId, body=None)</code>
  <pre>Create a new property if the account has fewer than 20 properties. Web properties are visible in the Google Analytics interface only if they have at least one profile.

Args:
  accountId: string, Account ID to create the web property for. (required)
  body: object, The request body.
    The object takes the form of:

{ # JSON template for an Analytics web property.
    &quot;dataRetentionTtl&quot;: &quot;A String&quot;, # The length of time for which user and event data is retained.
        # This property cannot be set on insert.
    &quot;selfLink&quot;: &quot;A String&quot;, # Link for this web property.
    &quot;childLink&quot;: { # Child link for this web property. Points to the list of views (profiles) for this web property.
      &quot;type&quot;: &quot;analytics#profiles&quot;, # Type of the parent link. Its value is &quot;analytics#profiles&quot;.
      &quot;href&quot;: &quot;A String&quot;, # Link to the list of views (profiles) for this web property.
    },
    &quot;permissions&quot;: { # Permissions the user has for this web property.
      &quot;effective&quot;: [ # All the permissions that the user has for this web property. These include any implied permissions (e.g., EDIT implies VIEW) or inherited permissions from the parent account.
        &quot;A String&quot;,
      ],
    },
    &quot;id&quot;: &quot;A String&quot;, # Web property ID of the form UA-XXXXX-YY.
    &quot;kind&quot;: &quot;analytics#webproperty&quot;, # Resource type for Analytics WebProperty.
    &quot;industryVertical&quot;: &quot;A String&quot;, # The industry vertical/category selected for this web property.
    &quot;internalWebPropertyId&quot;: &quot;A String&quot;, # Internal ID for this web property.
    &quot;defaultProfileId&quot;: &quot;A String&quot;, # Default view (profile) ID.
    &quot;parentLink&quot;: { # Parent link for this web property. Points to the account to which this web property belongs.
      &quot;href&quot;: &quot;A String&quot;, # Link to the account for this web property.
      &quot;type&quot;: &quot;analytics#account&quot;, # Type of the parent link. Its value is &quot;analytics#account&quot;.
    },
    &quot;name&quot;: &quot;A String&quot;, # Name of this web property.
    &quot;level&quot;: &quot;A String&quot;, # Level for this web property. Possible values are STANDARD or PREMIUM.
    &quot;dataRetentionResetOnNewActivity&quot;: True or False, # Set to true to reset the retention period of the user identifier with each new event from that user (thus setting the expiration date to current time plus retention period).
        # Set to false to delete data associated with the user identifier automatically after the rentention period.
        # This property cannot be set on insert.
    &quot;starred&quot;: True or False, # Indicates whether this web property is starred or not.
    &quot;created&quot;: &quot;A String&quot;, # Time this web property was created.
    &quot;updated&quot;: &quot;A String&quot;, # Time this web property was last modified.
    &quot;websiteUrl&quot;: &quot;A String&quot;, # Website url for this web property.
    &quot;profileCount&quot;: 42, # View (Profile) count for this web property.
    &quot;accountId&quot;: &quot;A String&quot;, # Account ID to which this web property belongs.
  }


Returns:
  An object of the form:

    { # JSON template for an Analytics web property.
      &quot;dataRetentionTtl&quot;: &quot;A String&quot;, # The length of time for which user and event data is retained.
          # This property cannot be set on insert.
      &quot;selfLink&quot;: &quot;A String&quot;, # Link for this web property.
      &quot;childLink&quot;: { # Child link for this web property. Points to the list of views (profiles) for this web property.
        &quot;type&quot;: &quot;analytics#profiles&quot;, # Type of the parent link. Its value is &quot;analytics#profiles&quot;.
        &quot;href&quot;: &quot;A String&quot;, # Link to the list of views (profiles) for this web property.
      },
      &quot;permissions&quot;: { # Permissions the user has for this web property.
        &quot;effective&quot;: [ # All the permissions that the user has for this web property. These include any implied permissions (e.g., EDIT implies VIEW) or inherited permissions from the parent account.
          &quot;A String&quot;,
        ],
      },
      &quot;id&quot;: &quot;A String&quot;, # Web property ID of the form UA-XXXXX-YY.
      &quot;kind&quot;: &quot;analytics#webproperty&quot;, # Resource type for Analytics WebProperty.
      &quot;industryVertical&quot;: &quot;A String&quot;, # The industry vertical/category selected for this web property.
      &quot;internalWebPropertyId&quot;: &quot;A String&quot;, # Internal ID for this web property.
      &quot;defaultProfileId&quot;: &quot;A String&quot;, # Default view (profile) ID.
      &quot;parentLink&quot;: { # Parent link for this web property. Points to the account to which this web property belongs.
        &quot;href&quot;: &quot;A String&quot;, # Link to the account for this web property.
        &quot;type&quot;: &quot;analytics#account&quot;, # Type of the parent link. Its value is &quot;analytics#account&quot;.
      },
      &quot;name&quot;: &quot;A String&quot;, # Name of this web property.
      &quot;level&quot;: &quot;A String&quot;, # Level for this web property. Possible values are STANDARD or PREMIUM.
      &quot;dataRetentionResetOnNewActivity&quot;: True or False, # Set to true to reset the retention period of the user identifier with each new event from that user (thus setting the expiration date to current time plus retention period).
          # Set to false to delete data associated with the user identifier automatically after the rentention period.
          # This property cannot be set on insert.
      &quot;starred&quot;: True or False, # Indicates whether this web property is starred or not.
      &quot;created&quot;: &quot;A String&quot;, # Time this web property was created.
      &quot;updated&quot;: &quot;A String&quot;, # Time this web property was last modified.
      &quot;websiteUrl&quot;: &quot;A String&quot;, # Website url for this web property.
      &quot;profileCount&quot;: 42, # View (Profile) count for this web property.
      &quot;accountId&quot;: &quot;A String&quot;, # Account ID to which this web property belongs.
    }</pre>
</div>

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

Args:
  accountId: string, Account ID to retrieve web properties for. Can either be a specific account ID or &#x27;~all&#x27;, which refers to all the accounts that user has access to. (required)
  start_index: integer, An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.
  max_results: integer, The maximum number of web properties to include in this response.

Returns:
  An object of the form:

    { # A web property collection lists Analytics web properties to which the user has access. Each resource in the collection corresponds to a single Analytics web property.
    &quot;itemsPerPage&quot;: 42, # The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.
    &quot;kind&quot;: &quot;analytics#webproperties&quot;, # Collection type.
    &quot;previousLink&quot;: &quot;A String&quot;, # Link to previous page for this web property collection.
    &quot;items&quot;: [ # A list of web properties.
      { # JSON template for an Analytics web property.
          &quot;dataRetentionTtl&quot;: &quot;A String&quot;, # The length of time for which user and event data is retained.
              # This property cannot be set on insert.
          &quot;selfLink&quot;: &quot;A String&quot;, # Link for this web property.
          &quot;childLink&quot;: { # Child link for this web property. Points to the list of views (profiles) for this web property.
            &quot;type&quot;: &quot;analytics#profiles&quot;, # Type of the parent link. Its value is &quot;analytics#profiles&quot;.
            &quot;href&quot;: &quot;A String&quot;, # Link to the list of views (profiles) for this web property.
          },
          &quot;permissions&quot;: { # Permissions the user has for this web property.
            &quot;effective&quot;: [ # All the permissions that the user has for this web property. These include any implied permissions (e.g., EDIT implies VIEW) or inherited permissions from the parent account.
              &quot;A String&quot;,
            ],
          },
          &quot;id&quot;: &quot;A String&quot;, # Web property ID of the form UA-XXXXX-YY.
          &quot;kind&quot;: &quot;analytics#webproperty&quot;, # Resource type for Analytics WebProperty.
          &quot;industryVertical&quot;: &quot;A String&quot;, # The industry vertical/category selected for this web property.
          &quot;internalWebPropertyId&quot;: &quot;A String&quot;, # Internal ID for this web property.
          &quot;defaultProfileId&quot;: &quot;A String&quot;, # Default view (profile) ID.
          &quot;parentLink&quot;: { # Parent link for this web property. Points to the account to which this web property belongs.
            &quot;href&quot;: &quot;A String&quot;, # Link to the account for this web property.
            &quot;type&quot;: &quot;analytics#account&quot;, # Type of the parent link. Its value is &quot;analytics#account&quot;.
          },
          &quot;name&quot;: &quot;A String&quot;, # Name of this web property.
          &quot;level&quot;: &quot;A String&quot;, # Level for this web property. Possible values are STANDARD or PREMIUM.
          &quot;dataRetentionResetOnNewActivity&quot;: True or False, # Set to true to reset the retention period of the user identifier with each new event from that user (thus setting the expiration date to current time plus retention period).
              # Set to false to delete data associated with the user identifier automatically after the rentention period.
              # This property cannot be set on insert.
          &quot;starred&quot;: True or False, # Indicates whether this web property is starred or not.
          &quot;created&quot;: &quot;A String&quot;, # Time this web property was created.
          &quot;updated&quot;: &quot;A String&quot;, # Time this web property was last modified.
          &quot;websiteUrl&quot;: &quot;A String&quot;, # Website url for this web property.
          &quot;profileCount&quot;: 42, # View (Profile) count for this web property.
          &quot;accountId&quot;: &quot;A String&quot;, # Account ID to which this web property belongs.
        },
    ],
    &quot;startIndex&quot;: 42, # The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.
    &quot;nextLink&quot;: &quot;A String&quot;, # Link to next page for this web property collection.
    &quot;totalResults&quot;: 42, # The total number of results for the query, regardless of the number of results in the response.
    &quot;username&quot;: &quot;A String&quot;, # Email ID of the authenticated user
  }</pre>
</div>

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

Args:
  accountId: string, Account ID to which the web property belongs (required)
  webPropertyId: string, Web property ID (required)
  body: object, The request body.
    The object takes the form of:

{ # JSON template for an Analytics web property.
    &quot;dataRetentionTtl&quot;: &quot;A String&quot;, # The length of time for which user and event data is retained.
        # This property cannot be set on insert.
    &quot;selfLink&quot;: &quot;A String&quot;, # Link for this web property.
    &quot;childLink&quot;: { # Child link for this web property. Points to the list of views (profiles) for this web property.
      &quot;type&quot;: &quot;analytics#profiles&quot;, # Type of the parent link. Its value is &quot;analytics#profiles&quot;.
      &quot;href&quot;: &quot;A String&quot;, # Link to the list of views (profiles) for this web property.
    },
    &quot;permissions&quot;: { # Permissions the user has for this web property.
      &quot;effective&quot;: [ # All the permissions that the user has for this web property. These include any implied permissions (e.g., EDIT implies VIEW) or inherited permissions from the parent account.
        &quot;A String&quot;,
      ],
    },
    &quot;id&quot;: &quot;A String&quot;, # Web property ID of the form UA-XXXXX-YY.
    &quot;kind&quot;: &quot;analytics#webproperty&quot;, # Resource type for Analytics WebProperty.
    &quot;industryVertical&quot;: &quot;A String&quot;, # The industry vertical/category selected for this web property.
    &quot;internalWebPropertyId&quot;: &quot;A String&quot;, # Internal ID for this web property.
    &quot;defaultProfileId&quot;: &quot;A String&quot;, # Default view (profile) ID.
    &quot;parentLink&quot;: { # Parent link for this web property. Points to the account to which this web property belongs.
      &quot;href&quot;: &quot;A String&quot;, # Link to the account for this web property.
      &quot;type&quot;: &quot;analytics#account&quot;, # Type of the parent link. Its value is &quot;analytics#account&quot;.
    },
    &quot;name&quot;: &quot;A String&quot;, # Name of this web property.
    &quot;level&quot;: &quot;A String&quot;, # Level for this web property. Possible values are STANDARD or PREMIUM.
    &quot;dataRetentionResetOnNewActivity&quot;: True or False, # Set to true to reset the retention period of the user identifier with each new event from that user (thus setting the expiration date to current time plus retention period).
        # Set to false to delete data associated with the user identifier automatically after the rentention period.
        # This property cannot be set on insert.
    &quot;starred&quot;: True or False, # Indicates whether this web property is starred or not.
    &quot;created&quot;: &quot;A String&quot;, # Time this web property was created.
    &quot;updated&quot;: &quot;A String&quot;, # Time this web property was last modified.
    &quot;websiteUrl&quot;: &quot;A String&quot;, # Website url for this web property.
    &quot;profileCount&quot;: 42, # View (Profile) count for this web property.
    &quot;accountId&quot;: &quot;A String&quot;, # Account ID to which this web property belongs.
  }


Returns:
  An object of the form:

    { # JSON template for an Analytics web property.
      &quot;dataRetentionTtl&quot;: &quot;A String&quot;, # The length of time for which user and event data is retained.
          # This property cannot be set on insert.
      &quot;selfLink&quot;: &quot;A String&quot;, # Link for this web property.
      &quot;childLink&quot;: { # Child link for this web property. Points to the list of views (profiles) for this web property.
        &quot;type&quot;: &quot;analytics#profiles&quot;, # Type of the parent link. Its value is &quot;analytics#profiles&quot;.
        &quot;href&quot;: &quot;A String&quot;, # Link to the list of views (profiles) for this web property.
      },
      &quot;permissions&quot;: { # Permissions the user has for this web property.
        &quot;effective&quot;: [ # All the permissions that the user has for this web property. These include any implied permissions (e.g., EDIT implies VIEW) or inherited permissions from the parent account.
          &quot;A String&quot;,
        ],
      },
      &quot;id&quot;: &quot;A String&quot;, # Web property ID of the form UA-XXXXX-YY.
      &quot;kind&quot;: &quot;analytics#webproperty&quot;, # Resource type for Analytics WebProperty.
      &quot;industryVertical&quot;: &quot;A String&quot;, # The industry vertical/category selected for this web property.
      &quot;internalWebPropertyId&quot;: &quot;A String&quot;, # Internal ID for this web property.
      &quot;defaultProfileId&quot;: &quot;A String&quot;, # Default view (profile) ID.
      &quot;parentLink&quot;: { # Parent link for this web property. Points to the account to which this web property belongs.
        &quot;href&quot;: &quot;A String&quot;, # Link to the account for this web property.
        &quot;type&quot;: &quot;analytics#account&quot;, # Type of the parent link. Its value is &quot;analytics#account&quot;.
      },
      &quot;name&quot;: &quot;A String&quot;, # Name of this web property.
      &quot;level&quot;: &quot;A String&quot;, # Level for this web property. Possible values are STANDARD or PREMIUM.
      &quot;dataRetentionResetOnNewActivity&quot;: True or False, # Set to true to reset the retention period of the user identifier with each new event from that user (thus setting the expiration date to current time plus retention period).
          # Set to false to delete data associated with the user identifier automatically after the rentention period.
          # This property cannot be set on insert.
      &quot;starred&quot;: True or False, # Indicates whether this web property is starred or not.
      &quot;created&quot;: &quot;A String&quot;, # Time this web property was created.
      &quot;updated&quot;: &quot;A String&quot;, # Time this web property was last modified.
      &quot;websiteUrl&quot;: &quot;A String&quot;, # Website url for this web property.
      &quot;profileCount&quot;: 42, # View (Profile) count for this web property.
      &quot;accountId&quot;: &quot;A String&quot;, # Account ID to which this web property belongs.
    }</pre>
</div>

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

Args:
  accountId: string, Account ID to which the web property belongs (required)
  webPropertyId: string, Web property ID (required)
  body: object, The request body.
    The object takes the form of:

{ # JSON template for an Analytics web property.
    &quot;dataRetentionTtl&quot;: &quot;A String&quot;, # The length of time for which user and event data is retained.
        # This property cannot be set on insert.
    &quot;selfLink&quot;: &quot;A String&quot;, # Link for this web property.
    &quot;childLink&quot;: { # Child link for this web property. Points to the list of views (profiles) for this web property.
      &quot;type&quot;: &quot;analytics#profiles&quot;, # Type of the parent link. Its value is &quot;analytics#profiles&quot;.
      &quot;href&quot;: &quot;A String&quot;, # Link to the list of views (profiles) for this web property.
    },
    &quot;permissions&quot;: { # Permissions the user has for this web property.
      &quot;effective&quot;: [ # All the permissions that the user has for this web property. These include any implied permissions (e.g., EDIT implies VIEW) or inherited permissions from the parent account.
        &quot;A String&quot;,
      ],
    },
    &quot;id&quot;: &quot;A String&quot;, # Web property ID of the form UA-XXXXX-YY.
    &quot;kind&quot;: &quot;analytics#webproperty&quot;, # Resource type for Analytics WebProperty.
    &quot;industryVertical&quot;: &quot;A String&quot;, # The industry vertical/category selected for this web property.
    &quot;internalWebPropertyId&quot;: &quot;A String&quot;, # Internal ID for this web property.
    &quot;defaultProfileId&quot;: &quot;A String&quot;, # Default view (profile) ID.
    &quot;parentLink&quot;: { # Parent link for this web property. Points to the account to which this web property belongs.
      &quot;href&quot;: &quot;A String&quot;, # Link to the account for this web property.
      &quot;type&quot;: &quot;analytics#account&quot;, # Type of the parent link. Its value is &quot;analytics#account&quot;.
    },
    &quot;name&quot;: &quot;A String&quot;, # Name of this web property.
    &quot;level&quot;: &quot;A String&quot;, # Level for this web property. Possible values are STANDARD or PREMIUM.
    &quot;dataRetentionResetOnNewActivity&quot;: True or False, # Set to true to reset the retention period of the user identifier with each new event from that user (thus setting the expiration date to current time plus retention period).
        # Set to false to delete data associated with the user identifier automatically after the rentention period.
        # This property cannot be set on insert.
    &quot;starred&quot;: True or False, # Indicates whether this web property is starred or not.
    &quot;created&quot;: &quot;A String&quot;, # Time this web property was created.
    &quot;updated&quot;: &quot;A String&quot;, # Time this web property was last modified.
    &quot;websiteUrl&quot;: &quot;A String&quot;, # Website url for this web property.
    &quot;profileCount&quot;: 42, # View (Profile) count for this web property.
    &quot;accountId&quot;: &quot;A String&quot;, # Account ID to which this web property belongs.
  }


Returns:
  An object of the form:

    { # JSON template for an Analytics web property.
      &quot;dataRetentionTtl&quot;: &quot;A String&quot;, # The length of time for which user and event data is retained.
          # This property cannot be set on insert.
      &quot;selfLink&quot;: &quot;A String&quot;, # Link for this web property.
      &quot;childLink&quot;: { # Child link for this web property. Points to the list of views (profiles) for this web property.
        &quot;type&quot;: &quot;analytics#profiles&quot;, # Type of the parent link. Its value is &quot;analytics#profiles&quot;.
        &quot;href&quot;: &quot;A String&quot;, # Link to the list of views (profiles) for this web property.
      },
      &quot;permissions&quot;: { # Permissions the user has for this web property.
        &quot;effective&quot;: [ # All the permissions that the user has for this web property. These include any implied permissions (e.g., EDIT implies VIEW) or inherited permissions from the parent account.
          &quot;A String&quot;,
        ],
      },
      &quot;id&quot;: &quot;A String&quot;, # Web property ID of the form UA-XXXXX-YY.
      &quot;kind&quot;: &quot;analytics#webproperty&quot;, # Resource type for Analytics WebProperty.
      &quot;industryVertical&quot;: &quot;A String&quot;, # The industry vertical/category selected for this web property.
      &quot;internalWebPropertyId&quot;: &quot;A String&quot;, # Internal ID for this web property.
      &quot;defaultProfileId&quot;: &quot;A String&quot;, # Default view (profile) ID.
      &quot;parentLink&quot;: { # Parent link for this web property. Points to the account to which this web property belongs.
        &quot;href&quot;: &quot;A String&quot;, # Link to the account for this web property.
        &quot;type&quot;: &quot;analytics#account&quot;, # Type of the parent link. Its value is &quot;analytics#account&quot;.
      },
      &quot;name&quot;: &quot;A String&quot;, # Name of this web property.
      &quot;level&quot;: &quot;A String&quot;, # Level for this web property. Possible values are STANDARD or PREMIUM.
      &quot;dataRetentionResetOnNewActivity&quot;: True or False, # Set to true to reset the retention period of the user identifier with each new event from that user (thus setting the expiration date to current time plus retention period).
          # Set to false to delete data associated with the user identifier automatically after the rentention period.
          # This property cannot be set on insert.
      &quot;starred&quot;: True or False, # Indicates whether this web property is starred or not.
      &quot;created&quot;: &quot;A String&quot;, # Time this web property was created.
      &quot;updated&quot;: &quot;A String&quot;, # Time this web property was last modified.
      &quot;websiteUrl&quot;: &quot;A String&quot;, # Website url for this web property.
      &quot;profileCount&quot;: 42, # View (Profile) count for this web property.
      &quot;accountId&quot;: &quot;A String&quot;, # Account ID to which this web property belongs.
    }</pre>
</div>

</body></html>