<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.uploads.html">uploads</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#deleteUploadData">deleteUploadData(accountId, webPropertyId, customDataSourceId, body)</a></code></p>
<p class="firstline">Delete data associated with a previous upload.</p>
<p class="toc_element">
  <code><a href="#get">get(accountId, webPropertyId, customDataSourceId, uploadId)</a></code></p>
<p class="firstline">List uploads to which the user has access.</p>
<p class="toc_element">
  <code><a href="#list">list(accountId, webPropertyId, customDataSourceId, max_results=None, start_index=None)</a></code></p>
<p class="firstline">List uploads to which the user has access.</p>
<p class="toc_element">
  <code><a href="#uploadData">uploadData(accountId, webPropertyId, customDataSourceId, media_body=None)</a></code></p>
<p class="firstline">Upload data for a custom data source.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="deleteUploadData">deleteUploadData(accountId, webPropertyId, customDataSourceId, body)</code>
  <pre>Delete data associated with a previous upload.

Args:
  accountId: string, Account Id for the uploads to be deleted. (required)
  webPropertyId: string, Web property Id for the uploads to be deleted. (required)
  customDataSourceId: string, Custom data source Id for the uploads to be deleted. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Request template for the delete upload data request.
    "customDataImportUids": [ # A list of upload UIDs.
      "A String",
    ],
  }

</pre>
</div>

<div class="method">
    <code class="details" id="get">get(accountId, webPropertyId, customDataSourceId, uploadId)</code>
  <pre>List uploads to which the user has access.

Args:
  accountId: string, Account Id for the upload to retrieve. (required)
  webPropertyId: string, Web property Id for the upload to retrieve. (required)
  customDataSourceId: string, Custom data source Id for upload to retrieve. (required)
  uploadId: string, Upload Id to retrieve. (required)

Returns:
  An object of the form:

    { # Metadata returned for an upload operation.
    "status": "A String", # Upload status. Possible values: PENDING, COMPLETED, FAILED, DELETING, DELETED.
    "kind": "analytics#upload", # Resource type for Analytics upload.
    "errors": [ # Data import errors collection.
      "A String",
    ],
    "customDataSourceId": "A String", # Custom data source Id to which this data import belongs.
    "id": "A String", # A unique ID for this upload.
    "accountId": "A String", # Account Id to which this upload belongs.
  }</pre>
</div>

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

Args:
  accountId: string, Account Id for the uploads to retrieve. (required)
  webPropertyId: string, Web property Id for the uploads to retrieve. (required)
  customDataSourceId: string, Custom data source Id for uploads to retrieve. (required)
  max_results: integer, The maximum number of uploads to include in this response.
  start_index: integer, A 1-based index of the first upload to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.

Returns:
  An object of the form:

    { # Upload collection lists Analytics uploads to which the user has access. Each custom data source can have a set of uploads. Each resource in the upload collection corresponds to a single Analytics data upload.
    "kind": "analytics#uploads", # Collection type.
    "items": [ # A list of uploads.
      { # Metadata returned for an upload operation.
        "status": "A String", # Upload status. Possible values: PENDING, COMPLETED, FAILED, DELETING, DELETED.
        "kind": "analytics#upload", # Resource type for Analytics upload.
        "errors": [ # Data import errors collection.
          "A String",
        ],
        "customDataSourceId": "A String", # Custom data source Id to which this data import belongs.
        "id": "A String", # A unique ID for this upload.
        "accountId": "A String", # Account Id to which this upload belongs.
      },
    ],
    "itemsPerPage": 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.
    "previousLink": "A String", # Link to previous page for this upload collection.
    "startIndex": 42, # The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.
    "nextLink": "A String", # Link to next page for this upload collection.
    "totalResults": 42, # The total number of results for the query, regardless of the number of resources in the result.
  }</pre>
</div>

<div class="method">
    <code class="details" id="uploadData">uploadData(accountId, webPropertyId, customDataSourceId, media_body=None)</code>
  <pre>Upload data for a custom data source.

Args:
  accountId: string, Account Id associated with the upload. (required)
  webPropertyId: string, Web property UA-string associated with the upload. (required)
  customDataSourceId: string, Custom data source Id to which the data being uploaded belongs. (required)
  media_body: string, The filename of the media request body, or an instance of a MediaUpload object.

Returns:
  An object of the form:

    { # Metadata returned for an upload operation.
    "status": "A String", # Upload status. Possible values: PENDING, COMPLETED, FAILED, DELETING, DELETED.
    "kind": "analytics#upload", # Resource type for Analytics upload.
    "errors": [ # Data import errors collection.
      "A String",
    ],
    "customDataSourceId": "A String", # Custom data source Id to which this data import belongs.
    "id": "A String", # A unique ID for this upload.
    "accountId": "A String", # Account Id to which this upload belongs.
  }</pre>
</div>

</body></html>