<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="fitness_v1.html">Fitness API</a> . <a href="fitness_v1.users.html">users</a> . <a href="fitness_v1.users.dataSources.html">dataSources</a> . <a href="fitness_v1.users.dataSources.dataPointChanges.html">dataPointChanges</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#list">list(userId, dataSourceId, pageToken=None, limit=None, x__xgafv=None)</a></code></p>
<p class="firstline">Queries for user's data point changes for a particular data source.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="list">list(userId, dataSourceId, pageToken=None, limit=None, x__xgafv=None)</code>
  <pre>Queries for user&#x27;s data point changes for a particular data source.

Args:
  userId: string, List data points for the person identified. Use &lt;code&gt;me&lt;/code&gt; to indicate
the authenticated user. Only &lt;code&gt;me&lt;/code&gt; is supported at this time. (required)
  dataSourceId: string, The data stream ID of the data source that created the dataset. (required)
  pageToken: string, The continuation token, which is used to page through large result sets.
To get the next page of results, set this parameter to the value of
&lt;code&gt;nextPageToken&lt;/code&gt; from the previous response.
  limit: integer, If specified, no more than this many data point changes will be included
in the response.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
    &quot;nextPageToken&quot;: &quot;A String&quot;, # The continuation token, which is used to page through large result sets.
        # Provide this value in a subsequent request to return the next page of
        # results.
    &quot;insertedDataPoint&quot;: [ # Inserted data points for the user.
      { # Represents a single data point, generated by a particular data source.  A
          # data point holds a value for each field, an end timestamp and an optional
          # start time.  The exact semantics of each of these attributes are specified in
          # the documentation for the particular data type.
          #
          # A data point can represent an instantaneous measurement, reading or input
          # observation, as well as averages or aggregates over a time interval.  Check
          # the data type documentation to determine which is the case for a particular
          # data type.
          #
          # Data points always contain one value for each field of the data type.
        &quot;computationTimeMillis&quot;: &quot;A String&quot;, # DO NOT USE THIS FIELD. It is ignored, and not stored.
        &quot;dataTypeName&quot;: &quot;A String&quot;, # The data type defining the format of the values in this data point.
        &quot;endTimeNanos&quot;: &quot;A String&quot;, # The end time of the interval represented by this data point, in
            # nanoseconds since epoch.
        &quot;startTimeNanos&quot;: &quot;A String&quot;, # The start time of the interval represented by this data point, in
            # nanoseconds since epoch.
        &quot;originDataSourceId&quot;: &quot;A String&quot;, # If the data point is contained in a dataset for a derived data source,
            # this field will be populated with the data source stream ID that created
            # the data point originally.
            #
            # WARNING: do not rely on this field for anything other than debugging. The
            # value of this field, if it is set at all, is an implementation detail and
            # is not guaranteed to remain consistent.
        &quot;modifiedTimeMillis&quot;: &quot;A String&quot;, # Indicates the last time this data point was modified. Useful only in
            # contexts where we are listing the data changes, rather than representing
            # the current state of the data.
        &quot;rawTimestampNanos&quot;: &quot;A String&quot;, # The raw timestamp from the original SensorEvent.
        &quot;value&quot;: [ # Values of each data type field for the data point. It is expected that each
            # value corresponding to a data type field will occur in the same order that
            # the field is listed with in the data type specified in a data source.
            #
            # Only one of integer and floating point fields will be populated, depending
            # on the format enum value within data source&#x27;s type field.
          { # Holder object for the value of a single field in a data point.
              #
              # A field value has a particular format and is only ever set to one of an
              # integer or a floating point value.
            &quot;stringVal&quot;: &quot;A String&quot;, # String value.  When this is set, other values must not be set.
                # Strings should be kept small whenever possible.  Data streams with large
                # string values and high data frequency may be down sampled.
            &quot;mapVal&quot;: [ # Map value.  The valid key space and units for the corresponding value
                # of each entry should be documented as part of the data type definition.
                # Keys should be kept small whenever possible. Data streams with large keys
                # and high data frequency may be down sampled.
              {
                &quot;value&quot;: { # Holder object for the value of an entry in a map field of a data point.
                    #
                    # A map value supports a subset of the formats that the regular Value supports.
                  &quot;fpVal&quot;: 3.14, # Floating point value.
                },
                &quot;key&quot;: &quot;A String&quot;,
              },
            ],
            &quot;fpVal&quot;: 3.14, # Floating point value. When this is set, other values must not be set.
            &quot;intVal&quot;: 42, # Integer value. When this is set, other values must not be set.
          },
        ],
      },
    ],
    &quot;deletedDataPoint&quot;: [ # Deleted data points for the user. Note, for modifications this should be
        # parsed before handling insertions.
      { # Represents a single data point, generated by a particular data source.  A
          # data point holds a value for each field, an end timestamp and an optional
          # start time.  The exact semantics of each of these attributes are specified in
          # the documentation for the particular data type.
          #
          # A data point can represent an instantaneous measurement, reading or input
          # observation, as well as averages or aggregates over a time interval.  Check
          # the data type documentation to determine which is the case for a particular
          # data type.
          #
          # Data points always contain one value for each field of the data type.
        &quot;computationTimeMillis&quot;: &quot;A String&quot;, # DO NOT USE THIS FIELD. It is ignored, and not stored.
        &quot;dataTypeName&quot;: &quot;A String&quot;, # The data type defining the format of the values in this data point.
        &quot;endTimeNanos&quot;: &quot;A String&quot;, # The end time of the interval represented by this data point, in
            # nanoseconds since epoch.
        &quot;startTimeNanos&quot;: &quot;A String&quot;, # The start time of the interval represented by this data point, in
            # nanoseconds since epoch.
        &quot;originDataSourceId&quot;: &quot;A String&quot;, # If the data point is contained in a dataset for a derived data source,
            # this field will be populated with the data source stream ID that created
            # the data point originally.
            #
            # WARNING: do not rely on this field for anything other than debugging. The
            # value of this field, if it is set at all, is an implementation detail and
            # is not guaranteed to remain consistent.
        &quot;modifiedTimeMillis&quot;: &quot;A String&quot;, # Indicates the last time this data point was modified. Useful only in
            # contexts where we are listing the data changes, rather than representing
            # the current state of the data.
        &quot;rawTimestampNanos&quot;: &quot;A String&quot;, # The raw timestamp from the original SensorEvent.
        &quot;value&quot;: [ # Values of each data type field for the data point. It is expected that each
            # value corresponding to a data type field will occur in the same order that
            # the field is listed with in the data type specified in a data source.
            #
            # Only one of integer and floating point fields will be populated, depending
            # on the format enum value within data source&#x27;s type field.
          { # Holder object for the value of a single field in a data point.
              #
              # A field value has a particular format and is only ever set to one of an
              # integer or a floating point value.
            &quot;stringVal&quot;: &quot;A String&quot;, # String value.  When this is set, other values must not be set.
                # Strings should be kept small whenever possible.  Data streams with large
                # string values and high data frequency may be down sampled.
            &quot;mapVal&quot;: [ # Map value.  The valid key space and units for the corresponding value
                # of each entry should be documented as part of the data type definition.
                # Keys should be kept small whenever possible. Data streams with large keys
                # and high data frequency may be down sampled.
              {
                &quot;value&quot;: { # Holder object for the value of an entry in a map field of a data point.
                    #
                    # A map value supports a subset of the formats that the regular Value supports.
                  &quot;fpVal&quot;: 3.14, # Floating point value.
                },
                &quot;key&quot;: &quot;A String&quot;,
              },
            ],
            &quot;fpVal&quot;: 3.14, # Floating point value. When this is set, other values must not be set.
            &quot;intVal&quot;: 42, # Integer value. When this is set, other values must not be set.
          },
        ],
      },
    ],
    &quot;dataSourceId&quot;: &quot;A String&quot;, # The data stream ID of the data source with data point changes.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

</body></html>