<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></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="fitness_v1.users.dataSources.dataPointChanges.html">dataPointChanges()</a></code>
</p>
<p class="firstline">Returns the dataPointChanges Resource.</p>

<p class="toc_element">
  <code><a href="fitness_v1.users.dataSources.datasets.html">datasets()</a></code>
</p>
<p class="firstline">Returns the datasets Resource.</p>

<p class="toc_element">
  <code><a href="#create">create(userId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new data source that is unique across all data sources belonging</p>
<p class="toc_element">
  <code><a href="#delete">delete(userId, dataSourceId, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes the specified data source. The request will fail if the data</p>
<p class="toc_element">
  <code><a href="#get">get(userId, dataSourceId, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the specified data source.</p>
<p class="toc_element">
  <code><a href="#list">list(userId, dataTypeName=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists all data sources that are visible to the developer, using the OAuth</p>
<p class="toc_element">
  <code><a href="#update">update(userId, dataSourceId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the specified data source. The <code>dataStreamId</code>,</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(userId, body=None, x__xgafv=None)</code>
  <pre>Creates a new data source that is unique across all data sources belonging
to this user.

A data source is a unique source of sensor data. Data sources can expose
raw data coming from hardware sensors on local or companion devices. They
can also expose derived data, created by transforming or merging other data
sources. Multiple data sources can exist for the same data type. Every data
point in every dataset inserted into or read from the Fitness API has an
associated data source.

Each data source produces a unique stream of dataset updates, with a
unique data source identifier. Not all changes to data source affect the
data stream ID, so that data collected by updated versions of the same
application/device can still be considered to belong to the same data
source.

Data sources are identified using a string generated by the server, based
on the contents of the source being created. The &lt;code&gt;dataStreamId&lt;/code&gt;
field should not be set when invoking this method. It
will be automatically generated by the server with the correct format. If
a &lt;code&gt;dataStreamId&lt;/code&gt; is set, it must match the format that the
server would generate. This format is a combination of some fields from the
data source, and has a specific order. If it doesn&#x27;t match, the request
will fail with an error.

Specifying a DataType which is not a known type (beginning with
&quot;com.google.&quot;) will create a DataSource with a &lt;em&gt;custom data type&lt;/em&gt;.
Custom data types are only readable by the application that created them.
Custom data types are &lt;strong&gt;deprecated&lt;/strong&gt;; use standard data types
instead.

In addition to the data source fields included in the data source ID, the
developer project number that is authenticated when creating the data
source is included. This developer project number is obfuscated when read
by any other developer reading public data types.

Args:
  userId: string, Create the data source 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)
  body: object, The request body.
    The object takes the form of:

{ # Definition of a unique source of sensor data.  Data sources can expose raw
      # data coming from hardware sensors on local or companion devices. They can
      # also expose derived data, created by transforming or merging other data
      # sources. Multiple data sources can exist for the same data type. Every data
      # point inserted into or read from this service has an associated data
      # source.
      # 
      # The data source contains enough information to uniquely identify its data,
      # including the hardware device and the application that collected and/or
      # transformed the data. It also holds useful metadata, such as the hardware and
      # application versions, and the device type.
      # 
      # Each data source produces a unique stream of data, with a unique identifier.
      # Not all changes to data source affect the stream identifier, so that data
      # collected by updated versions of the same application/device can still be
      # considered to belong to the same data stream.
    &quot;dataQualityStandard&quot;: [ # DO NOT POPULATE THIS FIELD. It is never populated in responses from the
        # platform, and is ignored in queries. It will be removed in a future version
        # entirely.
      &quot;A String&quot;,
    ],
    &quot;type&quot;: &quot;A String&quot;, # A constant describing the type of this data source. Indicates whether this
        # data source produces raw or derived data.
    &quot;dataStreamName&quot;: &quot;A String&quot;, # The stream name uniquely identifies this particular data source among
        # other data sources of the same type from the same underlying producer.
        # Setting the stream name is optional, but should be done whenever an
        # application exposes two streams for the same data type, or when a device
        # has two equivalent sensors.
    &quot;dataStreamId&quot;: &quot;A String&quot;, # A unique identifier for the data stream produced by this data source. The
        # identifier includes:&lt;br/&gt;&lt;br/&gt;
        # &lt;ul&gt;
        # &lt;li&gt;The physical device&#x27;s manufacturer, model, and serial number
        # (UID).&lt;/li&gt;
        # &lt;li&gt;The application&#x27;s package name or name. Package name is used when the
        # data source was created by an Android application. The developer project
        # number is used when the data source was created by a REST client.&lt;/li&gt;
        # &lt;li&gt;The data source&#x27;s type.&lt;/li&gt;
        # &lt;li&gt;The data source&#x27;s stream name.&lt;/li&gt;
        # &lt;/ul&gt;
        # Note that not all attributes of the data source are used as part of the
        # stream identifier. In particular, the version of the hardware/the
        # application isn&#x27;t used. This allows us to preserve the same stream through
        # version updates. This also means that two DataSource objects may represent
        # the same data stream even if they&#x27;re not equal.
        # 
        # The exact format of the data stream ID created by an Android application
        # is:
        # &lt;var&gt;type:dataType.name&lt;wbr/&gt;:application.packageName&lt;wbr/&gt;:device.manufacturer&lt;wbr/&gt;:device.model&lt;wbr/&gt;:device.uid&lt;wbr/&gt;:dataStreamName&lt;/var&gt;
        # 
        # The exact format of the data stream ID created by a REST client is:
        # &lt;var&gt;type:dataType.name&lt;wbr/&gt;:developer project
        # number&lt;wbr/&gt;:device.manufacturer&lt;wbr/&gt;:device.model:device.uid&lt;wbr/&gt;:dataStreamName&lt;/var&gt;
        # 
        # When any of the optional fields that make up the data stream ID are absent,
        # they will be omitted from the data stream ID. The minimum viable data
        # stream ID would be:
        # type:dataType.name:developer project number
        # 
        # Finally, the developer project number and device UID are obfuscated when
        # read by any REST or Android client that did not create the data source.
        # Only the data source creator will see the developer project number in clear
        # and normal form. This means a client will see a different set of
        # data_stream_ids than another client with different credentials.
    &quot;device&quot;: { # Representation of an integrated device (such as a phone or a wearable) that # Representation of an integrated device (such as a phone or a wearable) that
        # can hold sensors.
        # can hold sensors. Each sensor is exposed as a data source.
        #
        # The main purpose of the device information contained in this class is to
        # identify the hardware of a particular data source.  This can be useful in
        # different ways, including:
        # &lt;ul&gt;
        #   &lt;li&gt;Distinguishing two similar sensors on different devices (the step
        #       counter on two nexus 5 phones, for instance)
        #   &lt;li&gt;Display the source of data to the user (by using the device make /
        #       model)
        #   &lt;li&gt;Treat data differently depending on sensor type (accelerometers on a
        #       watch may give different patterns than those on a phone)
        #   &lt;li&gt;Build different analysis models for each device/version.
        # &lt;/ul&gt;
      &quot;uid&quot;: &quot;A String&quot;, # The serial number or other unique ID for the hardware. This field is
          # obfuscated when read by any REST or Android client that did not create
          # the data source. Only the data source creator will see the uid field in
          # clear and normal form.
          #
          # The obfuscation preserves equality; that is, given two IDs, if id1 == id2,
          # obfuscated(id1) == obfuscated(id2).
      &quot;model&quot;: &quot;A String&quot;, # End-user visible model name for the device.
      &quot;type&quot;: &quot;A String&quot;, # A constant representing the type of the device.
      &quot;version&quot;: &quot;A String&quot;, # Version string for the device hardware/software.
      &quot;manufacturer&quot;: &quot;A String&quot;, # Manufacturer of the product/hardware.
    },
    &quot;application&quot;: { # Information about an application which feeds sensor data into the platform.
      &quot;packageName&quot;: &quot;A String&quot;, # Package name for this application. This is used as a unique
          # identifier when created by Android applications, but cannot be specified
          # by REST clients. REST clients will have their developer project number
          # reflected into the Data Source data stream IDs, instead of the packageName.
      &quot;detailsUrl&quot;: &quot;A String&quot;, # An optional URI that can be used to link back to the application.
      &quot;version&quot;: &quot;A String&quot;, # Version of the application. You should update this field whenever the
          # application changes in a way that affects the computation of the data.
      &quot;name&quot;: &quot;A String&quot;, # The name of this application. This is required for REST clients, but we
          # do not enforce uniqueness of this name. It is provided as a matter of
          # convenience for other developers who would like to identify which REST
          # created an Application or Data Source.
    },
    &quot;dataType&quot;: { # The data type defines the schema for a stream of data being collected by,
        # inserted into, or queried from the Fitness API.
      &quot;field&quot;: [ # A field represents one dimension of a data type.
        { # In case of multi-dimensional data (such as an accelerometer with x, y, and z
            # axes) each field represents one dimension. Each data type field has a unique
            # name which identifies it. The field also defines the format of the data (int,
            # float, etc.).
            #
            # This message is only instantiated in code and not used for wire comms or
            # stored in any way.
          &quot;format&quot;: &quot;A String&quot;, # The different supported formats for each field in a data type.
          &quot;optional&quot;: True or False,
          &quot;name&quot;: &quot;A String&quot;, # Defines the name and format of data. Unlike data type names, field names
              # are not namespaced, and only need to be unique within the data type.
        },
      ],
      &quot;name&quot;: &quot;A String&quot;, # Each data type has a unique, namespaced, name. All data types in the
          # com.google namespace are shared as part of the platform.
    },
    &quot;name&quot;: &quot;A String&quot;, # An end-user visible name for this data source.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Definition of a unique source of sensor data.  Data sources can expose raw
        # data coming from hardware sensors on local or companion devices. They can
        # also expose derived data, created by transforming or merging other data
        # sources. Multiple data sources can exist for the same data type. Every data
        # point inserted into or read from this service has an associated data
        # source.
        #
        # The data source contains enough information to uniquely identify its data,
        # including the hardware device and the application that collected and/or
        # transformed the data. It also holds useful metadata, such as the hardware and
        # application versions, and the device type.
        #
        # Each data source produces a unique stream of data, with a unique identifier.
        # Not all changes to data source affect the stream identifier, so that data
        # collected by updated versions of the same application/device can still be
        # considered to belong to the same data stream.
      &quot;dataQualityStandard&quot;: [ # DO NOT POPULATE THIS FIELD. It is never populated in responses from the
          # platform, and is ignored in queries. It will be removed in a future version
          # entirely.
        &quot;A String&quot;,
      ],
      &quot;type&quot;: &quot;A String&quot;, # A constant describing the type of this data source. Indicates whether this
          # data source produces raw or derived data.
      &quot;dataStreamName&quot;: &quot;A String&quot;, # The stream name uniquely identifies this particular data source among
          # other data sources of the same type from the same underlying producer.
          # Setting the stream name is optional, but should be done whenever an
          # application exposes two streams for the same data type, or when a device
          # has two equivalent sensors.
      &quot;dataStreamId&quot;: &quot;A String&quot;, # A unique identifier for the data stream produced by this data source. The
          # identifier includes:&lt;br/&gt;&lt;br/&gt;
          # &lt;ul&gt;
          # &lt;li&gt;The physical device&#x27;s manufacturer, model, and serial number
          # (UID).&lt;/li&gt;
          # &lt;li&gt;The application&#x27;s package name or name. Package name is used when the
          # data source was created by an Android application. The developer project
          # number is used when the data source was created by a REST client.&lt;/li&gt;
          # &lt;li&gt;The data source&#x27;s type.&lt;/li&gt;
          # &lt;li&gt;The data source&#x27;s stream name.&lt;/li&gt;
          # &lt;/ul&gt;
          # Note that not all attributes of the data source are used as part of the
          # stream identifier. In particular, the version of the hardware/the
          # application isn&#x27;t used. This allows us to preserve the same stream through
          # version updates. This also means that two DataSource objects may represent
          # the same data stream even if they&#x27;re not equal.
          #
          # The exact format of the data stream ID created by an Android application
          # is:
          # &lt;var&gt;type:dataType.name&lt;wbr/&gt;:application.packageName&lt;wbr/&gt;:device.manufacturer&lt;wbr/&gt;:device.model&lt;wbr/&gt;:device.uid&lt;wbr/&gt;:dataStreamName&lt;/var&gt;
          #
          # The exact format of the data stream ID created by a REST client is:
          # &lt;var&gt;type:dataType.name&lt;wbr/&gt;:developer project
          # number&lt;wbr/&gt;:device.manufacturer&lt;wbr/&gt;:device.model:device.uid&lt;wbr/&gt;:dataStreamName&lt;/var&gt;
          #
          # When any of the optional fields that make up the data stream ID are absent,
          # they will be omitted from the data stream ID. The minimum viable data
          # stream ID would be:
          # type:dataType.name:developer project number
          #
          # Finally, the developer project number and device UID are obfuscated when
          # read by any REST or Android client that did not create the data source.
          # Only the data source creator will see the developer project number in clear
          # and normal form. This means a client will see a different set of
          # data_stream_ids than another client with different credentials.
      &quot;device&quot;: { # Representation of an integrated device (such as a phone or a wearable) that # Representation of an integrated device (such as a phone or a wearable) that
          # can hold sensors.
          # can hold sensors. Each sensor is exposed as a data source.
          #
          # The main purpose of the device information contained in this class is to
          # identify the hardware of a particular data source.  This can be useful in
          # different ways, including:
          # &lt;ul&gt;
          #   &lt;li&gt;Distinguishing two similar sensors on different devices (the step
          #       counter on two nexus 5 phones, for instance)
          #   &lt;li&gt;Display the source of data to the user (by using the device make /
          #       model)
          #   &lt;li&gt;Treat data differently depending on sensor type (accelerometers on a
          #       watch may give different patterns than those on a phone)
          #   &lt;li&gt;Build different analysis models for each device/version.
          # &lt;/ul&gt;
        &quot;uid&quot;: &quot;A String&quot;, # The serial number or other unique ID for the hardware. This field is
            # obfuscated when read by any REST or Android client that did not create
            # the data source. Only the data source creator will see the uid field in
            # clear and normal form.
            #
            # The obfuscation preserves equality; that is, given two IDs, if id1 == id2,
            # obfuscated(id1) == obfuscated(id2).
        &quot;model&quot;: &quot;A String&quot;, # End-user visible model name for the device.
        &quot;type&quot;: &quot;A String&quot;, # A constant representing the type of the device.
        &quot;version&quot;: &quot;A String&quot;, # Version string for the device hardware/software.
        &quot;manufacturer&quot;: &quot;A String&quot;, # Manufacturer of the product/hardware.
      },
      &quot;application&quot;: { # Information about an application which feeds sensor data into the platform.
        &quot;packageName&quot;: &quot;A String&quot;, # Package name for this application. This is used as a unique
            # identifier when created by Android applications, but cannot be specified
            # by REST clients. REST clients will have their developer project number
            # reflected into the Data Source data stream IDs, instead of the packageName.
        &quot;detailsUrl&quot;: &quot;A String&quot;, # An optional URI that can be used to link back to the application.
        &quot;version&quot;: &quot;A String&quot;, # Version of the application. You should update this field whenever the
            # application changes in a way that affects the computation of the data.
        &quot;name&quot;: &quot;A String&quot;, # The name of this application. This is required for REST clients, but we
            # do not enforce uniqueness of this name. It is provided as a matter of
            # convenience for other developers who would like to identify which REST
            # created an Application or Data Source.
      },
      &quot;dataType&quot;: { # The data type defines the schema for a stream of data being collected by,
          # inserted into, or queried from the Fitness API.
        &quot;field&quot;: [ # A field represents one dimension of a data type.
          { # In case of multi-dimensional data (such as an accelerometer with x, y, and z
              # axes) each field represents one dimension. Each data type field has a unique
              # name which identifies it. The field also defines the format of the data (int,
              # float, etc.).
              #
              # This message is only instantiated in code and not used for wire comms or
              # stored in any way.
            &quot;format&quot;: &quot;A String&quot;, # The different supported formats for each field in a data type.
            &quot;optional&quot;: True or False,
            &quot;name&quot;: &quot;A String&quot;, # Defines the name and format of data. Unlike data type names, field names
                # are not namespaced, and only need to be unique within the data type.
          },
        ],
        &quot;name&quot;: &quot;A String&quot;, # Each data type has a unique, namespaced, name. All data types in the
            # com.google namespace are shared as part of the platform.
      },
      &quot;name&quot;: &quot;A String&quot;, # An end-user visible name for this data source.
    }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(userId, dataSourceId, x__xgafv=None)</code>
  <pre>Deletes the specified data source. The request will fail if the data
source contains any data points.

Args:
  userId: string, Retrieve a data source 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 to delete. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Definition of a unique source of sensor data.  Data sources can expose raw
        # data coming from hardware sensors on local or companion devices. They can
        # also expose derived data, created by transforming or merging other data
        # sources. Multiple data sources can exist for the same data type. Every data
        # point inserted into or read from this service has an associated data
        # source.
        #
        # The data source contains enough information to uniquely identify its data,
        # including the hardware device and the application that collected and/or
        # transformed the data. It also holds useful metadata, such as the hardware and
        # application versions, and the device type.
        #
        # Each data source produces a unique stream of data, with a unique identifier.
        # Not all changes to data source affect the stream identifier, so that data
        # collected by updated versions of the same application/device can still be
        # considered to belong to the same data stream.
      &quot;dataQualityStandard&quot;: [ # DO NOT POPULATE THIS FIELD. It is never populated in responses from the
          # platform, and is ignored in queries. It will be removed in a future version
          # entirely.
        &quot;A String&quot;,
      ],
      &quot;type&quot;: &quot;A String&quot;, # A constant describing the type of this data source. Indicates whether this
          # data source produces raw or derived data.
      &quot;dataStreamName&quot;: &quot;A String&quot;, # The stream name uniquely identifies this particular data source among
          # other data sources of the same type from the same underlying producer.
          # Setting the stream name is optional, but should be done whenever an
          # application exposes two streams for the same data type, or when a device
          # has two equivalent sensors.
      &quot;dataStreamId&quot;: &quot;A String&quot;, # A unique identifier for the data stream produced by this data source. The
          # identifier includes:&lt;br/&gt;&lt;br/&gt;
          # &lt;ul&gt;
          # &lt;li&gt;The physical device&#x27;s manufacturer, model, and serial number
          # (UID).&lt;/li&gt;
          # &lt;li&gt;The application&#x27;s package name or name. Package name is used when the
          # data source was created by an Android application. The developer project
          # number is used when the data source was created by a REST client.&lt;/li&gt;
          # &lt;li&gt;The data source&#x27;s type.&lt;/li&gt;
          # &lt;li&gt;The data source&#x27;s stream name.&lt;/li&gt;
          # &lt;/ul&gt;
          # Note that not all attributes of the data source are used as part of the
          # stream identifier. In particular, the version of the hardware/the
          # application isn&#x27;t used. This allows us to preserve the same stream through
          # version updates. This also means that two DataSource objects may represent
          # the same data stream even if they&#x27;re not equal.
          #
          # The exact format of the data stream ID created by an Android application
          # is:
          # &lt;var&gt;type:dataType.name&lt;wbr/&gt;:application.packageName&lt;wbr/&gt;:device.manufacturer&lt;wbr/&gt;:device.model&lt;wbr/&gt;:device.uid&lt;wbr/&gt;:dataStreamName&lt;/var&gt;
          #
          # The exact format of the data stream ID created by a REST client is:
          # &lt;var&gt;type:dataType.name&lt;wbr/&gt;:developer project
          # number&lt;wbr/&gt;:device.manufacturer&lt;wbr/&gt;:device.model:device.uid&lt;wbr/&gt;:dataStreamName&lt;/var&gt;
          #
          # When any of the optional fields that make up the data stream ID are absent,
          # they will be omitted from the data stream ID. The minimum viable data
          # stream ID would be:
          # type:dataType.name:developer project number
          #
          # Finally, the developer project number and device UID are obfuscated when
          # read by any REST or Android client that did not create the data source.
          # Only the data source creator will see the developer project number in clear
          # and normal form. This means a client will see a different set of
          # data_stream_ids than another client with different credentials.
      &quot;device&quot;: { # Representation of an integrated device (such as a phone or a wearable) that # Representation of an integrated device (such as a phone or a wearable) that
          # can hold sensors.
          # can hold sensors. Each sensor is exposed as a data source.
          #
          # The main purpose of the device information contained in this class is to
          # identify the hardware of a particular data source.  This can be useful in
          # different ways, including:
          # &lt;ul&gt;
          #   &lt;li&gt;Distinguishing two similar sensors on different devices (the step
          #       counter on two nexus 5 phones, for instance)
          #   &lt;li&gt;Display the source of data to the user (by using the device make /
          #       model)
          #   &lt;li&gt;Treat data differently depending on sensor type (accelerometers on a
          #       watch may give different patterns than those on a phone)
          #   &lt;li&gt;Build different analysis models for each device/version.
          # &lt;/ul&gt;
        &quot;uid&quot;: &quot;A String&quot;, # The serial number or other unique ID for the hardware. This field is
            # obfuscated when read by any REST or Android client that did not create
            # the data source. Only the data source creator will see the uid field in
            # clear and normal form.
            #
            # The obfuscation preserves equality; that is, given two IDs, if id1 == id2,
            # obfuscated(id1) == obfuscated(id2).
        &quot;model&quot;: &quot;A String&quot;, # End-user visible model name for the device.
        &quot;type&quot;: &quot;A String&quot;, # A constant representing the type of the device.
        &quot;version&quot;: &quot;A String&quot;, # Version string for the device hardware/software.
        &quot;manufacturer&quot;: &quot;A String&quot;, # Manufacturer of the product/hardware.
      },
      &quot;application&quot;: { # Information about an application which feeds sensor data into the platform.
        &quot;packageName&quot;: &quot;A String&quot;, # Package name for this application. This is used as a unique
            # identifier when created by Android applications, but cannot be specified
            # by REST clients. REST clients will have their developer project number
            # reflected into the Data Source data stream IDs, instead of the packageName.
        &quot;detailsUrl&quot;: &quot;A String&quot;, # An optional URI that can be used to link back to the application.
        &quot;version&quot;: &quot;A String&quot;, # Version of the application. You should update this field whenever the
            # application changes in a way that affects the computation of the data.
        &quot;name&quot;: &quot;A String&quot;, # The name of this application. This is required for REST clients, but we
            # do not enforce uniqueness of this name. It is provided as a matter of
            # convenience for other developers who would like to identify which REST
            # created an Application or Data Source.
      },
      &quot;dataType&quot;: { # The data type defines the schema for a stream of data being collected by,
          # inserted into, or queried from the Fitness API.
        &quot;field&quot;: [ # A field represents one dimension of a data type.
          { # In case of multi-dimensional data (such as an accelerometer with x, y, and z
              # axes) each field represents one dimension. Each data type field has a unique
              # name which identifies it. The field also defines the format of the data (int,
              # float, etc.).
              #
              # This message is only instantiated in code and not used for wire comms or
              # stored in any way.
            &quot;format&quot;: &quot;A String&quot;, # The different supported formats for each field in a data type.
            &quot;optional&quot;: True or False,
            &quot;name&quot;: &quot;A String&quot;, # Defines the name and format of data. Unlike data type names, field names
                # are not namespaced, and only need to be unique within the data type.
          },
        ],
        &quot;name&quot;: &quot;A String&quot;, # Each data type has a unique, namespaced, name. All data types in the
            # com.google namespace are shared as part of the platform.
      },
      &quot;name&quot;: &quot;A String&quot;, # An end-user visible name for this data source.
    }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(userId, dataSourceId, x__xgafv=None)</code>
  <pre>Returns the specified data source.

Args:
  userId: string, Retrieve a data source 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 to retrieve. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Definition of a unique source of sensor data.  Data sources can expose raw
        # data coming from hardware sensors on local or companion devices. They can
        # also expose derived data, created by transforming or merging other data
        # sources. Multiple data sources can exist for the same data type. Every data
        # point inserted into or read from this service has an associated data
        # source.
        #
        # The data source contains enough information to uniquely identify its data,
        # including the hardware device and the application that collected and/or
        # transformed the data. It also holds useful metadata, such as the hardware and
        # application versions, and the device type.
        #
        # Each data source produces a unique stream of data, with a unique identifier.
        # Not all changes to data source affect the stream identifier, so that data
        # collected by updated versions of the same application/device can still be
        # considered to belong to the same data stream.
      &quot;dataQualityStandard&quot;: [ # DO NOT POPULATE THIS FIELD. It is never populated in responses from the
          # platform, and is ignored in queries. It will be removed in a future version
          # entirely.
        &quot;A String&quot;,
      ],
      &quot;type&quot;: &quot;A String&quot;, # A constant describing the type of this data source. Indicates whether this
          # data source produces raw or derived data.
      &quot;dataStreamName&quot;: &quot;A String&quot;, # The stream name uniquely identifies this particular data source among
          # other data sources of the same type from the same underlying producer.
          # Setting the stream name is optional, but should be done whenever an
          # application exposes two streams for the same data type, or when a device
          # has two equivalent sensors.
      &quot;dataStreamId&quot;: &quot;A String&quot;, # A unique identifier for the data stream produced by this data source. The
          # identifier includes:&lt;br/&gt;&lt;br/&gt;
          # &lt;ul&gt;
          # &lt;li&gt;The physical device&#x27;s manufacturer, model, and serial number
          # (UID).&lt;/li&gt;
          # &lt;li&gt;The application&#x27;s package name or name. Package name is used when the
          # data source was created by an Android application. The developer project
          # number is used when the data source was created by a REST client.&lt;/li&gt;
          # &lt;li&gt;The data source&#x27;s type.&lt;/li&gt;
          # &lt;li&gt;The data source&#x27;s stream name.&lt;/li&gt;
          # &lt;/ul&gt;
          # Note that not all attributes of the data source are used as part of the
          # stream identifier. In particular, the version of the hardware/the
          # application isn&#x27;t used. This allows us to preserve the same stream through
          # version updates. This also means that two DataSource objects may represent
          # the same data stream even if they&#x27;re not equal.
          #
          # The exact format of the data stream ID created by an Android application
          # is:
          # &lt;var&gt;type:dataType.name&lt;wbr/&gt;:application.packageName&lt;wbr/&gt;:device.manufacturer&lt;wbr/&gt;:device.model&lt;wbr/&gt;:device.uid&lt;wbr/&gt;:dataStreamName&lt;/var&gt;
          #
          # The exact format of the data stream ID created by a REST client is:
          # &lt;var&gt;type:dataType.name&lt;wbr/&gt;:developer project
          # number&lt;wbr/&gt;:device.manufacturer&lt;wbr/&gt;:device.model:device.uid&lt;wbr/&gt;:dataStreamName&lt;/var&gt;
          #
          # When any of the optional fields that make up the data stream ID are absent,
          # they will be omitted from the data stream ID. The minimum viable data
          # stream ID would be:
          # type:dataType.name:developer project number
          #
          # Finally, the developer project number and device UID are obfuscated when
          # read by any REST or Android client that did not create the data source.
          # Only the data source creator will see the developer project number in clear
          # and normal form. This means a client will see a different set of
          # data_stream_ids than another client with different credentials.
      &quot;device&quot;: { # Representation of an integrated device (such as a phone or a wearable) that # Representation of an integrated device (such as a phone or a wearable) that
          # can hold sensors.
          # can hold sensors. Each sensor is exposed as a data source.
          #
          # The main purpose of the device information contained in this class is to
          # identify the hardware of a particular data source.  This can be useful in
          # different ways, including:
          # &lt;ul&gt;
          #   &lt;li&gt;Distinguishing two similar sensors on different devices (the step
          #       counter on two nexus 5 phones, for instance)
          #   &lt;li&gt;Display the source of data to the user (by using the device make /
          #       model)
          #   &lt;li&gt;Treat data differently depending on sensor type (accelerometers on a
          #       watch may give different patterns than those on a phone)
          #   &lt;li&gt;Build different analysis models for each device/version.
          # &lt;/ul&gt;
        &quot;uid&quot;: &quot;A String&quot;, # The serial number or other unique ID for the hardware. This field is
            # obfuscated when read by any REST or Android client that did not create
            # the data source. Only the data source creator will see the uid field in
            # clear and normal form.
            #
            # The obfuscation preserves equality; that is, given two IDs, if id1 == id2,
            # obfuscated(id1) == obfuscated(id2).
        &quot;model&quot;: &quot;A String&quot;, # End-user visible model name for the device.
        &quot;type&quot;: &quot;A String&quot;, # A constant representing the type of the device.
        &quot;version&quot;: &quot;A String&quot;, # Version string for the device hardware/software.
        &quot;manufacturer&quot;: &quot;A String&quot;, # Manufacturer of the product/hardware.
      },
      &quot;application&quot;: { # Information about an application which feeds sensor data into the platform.
        &quot;packageName&quot;: &quot;A String&quot;, # Package name for this application. This is used as a unique
            # identifier when created by Android applications, but cannot be specified
            # by REST clients. REST clients will have their developer project number
            # reflected into the Data Source data stream IDs, instead of the packageName.
        &quot;detailsUrl&quot;: &quot;A String&quot;, # An optional URI that can be used to link back to the application.
        &quot;version&quot;: &quot;A String&quot;, # Version of the application. You should update this field whenever the
            # application changes in a way that affects the computation of the data.
        &quot;name&quot;: &quot;A String&quot;, # The name of this application. This is required for REST clients, but we
            # do not enforce uniqueness of this name. It is provided as a matter of
            # convenience for other developers who would like to identify which REST
            # created an Application or Data Source.
      },
      &quot;dataType&quot;: { # The data type defines the schema for a stream of data being collected by,
          # inserted into, or queried from the Fitness API.
        &quot;field&quot;: [ # A field represents one dimension of a data type.
          { # In case of multi-dimensional data (such as an accelerometer with x, y, and z
              # axes) each field represents one dimension. Each data type field has a unique
              # name which identifies it. The field also defines the format of the data (int,
              # float, etc.).
              #
              # This message is only instantiated in code and not used for wire comms or
              # stored in any way.
            &quot;format&quot;: &quot;A String&quot;, # The different supported formats for each field in a data type.
            &quot;optional&quot;: True or False,
            &quot;name&quot;: &quot;A String&quot;, # Defines the name and format of data. Unlike data type names, field names
                # are not namespaced, and only need to be unique within the data type.
          },
        ],
        &quot;name&quot;: &quot;A String&quot;, # Each data type has a unique, namespaced, name. All data types in the
            # com.google namespace are shared as part of the platform.
      },
      &quot;name&quot;: &quot;A String&quot;, # An end-user visible name for this data source.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(userId, dataTypeName=None, x__xgafv=None)</code>
  <pre>Lists all data sources that are visible to the developer, using the OAuth
scopes provided. The list is not exhaustive; the user may have private
data sources that are only visible to other developers, or calls using
other scopes.

Args:
  userId: string, List data sources 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)
  dataTypeName: string, The names of data types to include in the list. If not specified, all
data sources will be returned. (repeated)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
    &quot;dataSource&quot;: [ # A previously created data source.
      { # Definition of a unique source of sensor data.  Data sources can expose raw
            # data coming from hardware sensors on local or companion devices. They can
            # also expose derived data, created by transforming or merging other data
            # sources. Multiple data sources can exist for the same data type. Every data
            # point inserted into or read from this service has an associated data
            # source.
            #
            # The data source contains enough information to uniquely identify its data,
            # including the hardware device and the application that collected and/or
            # transformed the data. It also holds useful metadata, such as the hardware and
            # application versions, and the device type.
            #
            # Each data source produces a unique stream of data, with a unique identifier.
            # Not all changes to data source affect the stream identifier, so that data
            # collected by updated versions of the same application/device can still be
            # considered to belong to the same data stream.
          &quot;dataQualityStandard&quot;: [ # DO NOT POPULATE THIS FIELD. It is never populated in responses from the
              # platform, and is ignored in queries. It will be removed in a future version
              # entirely.
            &quot;A String&quot;,
          ],
          &quot;type&quot;: &quot;A String&quot;, # A constant describing the type of this data source. Indicates whether this
              # data source produces raw or derived data.
          &quot;dataStreamName&quot;: &quot;A String&quot;, # The stream name uniquely identifies this particular data source among
              # other data sources of the same type from the same underlying producer.
              # Setting the stream name is optional, but should be done whenever an
              # application exposes two streams for the same data type, or when a device
              # has two equivalent sensors.
          &quot;dataStreamId&quot;: &quot;A String&quot;, # A unique identifier for the data stream produced by this data source. The
              # identifier includes:&lt;br/&gt;&lt;br/&gt;
              # &lt;ul&gt;
              # &lt;li&gt;The physical device&#x27;s manufacturer, model, and serial number
              # (UID).&lt;/li&gt;
              # &lt;li&gt;The application&#x27;s package name or name. Package name is used when the
              # data source was created by an Android application. The developer project
              # number is used when the data source was created by a REST client.&lt;/li&gt;
              # &lt;li&gt;The data source&#x27;s type.&lt;/li&gt;
              # &lt;li&gt;The data source&#x27;s stream name.&lt;/li&gt;
              # &lt;/ul&gt;
              # Note that not all attributes of the data source are used as part of the
              # stream identifier. In particular, the version of the hardware/the
              # application isn&#x27;t used. This allows us to preserve the same stream through
              # version updates. This also means that two DataSource objects may represent
              # the same data stream even if they&#x27;re not equal.
              #
              # The exact format of the data stream ID created by an Android application
              # is:
              # &lt;var&gt;type:dataType.name&lt;wbr/&gt;:application.packageName&lt;wbr/&gt;:device.manufacturer&lt;wbr/&gt;:device.model&lt;wbr/&gt;:device.uid&lt;wbr/&gt;:dataStreamName&lt;/var&gt;
              #
              # The exact format of the data stream ID created by a REST client is:
              # &lt;var&gt;type:dataType.name&lt;wbr/&gt;:developer project
              # number&lt;wbr/&gt;:device.manufacturer&lt;wbr/&gt;:device.model:device.uid&lt;wbr/&gt;:dataStreamName&lt;/var&gt;
              #
              # When any of the optional fields that make up the data stream ID are absent,
              # they will be omitted from the data stream ID. The minimum viable data
              # stream ID would be:
              # type:dataType.name:developer project number
              #
              # Finally, the developer project number and device UID are obfuscated when
              # read by any REST or Android client that did not create the data source.
              # Only the data source creator will see the developer project number in clear
              # and normal form. This means a client will see a different set of
              # data_stream_ids than another client with different credentials.
          &quot;device&quot;: { # Representation of an integrated device (such as a phone or a wearable) that # Representation of an integrated device (such as a phone or a wearable) that
              # can hold sensors.
              # can hold sensors. Each sensor is exposed as a data source.
              #
              # The main purpose of the device information contained in this class is to
              # identify the hardware of a particular data source.  This can be useful in
              # different ways, including:
              # &lt;ul&gt;
              #   &lt;li&gt;Distinguishing two similar sensors on different devices (the step
              #       counter on two nexus 5 phones, for instance)
              #   &lt;li&gt;Display the source of data to the user (by using the device make /
              #       model)
              #   &lt;li&gt;Treat data differently depending on sensor type (accelerometers on a
              #       watch may give different patterns than those on a phone)
              #   &lt;li&gt;Build different analysis models for each device/version.
              # &lt;/ul&gt;
            &quot;uid&quot;: &quot;A String&quot;, # The serial number or other unique ID for the hardware. This field is
                # obfuscated when read by any REST or Android client that did not create
                # the data source. Only the data source creator will see the uid field in
                # clear and normal form.
                #
                # The obfuscation preserves equality; that is, given two IDs, if id1 == id2,
                # obfuscated(id1) == obfuscated(id2).
            &quot;model&quot;: &quot;A String&quot;, # End-user visible model name for the device.
            &quot;type&quot;: &quot;A String&quot;, # A constant representing the type of the device.
            &quot;version&quot;: &quot;A String&quot;, # Version string for the device hardware/software.
            &quot;manufacturer&quot;: &quot;A String&quot;, # Manufacturer of the product/hardware.
          },
          &quot;application&quot;: { # Information about an application which feeds sensor data into the platform.
            &quot;packageName&quot;: &quot;A String&quot;, # Package name for this application. This is used as a unique
                # identifier when created by Android applications, but cannot be specified
                # by REST clients. REST clients will have their developer project number
                # reflected into the Data Source data stream IDs, instead of the packageName.
            &quot;detailsUrl&quot;: &quot;A String&quot;, # An optional URI that can be used to link back to the application.
            &quot;version&quot;: &quot;A String&quot;, # Version of the application. You should update this field whenever the
                # application changes in a way that affects the computation of the data.
            &quot;name&quot;: &quot;A String&quot;, # The name of this application. This is required for REST clients, but we
                # do not enforce uniqueness of this name. It is provided as a matter of
                # convenience for other developers who would like to identify which REST
                # created an Application or Data Source.
          },
          &quot;dataType&quot;: { # The data type defines the schema for a stream of data being collected by,
              # inserted into, or queried from the Fitness API.
            &quot;field&quot;: [ # A field represents one dimension of a data type.
              { # In case of multi-dimensional data (such as an accelerometer with x, y, and z
                  # axes) each field represents one dimension. Each data type field has a unique
                  # name which identifies it. The field also defines the format of the data (int,
                  # float, etc.).
                  #
                  # This message is only instantiated in code and not used for wire comms or
                  # stored in any way.
                &quot;format&quot;: &quot;A String&quot;, # The different supported formats for each field in a data type.
                &quot;optional&quot;: True or False,
                &quot;name&quot;: &quot;A String&quot;, # Defines the name and format of data. Unlike data type names, field names
                    # are not namespaced, and only need to be unique within the data type.
              },
            ],
            &quot;name&quot;: &quot;A String&quot;, # Each data type has a unique, namespaced, name. All data types in the
                # com.google namespace are shared as part of the platform.
          },
          &quot;name&quot;: &quot;A String&quot;, # An end-user visible name for this data source.
        },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(userId, dataSourceId, body=None, x__xgafv=None)</code>
  <pre>Updates the specified data source. The &lt;code&gt;dataStreamId&lt;/code&gt;,
&lt;code&gt;dataType&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, &lt;code&gt;dataStreamName&lt;/code&gt;, and
&lt;code&gt;device&lt;/code&gt; properties with the exception of &lt;code&gt;version&lt;/code&gt;,
cannot be modified.

Data sources are identified by their &lt;code&gt;dataStreamId&lt;/code&gt;.

Args:
  userId: string, Update the data source 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 to update. (required)
  body: object, The request body.
    The object takes the form of:

{ # Definition of a unique source of sensor data.  Data sources can expose raw
      # data coming from hardware sensors on local or companion devices. They can
      # also expose derived data, created by transforming or merging other data
      # sources. Multiple data sources can exist for the same data type. Every data
      # point inserted into or read from this service has an associated data
      # source.
      # 
      # The data source contains enough information to uniquely identify its data,
      # including the hardware device and the application that collected and/or
      # transformed the data. It also holds useful metadata, such as the hardware and
      # application versions, and the device type.
      # 
      # Each data source produces a unique stream of data, with a unique identifier.
      # Not all changes to data source affect the stream identifier, so that data
      # collected by updated versions of the same application/device can still be
      # considered to belong to the same data stream.
    &quot;dataQualityStandard&quot;: [ # DO NOT POPULATE THIS FIELD. It is never populated in responses from the
        # platform, and is ignored in queries. It will be removed in a future version
        # entirely.
      &quot;A String&quot;,
    ],
    &quot;type&quot;: &quot;A String&quot;, # A constant describing the type of this data source. Indicates whether this
        # data source produces raw or derived data.
    &quot;dataStreamName&quot;: &quot;A String&quot;, # The stream name uniquely identifies this particular data source among
        # other data sources of the same type from the same underlying producer.
        # Setting the stream name is optional, but should be done whenever an
        # application exposes two streams for the same data type, or when a device
        # has two equivalent sensors.
    &quot;dataStreamId&quot;: &quot;A String&quot;, # A unique identifier for the data stream produced by this data source. The
        # identifier includes:&lt;br/&gt;&lt;br/&gt;
        # &lt;ul&gt;
        # &lt;li&gt;The physical device&#x27;s manufacturer, model, and serial number
        # (UID).&lt;/li&gt;
        # &lt;li&gt;The application&#x27;s package name or name. Package name is used when the
        # data source was created by an Android application. The developer project
        # number is used when the data source was created by a REST client.&lt;/li&gt;
        # &lt;li&gt;The data source&#x27;s type.&lt;/li&gt;
        # &lt;li&gt;The data source&#x27;s stream name.&lt;/li&gt;
        # &lt;/ul&gt;
        # Note that not all attributes of the data source are used as part of the
        # stream identifier. In particular, the version of the hardware/the
        # application isn&#x27;t used. This allows us to preserve the same stream through
        # version updates. This also means that two DataSource objects may represent
        # the same data stream even if they&#x27;re not equal.
        # 
        # The exact format of the data stream ID created by an Android application
        # is:
        # &lt;var&gt;type:dataType.name&lt;wbr/&gt;:application.packageName&lt;wbr/&gt;:device.manufacturer&lt;wbr/&gt;:device.model&lt;wbr/&gt;:device.uid&lt;wbr/&gt;:dataStreamName&lt;/var&gt;
        # 
        # The exact format of the data stream ID created by a REST client is:
        # &lt;var&gt;type:dataType.name&lt;wbr/&gt;:developer project
        # number&lt;wbr/&gt;:device.manufacturer&lt;wbr/&gt;:device.model:device.uid&lt;wbr/&gt;:dataStreamName&lt;/var&gt;
        # 
        # When any of the optional fields that make up the data stream ID are absent,
        # they will be omitted from the data stream ID. The minimum viable data
        # stream ID would be:
        # type:dataType.name:developer project number
        # 
        # Finally, the developer project number and device UID are obfuscated when
        # read by any REST or Android client that did not create the data source.
        # Only the data source creator will see the developer project number in clear
        # and normal form. This means a client will see a different set of
        # data_stream_ids than another client with different credentials.
    &quot;device&quot;: { # Representation of an integrated device (such as a phone or a wearable) that # Representation of an integrated device (such as a phone or a wearable) that
        # can hold sensors.
        # can hold sensors. Each sensor is exposed as a data source.
        #
        # The main purpose of the device information contained in this class is to
        # identify the hardware of a particular data source.  This can be useful in
        # different ways, including:
        # &lt;ul&gt;
        #   &lt;li&gt;Distinguishing two similar sensors on different devices (the step
        #       counter on two nexus 5 phones, for instance)
        #   &lt;li&gt;Display the source of data to the user (by using the device make /
        #       model)
        #   &lt;li&gt;Treat data differently depending on sensor type (accelerometers on a
        #       watch may give different patterns than those on a phone)
        #   &lt;li&gt;Build different analysis models for each device/version.
        # &lt;/ul&gt;
      &quot;uid&quot;: &quot;A String&quot;, # The serial number or other unique ID for the hardware. This field is
          # obfuscated when read by any REST or Android client that did not create
          # the data source. Only the data source creator will see the uid field in
          # clear and normal form.
          #
          # The obfuscation preserves equality; that is, given two IDs, if id1 == id2,
          # obfuscated(id1) == obfuscated(id2).
      &quot;model&quot;: &quot;A String&quot;, # End-user visible model name for the device.
      &quot;type&quot;: &quot;A String&quot;, # A constant representing the type of the device.
      &quot;version&quot;: &quot;A String&quot;, # Version string for the device hardware/software.
      &quot;manufacturer&quot;: &quot;A String&quot;, # Manufacturer of the product/hardware.
    },
    &quot;application&quot;: { # Information about an application which feeds sensor data into the platform.
      &quot;packageName&quot;: &quot;A String&quot;, # Package name for this application. This is used as a unique
          # identifier when created by Android applications, but cannot be specified
          # by REST clients. REST clients will have their developer project number
          # reflected into the Data Source data stream IDs, instead of the packageName.
      &quot;detailsUrl&quot;: &quot;A String&quot;, # An optional URI that can be used to link back to the application.
      &quot;version&quot;: &quot;A String&quot;, # Version of the application. You should update this field whenever the
          # application changes in a way that affects the computation of the data.
      &quot;name&quot;: &quot;A String&quot;, # The name of this application. This is required for REST clients, but we
          # do not enforce uniqueness of this name. It is provided as a matter of
          # convenience for other developers who would like to identify which REST
          # created an Application or Data Source.
    },
    &quot;dataType&quot;: { # The data type defines the schema for a stream of data being collected by,
        # inserted into, or queried from the Fitness API.
      &quot;field&quot;: [ # A field represents one dimension of a data type.
        { # In case of multi-dimensional data (such as an accelerometer with x, y, and z
            # axes) each field represents one dimension. Each data type field has a unique
            # name which identifies it. The field also defines the format of the data (int,
            # float, etc.).
            #
            # This message is only instantiated in code and not used for wire comms or
            # stored in any way.
          &quot;format&quot;: &quot;A String&quot;, # The different supported formats for each field in a data type.
          &quot;optional&quot;: True or False,
          &quot;name&quot;: &quot;A String&quot;, # Defines the name and format of data. Unlike data type names, field names
              # are not namespaced, and only need to be unique within the data type.
        },
      ],
      &quot;name&quot;: &quot;A String&quot;, # Each data type has a unique, namespaced, name. All data types in the
          # com.google namespace are shared as part of the platform.
    },
    &quot;name&quot;: &quot;A String&quot;, # An end-user visible name for this data source.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Definition of a unique source of sensor data.  Data sources can expose raw
        # data coming from hardware sensors on local or companion devices. They can
        # also expose derived data, created by transforming or merging other data
        # sources. Multiple data sources can exist for the same data type. Every data
        # point inserted into or read from this service has an associated data
        # source.
        #
        # The data source contains enough information to uniquely identify its data,
        # including the hardware device and the application that collected and/or
        # transformed the data. It also holds useful metadata, such as the hardware and
        # application versions, and the device type.
        #
        # Each data source produces a unique stream of data, with a unique identifier.
        # Not all changes to data source affect the stream identifier, so that data
        # collected by updated versions of the same application/device can still be
        # considered to belong to the same data stream.
      &quot;dataQualityStandard&quot;: [ # DO NOT POPULATE THIS FIELD. It is never populated in responses from the
          # platform, and is ignored in queries. It will be removed in a future version
          # entirely.
        &quot;A String&quot;,
      ],
      &quot;type&quot;: &quot;A String&quot;, # A constant describing the type of this data source. Indicates whether this
          # data source produces raw or derived data.
      &quot;dataStreamName&quot;: &quot;A String&quot;, # The stream name uniquely identifies this particular data source among
          # other data sources of the same type from the same underlying producer.
          # Setting the stream name is optional, but should be done whenever an
          # application exposes two streams for the same data type, or when a device
          # has two equivalent sensors.
      &quot;dataStreamId&quot;: &quot;A String&quot;, # A unique identifier for the data stream produced by this data source. The
          # identifier includes:&lt;br/&gt;&lt;br/&gt;
          # &lt;ul&gt;
          # &lt;li&gt;The physical device&#x27;s manufacturer, model, and serial number
          # (UID).&lt;/li&gt;
          # &lt;li&gt;The application&#x27;s package name or name. Package name is used when the
          # data source was created by an Android application. The developer project
          # number is used when the data source was created by a REST client.&lt;/li&gt;
          # &lt;li&gt;The data source&#x27;s type.&lt;/li&gt;
          # &lt;li&gt;The data source&#x27;s stream name.&lt;/li&gt;
          # &lt;/ul&gt;
          # Note that not all attributes of the data source are used as part of the
          # stream identifier. In particular, the version of the hardware/the
          # application isn&#x27;t used. This allows us to preserve the same stream through
          # version updates. This also means that two DataSource objects may represent
          # the same data stream even if they&#x27;re not equal.
          #
          # The exact format of the data stream ID created by an Android application
          # is:
          # &lt;var&gt;type:dataType.name&lt;wbr/&gt;:application.packageName&lt;wbr/&gt;:device.manufacturer&lt;wbr/&gt;:device.model&lt;wbr/&gt;:device.uid&lt;wbr/&gt;:dataStreamName&lt;/var&gt;
          #
          # The exact format of the data stream ID created by a REST client is:
          # &lt;var&gt;type:dataType.name&lt;wbr/&gt;:developer project
          # number&lt;wbr/&gt;:device.manufacturer&lt;wbr/&gt;:device.model:device.uid&lt;wbr/&gt;:dataStreamName&lt;/var&gt;
          #
          # When any of the optional fields that make up the data stream ID are absent,
          # they will be omitted from the data stream ID. The minimum viable data
          # stream ID would be:
          # type:dataType.name:developer project number
          #
          # Finally, the developer project number and device UID are obfuscated when
          # read by any REST or Android client that did not create the data source.
          # Only the data source creator will see the developer project number in clear
          # and normal form. This means a client will see a different set of
          # data_stream_ids than another client with different credentials.
      &quot;device&quot;: { # Representation of an integrated device (such as a phone or a wearable) that # Representation of an integrated device (such as a phone or a wearable) that
          # can hold sensors.
          # can hold sensors. Each sensor is exposed as a data source.
          #
          # The main purpose of the device information contained in this class is to
          # identify the hardware of a particular data source.  This can be useful in
          # different ways, including:
          # &lt;ul&gt;
          #   &lt;li&gt;Distinguishing two similar sensors on different devices (the step
          #       counter on two nexus 5 phones, for instance)
          #   &lt;li&gt;Display the source of data to the user (by using the device make /
          #       model)
          #   &lt;li&gt;Treat data differently depending on sensor type (accelerometers on a
          #       watch may give different patterns than those on a phone)
          #   &lt;li&gt;Build different analysis models for each device/version.
          # &lt;/ul&gt;
        &quot;uid&quot;: &quot;A String&quot;, # The serial number or other unique ID for the hardware. This field is
            # obfuscated when read by any REST or Android client that did not create
            # the data source. Only the data source creator will see the uid field in
            # clear and normal form.
            #
            # The obfuscation preserves equality; that is, given two IDs, if id1 == id2,
            # obfuscated(id1) == obfuscated(id2).
        &quot;model&quot;: &quot;A String&quot;, # End-user visible model name for the device.
        &quot;type&quot;: &quot;A String&quot;, # A constant representing the type of the device.
        &quot;version&quot;: &quot;A String&quot;, # Version string for the device hardware/software.
        &quot;manufacturer&quot;: &quot;A String&quot;, # Manufacturer of the product/hardware.
      },
      &quot;application&quot;: { # Information about an application which feeds sensor data into the platform.
        &quot;packageName&quot;: &quot;A String&quot;, # Package name for this application. This is used as a unique
            # identifier when created by Android applications, but cannot be specified
            # by REST clients. REST clients will have their developer project number
            # reflected into the Data Source data stream IDs, instead of the packageName.
        &quot;detailsUrl&quot;: &quot;A String&quot;, # An optional URI that can be used to link back to the application.
        &quot;version&quot;: &quot;A String&quot;, # Version of the application. You should update this field whenever the
            # application changes in a way that affects the computation of the data.
        &quot;name&quot;: &quot;A String&quot;, # The name of this application. This is required for REST clients, but we
            # do not enforce uniqueness of this name. It is provided as a matter of
            # convenience for other developers who would like to identify which REST
            # created an Application or Data Source.
      },
      &quot;dataType&quot;: { # The data type defines the schema for a stream of data being collected by,
          # inserted into, or queried from the Fitness API.
        &quot;field&quot;: [ # A field represents one dimension of a data type.
          { # In case of multi-dimensional data (such as an accelerometer with x, y, and z
              # axes) each field represents one dimension. Each data type field has a unique
              # name which identifies it. The field also defines the format of the data (int,
              # float, etc.).
              #
              # This message is only instantiated in code and not used for wire comms or
              # stored in any way.
            &quot;format&quot;: &quot;A String&quot;, # The different supported formats for each field in a data type.
            &quot;optional&quot;: True or False,
            &quot;name&quot;: &quot;A String&quot;, # Defines the name and format of data. Unlike data type names, field names
                # are not namespaced, and only need to be unique within the data type.
          },
        ],
        &quot;name&quot;: &quot;A String&quot;, # Each data type has a unique, namespaced, name. All data types in the
            # com.google namespace are shared as part of the platform.
      },
      &quot;name&quot;: &quot;A String&quot;, # An end-user visible name for this data source.
    }</pre>
</div>

</body></html>