<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.unsampledReports.html">unsampledReports</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="#delete">delete(accountId, webPropertyId, profileId, unsampledReportId)</a></code></p>
<p class="firstline">Deletes an unsampled report.</p>
<p class="toc_element">
  <code><a href="#get">get(accountId, webPropertyId, profileId, unsampledReportId)</a></code></p>
<p class="firstline">Returns a single unsampled report.</p>
<p class="toc_element">
  <code><a href="#insert">insert(accountId, webPropertyId, profileId, body=None)</a></code></p>
<p class="firstline">Create a new unsampled report.</p>
<p class="toc_element">
  <code><a href="#list">list(accountId, webPropertyId, profileId, max_results=None, start_index=None)</a></code></p>
<p class="firstline">Lists unsampled reports to which the user has access.</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="delete">delete(accountId, webPropertyId, profileId, unsampledReportId)</code>
  <pre>Deletes an unsampled report.

Args:
  accountId: string, Account ID to delete the unsampled report for. (required)
  webPropertyId: string, Web property ID to delete the unsampled reports for. (required)
  profileId: string, View (Profile) ID to delete the unsampled report for. (required)
  unsampledReportId: string, ID of the unsampled report to be deleted. (required)
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(accountId, webPropertyId, profileId, unsampledReportId)</code>
  <pre>Returns a single unsampled report.

Args:
  accountId: string, Account ID to retrieve unsampled report for. (required)
  webPropertyId: string, Web property ID to retrieve unsampled reports for. (required)
  profileId: string, View (Profile) ID to retrieve unsampled report for. (required)
  unsampledReportId: string, ID of the unsampled report to retrieve. (required)

Returns:
  An object of the form:

    { # JSON template for Analytics unsampled report resource.
  &quot;accountId&quot;: &quot;A String&quot;, # Account ID to which this unsampled report belongs.
  &quot;cloudStorageDownloadDetails&quot;: { # Download details for a file stored in Google Cloud Storage.
    &quot;bucketId&quot;: &quot;A String&quot;, # Id of the bucket the file object is stored in.
    &quot;objectId&quot;: &quot;A String&quot;, # Id of the file object containing the report data.
  },
  &quot;created&quot;: &quot;A String&quot;, # Time this unsampled report was created.
  &quot;dimensions&quot;: &quot;A String&quot;, # The dimensions for the unsampled report.
  &quot;downloadType&quot;: &quot;A String&quot;, # The type of download you need to use for the report data file. Possible values include `GOOGLE_DRIVE` and `GOOGLE_CLOUD_STORAGE`. If the value is `GOOGLE_DRIVE`, see the `driveDownloadDetails` field. If the value is `GOOGLE_CLOUD_STORAGE`, see the `cloudStorageDownloadDetails` field.
  &quot;driveDownloadDetails&quot;: { # Download details for a file stored in Google Drive.
    &quot;documentId&quot;: &quot;A String&quot;, # Id of the document/file containing the report data.
  },
  &quot;end-date&quot;: &quot;A String&quot;, # The end date for the unsampled report.
  &quot;filters&quot;: &quot;A String&quot;, # The filters for the unsampled report.
  &quot;id&quot;: &quot;A String&quot;, # Unsampled report ID.
  &quot;kind&quot;: &quot;analytics#unsampledReport&quot;, # Resource type for an Analytics unsampled report.
  &quot;metrics&quot;: &quot;A String&quot;, # The metrics for the unsampled report.
  &quot;profileId&quot;: &quot;A String&quot;, # View (Profile) ID to which this unsampled report belongs.
  &quot;segment&quot;: &quot;A String&quot;, # The segment for the unsampled report.
  &quot;selfLink&quot;: &quot;A String&quot;, # Link for this unsampled report.
  &quot;start-date&quot;: &quot;A String&quot;, # The start date for the unsampled report.
  &quot;status&quot;: &quot;A String&quot;, # Status of this unsampled report. Possible values are PENDING, COMPLETED, or FAILED.
  &quot;title&quot;: &quot;A String&quot;, # Title of the unsampled report.
  &quot;updated&quot;: &quot;A String&quot;, # Time this unsampled report was last modified.
  &quot;webPropertyId&quot;: &quot;A String&quot;, # Web property ID to which this unsampled report belongs. The web property ID is of the form UA-XXXXX-YY.
}</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(accountId, webPropertyId, profileId, body=None)</code>
  <pre>Create a new unsampled report.

Args:
  accountId: string, Account ID to create the unsampled report for. (required)
  webPropertyId: string, Web property ID to create the unsampled report for. (required)
  profileId: string, View (Profile) ID to create the unsampled report for. (required)
  body: object, The request body.
    The object takes the form of:

