<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, media_mime_type=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, media_mime_type=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.
  media_mime_type: string, The MIME type 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>