<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;dimensions&quot;: &quot;A String&quot;, # The dimensions for the unsampled report.
    &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;created&quot;: &quot;A String&quot;, # Time this unsampled report was created.
    &quot;filters&quot;: &quot;A String&quot;, # The filters for the unsampled report.
    &quot;status&quot;: &quot;A String&quot;, # Status of this unsampled report. Possible values are PENDING, COMPLETED, or FAILED.
    &quot;id&quot;: &quot;A String&quot;, # Unsampled report ID.
    &quot;cloudStorageDownloadDetails&quot;: { # Download details for a file stored in Google Cloud Storage.
      &quot;objectId&quot;: &quot;A String&quot;, # Id of the file object containing the report data.
      &quot;bucketId&quot;: &quot;A String&quot;, # Id of the bucket the file object is stored in.
    },
    &quot;end-date&quot;: &quot;A String&quot;, # The end date for the unsampled report.
    &quot;accountId&quot;: &quot;A String&quot;, # Account ID to which this unsampled report belongs.
    &quot;updated&quot;: &quot;A String&quot;, # Time this unsampled report was last modified.
    &quot;start-date&quot;: &quot;A String&quot;, # The start date 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;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;title&quot;: &quot;A String&quot;, # Title of the unsampled report.
    &quot;kind&quot;: &quot;analytics#unsampledReport&quot;, # Resource type for an Analytics unsampled report.
    &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;profileId&quot;: &quot;A String&quot;, # View (Profile) ID to which this unsampled report belongs.
    &quot;metrics&quot;: &quot;A String&quot;, # The metrics for the unsampled report.
  }</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;dimensions&quot;: &quot;A String&quot;, # The dimensions for the unsampled report.
  &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;created&quot;: &quot;A String&quot;, # Time this unsampled report was created.
  &quot;filters&quot;: &quot;A String&quot;, # The filters for the unsampled report.
  &quot;status&quot;: &quot;A String&quot;, # Status of this unsampled report. Possible values are PENDING, COMPLETED, or FAILED.
  &quot;id&quot;: &quot;A String&quot;, # Unsampled report ID.
  &quot;cloudStorageDownloadDetails&quot;: { # Download details for a file stored in Google Cloud Storage.
    &quot;objectId&quot;: &quot;A String&quot;, # Id of the file object containing the report data.
    &quot;bucketId&quot;: &quot;A String&quot;, # Id of the bucket the file object is stored in.
  },
  &quot;end-date&quot;: &quot;A String&quot;, # The end date for the unsampled report.
  &quot;accountId&quot;: &quot;A String&quot;, # Account ID to which this unsampled report belongs.
  &quot;updated&quot;: &quot;A String&quot;, # Time this unsampled report was last modified.
  &quot;start-date&quot;: &quot;A String&quot;, # The start date 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;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;title&quot;: &quot;A String&quot;, # Title of the unsampled report.
  &quot;kind&quot;: &quot;analytics#unsampledReport&quot;, # Resource type for an Analytics unsampled report.
  &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;profileId&quot;: &quot;A String&quot;, # View (Profile) ID to which this unsampled report belongs.
  &quot;metrics&quot;: &quot;A String&quot;, # The metrics for the unsampled report.
}


Returns:
  An object of the form:

    { # JSON template for Analytics unsampled report resource.
    &quot;dimensions&quot;: &quot;A String&quot;, # The dimensions for the unsampled report.
    &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;created&quot;: &quot;A String&quot;, # Time this unsampled report was created.
    &quot;filters&quot;: &quot;A String&quot;, # The filters for the unsampled report.
    &quot;status&quot;: &quot;A String&quot;, # Status of this unsampled report. Possible values are PENDING, COMPLETED, or FAILED.
    &quot;id&quot;: &quot;A String&quot;, # Unsampled report ID.
    &quot;cloudStorageDownloadDetails&quot;: { # Download details for a file stored in Google Cloud Storage.
      &quot;objectId&quot;: &quot;A String&quot;, # Id of the file object containing the report data.
      &quot;bucketId&quot;: &quot;A String&quot;, # Id of the bucket the file object is stored in.
    },
    &quot;end-date&quot;: &quot;A String&quot;, # The end date for the unsampled report.
    &quot;accountId&quot;: &quot;A String&quot;, # Account ID to which this unsampled report belongs.
    &quot;updated&quot;: &quot;A String&quot;, # Time this unsampled report was last modified.
    &quot;start-date&quot;: &quot;A String&quot;, # The start date 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;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;title&quot;: &quot;A String&quot;, # Title of the unsampled report.
    &quot;kind&quot;: &quot;analytics#unsampledReport&quot;, # Resource type for an Analytics unsampled report.
    &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;profileId&quot;: &quot;A String&quot;, # View (Profile) ID to which this unsampled report belongs.
    &quot;metrics&quot;: &quot;A String&quot;, # The metrics for the unsampled report.
  }</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;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;username&quot;: &quot;A String&quot;, # Email ID of the authenticated user
    &quot;nextLink&quot;: &quot;A String&quot;, # Link to next page for this unsampled report collection.
    &quot;totalResults&quot;: 42, # The total number of results for the query, regardless of the number of resources in the result.
    &quot;kind&quot;: &quot;analytics#unsampledReports&quot;, # Collection type.
    &quot;items&quot;: [ # A list of unsampled reports.
      { # JSON template for Analytics unsampled report resource.
        &quot;dimensions&quot;: &quot;A String&quot;, # The dimensions for the unsampled report.
        &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;created&quot;: &quot;A String&quot;, # Time this unsampled report was created.
        &quot;filters&quot;: &quot;A String&quot;, # The filters for the unsampled report.
        &quot;status&quot;: &quot;A String&quot;, # Status of this unsampled report. Possible values are PENDING, COMPLETED, or FAILED.
        &quot;id&quot;: &quot;A String&quot;, # Unsampled report ID.
        &quot;cloudStorageDownloadDetails&quot;: { # Download details for a file stored in Google Cloud Storage.
          &quot;objectId&quot;: &quot;A String&quot;, # Id of the file object containing the report data.
          &quot;bucketId&quot;: &quot;A String&quot;, # Id of the bucket the file object is stored in.
        },
        &quot;end-date&quot;: &quot;A String&quot;, # The end date for the unsampled report.
        &quot;accountId&quot;: &quot;A String&quot;, # Account ID to which this unsampled report belongs.
        &quot;updated&quot;: &quot;A String&quot;, # Time this unsampled report was last modified.
        &quot;start-date&quot;: &quot;A String&quot;, # The start date 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;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;title&quot;: &quot;A String&quot;, # Title of the unsampled report.
        &quot;kind&quot;: &quot;analytics#unsampledReport&quot;, # Resource type for an Analytics unsampled report.
        &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;profileId&quot;: &quot;A String&quot;, # View (Profile) ID to which this unsampled report belongs.
        &quot;metrics&quot;: &quot;A String&quot;, # The metrics for the unsampled report.
      },
    ],
    &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.
  }</pre>
</div>

</body></html>