{ # JSON template for Analytics unsampled report resource.
  &quot;accountId&quot;: &quot;A String&quot;, # Account ID to which this unsampled report belongs.
  &quot;cloudStorageDownloadDetails&quot;: { # Download details for a file stored in Google Cloud Storage.
    &quot;bucketId&quot;: &quot;A String&quot;, # Id of the bucket the file object is stored in.
    &quot;objectId&quot;: &quot;A String&quot;, # Id of the file object containing the report data.
  },
  &quot;created&quot;: &quot;A String&quot;, # Time this unsampled report was created.
  &quot;dimensions&quot;: &quot;A String&quot;, # The dimensions for the unsampled report.
  &quot;downloadType&quot;: &quot;A String&quot;, # The type of download you need to use for the report data file. Possible values include `GOOGLE_DRIVE` and `GOOGLE_CLOUD_STORAGE`. If the value is `GOOGLE_DRIVE`, see the `driveDownloadDetails` field. If the value is `GOOGLE_CLOUD_STORAGE`, see the `cloudStorageDownloadDetails` field.
  &quot;driveDownloadDetails&quot;: { # Download details for a file stored in Google Drive.
    &quot;documentId&quot;: &quot;A String&quot;, # Id of the document/file containing the report data.
  },
  &quot;end-date&quot;: &quot;A String&quot;, # The end date for the unsampled report.
  &quot;filters&quot;: &quot;A String&quot;, # The filters for the unsampled report.
  &quot;id&quot;: &quot;A String&quot;, # Unsampled report ID.
  &quot;kind&quot;: &quot;analytics#unsampledReport&quot;, # Resource type for an Analytics unsampled report.
  &quot;metrics&quot;: &quot;A String&quot;, # The metrics for the unsampled report.
  &quot;profileId&quot;: &quot;A String&quot;, # View (Profile) ID to which this unsampled report belongs.
  &quot;segment&quot;: &quot;A String&quot;, # The segment for the unsampled report.
  &quot;selfLink&quot;: &quot;A String&quot;, # Link for this unsampled report.
  &quot;start-date&quot;: &quot;A String&quot;, # The start date for the unsampled report.
  &quot;status&quot;: &quot;A String&quot;, # Status of this unsampled report. Possible values are PENDING, COMPLETED, or FAILED.
  &quot;title&quot;: &quot;A String&quot;, # Title of the unsampled report.
  &quot;updated&quot;: &quot;A String&quot;, # Time this unsampled report was last modified.
  &quot;webPropertyId&quot;: &quot;A String&quot;, # Web property ID to which this unsampled report belongs. The web property ID is of the form UA-XXXXX-YY.
}


Returns:
  An object of the form:

    { # JSON template for Analytics unsampled report resource.
  &quot;accountId&quot;: &quot;A String&quot;, # Account ID to which this unsampled report belongs.
  &quot;cloudStorageDownloadDetails&quot;: { # Download details for a file stored in Google Cloud Storage.
    &quot;bucketId&quot;: &quot;A String&quot;, # Id of the bucket the file object is stored in.
    &quot;objectId&quot;: &quot;A String&quot;, # Id of the file object containing the report data.
  },
  &quot;created&quot;: &quot;A String&quot;, # Time this unsampled report was created.
  &quot;dimensions&quot;: &quot;A String&quot;, # The dimensions for the unsampled report.
  &quot;downloadType&quot;: &quot;A String&quot;, # The type of download you need to use for the report data file. Possible values include `GOOGLE_DRIVE` and `GOOGLE_CLOUD_STORAGE`. If the value is `GOOGLE_DRIVE`, see the `driveDownloadDetails` field. If the value is `GOOGLE_CLOUD_STORAGE`, see the `cloudStorageDownloadDetails` field.
  &quot;driveDownloadDetails&quot;: { # Download details for a file stored in Google Drive.
    &quot;documentId&quot;: &quot;A String&quot;, # Id of the document/file containing the report data.
  },
  &quot;end-date&quot;: &quot;A String&quot;, # The end date for the unsampled report.
  &quot;filters&quot;: &quot;A String&quot;, # The filters for the unsampled report.
  &quot;id&quot;: &quot;A String&quot;, # Unsampled report ID.
  &quot;kind&quot;: &quot;analytics#unsampledReport&quot;, # Resource type for an Analytics unsampled report.
  &quot;metrics&quot;: &quot;A String&quot;, # The metrics for the unsampled report.
  &quot;profileId&quot;: &quot;A String&quot;, # View (Profile) ID to which this unsampled report belongs.
  &quot;segment&quot;: &quot;A String&quot;, # The segment for the unsampled report.
  &quot;selfLink&quot;: &quot;A String&quot;, # Link for this unsampled report.
  &quot;start-date&quot;: &quot;A String&quot;, # The start date for the unsampled report.
  &quot;status&quot;: &quot;A String&quot;, # Status of this unsampled report. Possible values are PENDING, COMPLETED, or FAILED.
  &quot;title&quot;: &quot;A String&quot;, # Title of the unsampled report.
  &quot;updated&quot;: &quot;A String&quot;, # Time this unsampled report was last modified.
  &quot;webPropertyId&quot;: &quot;A String&quot;, # Web property ID to which this unsampled report belongs. The web property ID is of the form UA-XXXXX-YY.
}</pre>
</div>

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

Args:
  accountId: string, Account ID to retrieve unsampled reports for. Must be a specific account ID, ~all is not supported. (required)
  webPropertyId: string, Web property ID to retrieve unsampled reports for. Must be a specific web property ID, ~all is not supported. (required)
  profileId: string, View (Profile) ID to retrieve unsampled reports for. Must be a specific view (profile) ID, ~all is not supported. (required)
  max_results: integer, The maximum number of unsampled reports to include in this response.
  start_index: integer, An index of the first unsampled report to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.

Returns:
  An object of the form:

    { # An unsampled report collection lists Analytics unsampled reports to which the user has access. Each view (profile) can have a set of unsampled reports. Each resource in the unsampled report collection corresponds to a single Analytics unsampled report.
  &quot;items&quot;: [ # A list of unsampled reports.
    { # JSON template for Analytics unsampled report resource.
      &quot;accountId&quot;: &quot;A String&quot;, # Account ID to which this unsampled report belongs.
      &quot;cloudStorageDownloadDetails&quot;: { # Download details for a file stored in Google Cloud Storage.
        &quot;bucketId&quot;: &quot;A String&quot;, # Id of the bucket the file object is stored in.
        &quot;objectId&quot;: &quot;A String&quot;, # Id of the file object containing the report data.
      },
      &quot;created&quot;: &quot;A String&quot;, # Time this unsampled report was created.
      &quot;dimensions&quot;: &quot;A String&quot;, # The dimensions for the unsampled report.
      &quot;downloadType&quot;: &quot;A String&quot;, # The type of download you need to use for the report data file. Possible values include `GOOGLE_DRIVE` and `GOOGLE_CLOUD_STORAGE`. If the value is `GOOGLE_DRIVE`, see the `driveDownloadDetails` field. If the value is `GOOGLE_CLOUD_STORAGE`, see the `cloudStorageDownloadDetails` field.
      &quot;driveDownloadDetails&quot;: { # Download details for a file stored in Google Drive.
        &quot;documentId&quot;: &quot;A String&quot;, # Id of the document/file containing the report data.
      },
      &quot;end-date&quot;: &quot;A String&quot;, # The end date for the unsampled report.
      &quot;filters&quot;: &quot;A String&quot;, # The filters for the unsampled report.
      &quot;id&quot;: &quot;A String&quot;, # Unsampled report ID.
      &quot;kind&quot;: &quot;analytics#unsampledReport&quot;, # Resource type for an Analytics unsampled report.
      &quot;metrics&quot;: &quot;A String&quot;, # The metrics for the unsampled report.
      &quot;profileId&quot;: &quot;A String&quot;, # View (Profile) ID to which this unsampled report belongs.
      &quot;segment&quot;: &quot;A String&quot;, # The segment for the unsampled report.
      &quot;selfLink&quot;: &quot;A String&quot;, # Link for this unsampled report.
      &quot;start-date&quot;: &quot;A String&quot;, # The start date for the unsampled report.
      &quot;status&quot;: &quot;A String&quot;, # Status of this unsampled report. Possible values are PENDING, COMPLETED, or FAILED.
      &quot;title&quot;: &quot;A String&quot;, # Title of the unsampled report.
      &quot;updated&quot;: &quot;A String&quot;, # Time this unsampled report was last modified.
      &quot;webPropertyId&quot;: &quot;A String&quot;, # Web property ID to which this unsampled report belongs. The web property ID is of the form UA-XXXXX-YY.
    },
  ],
  &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#unsampledReports&quot;, # Collection type.
  &quot;nextLink&quot;: &quot;A String&quot;, # Link to next page for this unsampled report collection.
  &quot;previousLink&quot;: &quot;A String&quot;, # Link to previous page for this unsampled report collection.
  &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;totalResults&quot;: 42, # The total number of results for the query, regardless of the number of resources in the result.
  &quot;username&quot;: &quot;A String&quot;, # Email ID of the authenticated user
}</pre>
</div>

</body></html>