<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</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)</a></code></p>
<p class="firstline">Creates a new data source that is unique across all data sources belonging to this user. The data stream ID field can be omitted and will be generated by the server with the correct format. The data stream ID is an ordered combination of some fields from the data source. In addition to the data source fields reflected into 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.</p>
<p class="toc_element">
  <code><a href="#delete">delete(userId, dataSourceId)</a></code></p>
<p class="firstline">Deletes the specified data source. The request will fail if the data source contains any data points.</p>
<p class="toc_element">
  <code><a href="#get">get(userId, dataSourceId)</a></code></p>
<p class="firstline">Returns the specified data source.</p>
<p class="toc_element">
  <code><a href="#list">list(userId, dataTypeName=None)</a></code></p>
<p class="firstline">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.</p>
<p class="toc_element">
  <code><a href="#update">update(userId, dataSourceId, body)</a></code></p>
<p class="firstline">Updates the specified data source. The dataStreamId, dataType, type, dataStreamName, and device properties with the exception of version, cannot be modified.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(userId, body)</code>
  <pre>Creates a new data source that is unique across all data sources belonging to this user. The data stream ID field can be omitted and will be generated by the server with the correct format. The data stream ID is an ordered combination of some fields from the data source. In addition to the data source fields reflected into 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 me to indicate the authenticated user. Only me is supported at this time. (required)
  body: object, The request body. (required)
    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.
    "name": "A String", # An end-user visible name for this data source.
    "dataStreamName": "A String", # 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.
    "dataType": { # The data type defines the schema for a stream of data being collected by, inserted into, or queried from the Fitness API.
      "field": [ # 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.
          "optional": True or False,
          "name": "A String", # 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.
          "format": "A String", # The different supported formats for each field in a data type.
        },
      ],
      "name": "A String", # Each data type has a unique, namespaced, name. All data types in the com.google namespace are shared as part of the platform.
    },
    "dataQualityStandard": [ # 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.
      "A String",
    ],
    "application": { # Information about an application which feeds sensor data into the platform.
      "packageName": "A String", # 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.
      "version": "A String", # Version of the application. You should update this field whenever the application changes in a way that affects the computation of the data.
      "name": "A String", # 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.
      "detailsUrl": "A String", # An optional URI that can be used to link back to the application.
    },
    "device": { # Representation of an integrated device (such as a phone or a wearable) that can hold sensors. Each sensor is exposed as a data source. # Representation of an integrated device (such as a phone or a wearable) that can hold sensors.
        #
        # 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:
        # - Distinguishing two similar sensors on different devices (the step counter on two nexus 5 phones, for instance)
        # - Display the source of data to the user (by using the device make / model)
        # - Treat data differently depending on sensor type (accelerometers on a watch may give different patterns than those on a phone)
        # - Build different analysis models for each device/version.
      "model": "A String", # End-user visible model name for the device.
      "version": "A String", # Version string for the device hardware/software.
      "type": "A String", # A constant representing the type of the device.
      "uid": "A String", # 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.
      "manufacturer": "A String", # Manufacturer of the product/hardware.
    },
    "dataStreamId": "A String", # A unique identifier for the data stream produced by this data source. The identifier includes:
        # 
        # 
        # - The physical device's manufacturer, model, and serial number (UID).
        # - The application'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.
        # - The data source's type.
        # - The data source's stream name.  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'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're not equal.
        # 
        # The exact format of the data stream ID created by an Android application is: type:dataType.name:application.packageName:device.manufacturer:device.model:device.uid:dataStreamName
        # 
        # The exact format of the data stream ID created by a REST client is: type:dataType.name:developer project number:device.manufacturer:device.model:device.uid:dataStreamName
        # 
        # 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 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 developer project number in clear and normal form.
    "type": "A String", # A constant describing the type of this data source. Indicates whether this data source produces raw or derived data.
  }


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.
      "name": "A String", # An end-user visible name for this data source.
      "dataStreamName": "A String", # 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.
      "dataType": { # The data type defines the schema for a stream of data being collected by, inserted into, or queried from the Fitness API.
        "field": [ # 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.
            "optional": True or False,
            "name": "A String", # 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.
            "format": "A String", # The different supported formats for each field in a data type.
          },
        ],
        "name": "A String", # Each data type has a unique, namespaced, name. All data types in the com.google namespace are shared as part of the platform.
      },
      "dataQualityStandard": [ # 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.
        "A String",
      ],
      "application": { # Information about an application which feeds sensor data into the platform.
        "packageName": "A String", # 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.
        "version": "A String", # Version of the application. You should update this field whenever the application changes in a way that affects the computation of the data.
        "name": "A String", # 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.
        "detailsUrl": "A String", # An optional URI that can be used to link back to the application.
      },
      "device": { # Representation of an integrated device (such as a phone or a wearable) that can hold sensors. Each sensor is exposed as a data source. # Representation of an integrated device (such as a phone or a wearable) that can hold sensors.
          #
          # 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:
          # - Distinguishing two similar sensors on different devices (the step counter on two nexus 5 phones, for instance)
          # - Display the source of data to the user (by using the device make / model)
          # - Treat data differently depending on sensor type (accelerometers on a watch may give different patterns than those on a phone)
          # - Build different analysis models for each device/version.
        "model": "A String", # End-user visible model name for the device.
        "version": "A String", # Version string for the device hardware/software.
        "type": "A String", # A constant representing the type of the device.
        "uid": "A String", # 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.
        "manufacturer": "A String", # Manufacturer of the product/hardware.
      },
      "dataStreamId": "A String", # A unique identifier for the data stream produced by this data source. The identifier includes:
          #
          #
          # - The physical device's manufacturer, model, and serial number (UID).
          # - The application'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.
          # - The data source's type.
          # - The data source's stream name.  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'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're not equal.
          #
          # The exact format of the data stream ID created by an Android application is: type:dataType.name:application.packageName:device.manufacturer:device.model:device.uid:dataStreamName
          #
          # The exact format of the data stream ID created by a REST client is: type:dataType.name:developer project number:device.manufacturer:device.model:device.uid:dataStreamName
          #
          # 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 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 developer project number in clear and normal form.
      "type": "A String", # A constant describing the type of this data source. Indicates whether this data source produces raw or derived data.
    }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(userId, dataSourceId)</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 me to indicate the authenticated user. Only me is supported at this time. (required)
  dataSourceId: string, The data stream ID of the data source to delete. (required)

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.
      "name": "A String", # An end-user visible name for this data source.
      "dataStreamName": "A String", # 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.
      "dataType": { # The data type defines the schema for a stream of data being collected by, inserted into, or queried from the Fitness API.
        "field": [ # 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.
            "optional": True or False,
            "name": "A String", # 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.
            "format": "A String", # The different supported formats for each field in a data type.
          },
        ],
        "name": "A String", # Each data type has a unique, namespaced, name. All data types in the com.google namespace are shared as part of the platform.
      },
      "dataQualityStandard": [ # 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.
        "A String",
      ],
      "application": { # Information about an application which feeds sensor data into the platform.
        "packageName": "A String", # 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.
        "version": "A String", # Version of the application. You should update this field whenever the application changes in a way that affects the computation of the data.
        "name": "A String", # 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.
        "detailsUrl": "A String", # An optional URI that can be used to link back to the application.
      },
      "device": { # Representation of an integrated device (such as a phone or a wearable) that can hold sensors. Each sensor is exposed as a data source. # Representation of an integrated device (such as a phone or a wearable) that can hold sensors.
          #
          # 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:
          # - Distinguishing two similar sensors on different devices (the step counter on two nexus 5 phones, for instance)
          # - Display the source of data to the user (by using the device make / model)
          # - Treat data differently depending on sensor type (accelerometers on a watch may give different patterns than those on a phone)
          # - Build different analysis models for each device/version.
        "model": "A String", # End-user visible model name for the device.
        "version": "A String", # Version string for the device hardware/software.
        "type": "A String", # A constant representing the type of the device.
        "uid": "A String", # 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.
        "manufacturer": "A String", # Manufacturer of the product/hardware.
      },
      "dataStreamId": "A String", # A unique identifier for the data stream produced by this data source. The identifier includes:
          #
          #
          # - The physical device's manufacturer, model, and serial number (UID).
          # - The application'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.
          # - The data source's type.
          # - The data source's stream name.  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'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're not equal.
          #
          # The exact format of the data stream ID created by an Android application is: type:dataType.name:application.packageName:device.manufacturer:device.model:device.uid:dataStreamName
          #
          # The exact format of the data stream ID created by a REST client is: type:dataType.name:developer project number:device.manufacturer:device.model:device.uid:dataStreamName
          #
          # 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 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 developer project number in clear and normal form.
      "type": "A String", # A constant describing the type of this data source. Indicates whether this data source produces raw or derived data.
    }</pre>
</div>

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

Args:
  userId: string, Retrieve a data source for the person identified. Use me to indicate the authenticated user. Only me is supported at this time. (required)
  dataSourceId: string, The data stream ID of the data source to retrieve. (required)

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.
      "name": "A String", # An end-user visible name for this data source.
      "dataStreamName": "A String", # 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.
      "dataType": { # The data type defines the schema for a stream of data being collected by, inserted into, or queried from the Fitness API.
        "field": [ # 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.
            "optional": True or False,
            "name": "A String", # 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.
            "format": "A String", # The different supported formats for each field in a data type.
          },
        ],
        "name": "A String", # Each data type has a unique, namespaced, name. All data types in the com.google namespace are shared as part of the platform.
      },
      "dataQualityStandard": [ # 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.
        "A String",
      ],
      "application": { # Information about an application which feeds sensor data into the platform.
        "packageName": "A String", # 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.
        "version": "A String", # Version of the application. You should update this field whenever the application changes in a way that affects the computation of the data.
        "name": "A String", # 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.
        "detailsUrl": "A String", # An optional URI that can be used to link back to the application.
      },
      "device": { # Representation of an integrated device (such as a phone or a wearable) that can hold sensors. Each sensor is exposed as a data source. # Representation of an integrated device (such as a phone or a wearable) that can hold sensors.
          #
          # 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:
          # - Distinguishing two similar sensors on different devices (the step counter on two nexus 5 phones, for instance)
          # - Display the source of data to the user (by using the device make / model)
          # - Treat data differently depending on sensor type (accelerometers on a watch may give different patterns than those on a phone)
          # - Build different analysis models for each device/version.
        "model": "A String", # End-user visible model name for the device.
        "version": "A String", # Version string for the device hardware/software.
        "type": "A String", # A constant representing the type of the device.
        "uid": "A String", # 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.
        "manufacturer": "A String", # Manufacturer of the product/hardware.
      },
      "dataStreamId": "A String", # A unique identifier for the data stream produced by this data source. The identifier includes:
          #
          #
          # - The physical device's manufacturer, model, and serial number (UID).
          # - The application'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.
          # - The data source's type.
          # - The data source's stream name.  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'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're not equal.
          #
          # The exact format of the data stream ID created by an Android application is: type:dataType.name:application.packageName:device.manufacturer:device.model:device.uid:dataStreamName
          #
          # The exact format of the data stream ID created by a REST client is: type:dataType.name:developer project number:device.manufacturer:device.model:device.uid:dataStreamName
          #
          # 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 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 developer project number in clear and normal form.
      "type": "A String", # A constant describing the type of this data source. Indicates whether this data source produces raw or derived data.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(userId, dataTypeName=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 me to indicate the authenticated user. Only me 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)

Returns:
  An object of the form:

    {
    "dataSource": [ # 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.
          "name": "A String", # An end-user visible name for this data source.
          "dataStreamName": "A String", # 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.
          "dataType": { # The data type defines the schema for a stream of data being collected by, inserted into, or queried from the Fitness API.
            "field": [ # 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.
                "optional": True or False,
                "name": "A String", # 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.
                "format": "A String", # The different supported formats for each field in a data type.
              },
            ],
            "name": "A String", # Each data type has a unique, namespaced, name. All data types in the com.google namespace are shared as part of the platform.
          },
          "dataQualityStandard": [ # 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.
            "A String",
          ],
          "application": { # Information about an application which feeds sensor data into the platform.
            "packageName": "A String", # 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.
            "version": "A String", # Version of the application. You should update this field whenever the application changes in a way that affects the computation of the data.
            "name": "A String", # 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.
            "detailsUrl": "A String", # An optional URI that can be used to link back to the application.
          },
          "device": { # Representation of an integrated device (such as a phone or a wearable) that can hold sensors. Each sensor is exposed as a data source. # Representation of an integrated device (such as a phone or a wearable) that can hold sensors.
              #
              # 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:
              # - Distinguishing two similar sensors on different devices (the step counter on two nexus 5 phones, for instance)
              # - Display the source of data to the user (by using the device make / model)
              # - Treat data differently depending on sensor type (accelerometers on a watch may give different patterns than those on a phone)
              # - Build different analysis models for each device/version.
            "model": "A String", # End-user visible model name for the device.
            "version": "A String", # Version string for the device hardware/software.
            "type": "A String", # A constant representing the type of the device.
            "uid": "A String", # 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.
            "manufacturer": "A String", # Manufacturer of the product/hardware.
          },
          "dataStreamId": "A String", # A unique identifier for the data stream produced by this data source. The identifier includes:
              #
              #
              # - The physical device's manufacturer, model, and serial number (UID).
              # - The application'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.
              # - The data source's type.
              # - The data source's stream name.  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'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're not equal.
              #
              # The exact format of the data stream ID created by an Android application is: type:dataType.name:application.packageName:device.manufacturer:device.model:device.uid:dataStreamName
              #
              # The exact format of the data stream ID created by a REST client is: type:dataType.name:developer project number:device.manufacturer:device.model:device.uid:dataStreamName
              #
              # 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 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 developer project number in clear and normal form.
          "type": "A String", # A constant describing the type of this data source. Indicates whether this data source produces raw or derived data.
        },
    ],
  }</pre>
</div>

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

Data sources are identified by their dataStreamId.

Args:
  userId: string, Update the data source for the person identified. Use me to indicate the authenticated user. Only me is supported at this time. (required)
  dataSourceId: string, The data stream ID of the data source to update. (required)
  body: object, The request body. (required)
    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.
    "name": "A String", # An end-user visible name for this data source.
    "dataStreamName": "A String", # 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.
    "dataType": { # The data type defines the schema for a stream of data being collected by, inserted into, or queried from the Fitness API.
      "field": [ # 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.
          "optional": True or False,
          "name": "A String", # 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.
          "format": "A String", # The different supported formats for each field in a data type.
        },
      ],
      "name": "A String", # Each data type has a unique, namespaced, name. All data types in the com.google namespace are shared as part of the platform.
    },
    "dataQualityStandard": [ # 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.
      "A String",
    ],
    "application": { # Information about an application which feeds sensor data into the platform.
      "packageName": "A String", # 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.
      "version": "A String", # Version of the application. You should update this field whenever the application changes in a way that affects the computation of the data.
      "name": "A String", # 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.
      "detailsUrl": "A String", # An optional URI that can be used to link back to the application.
    },
    "device": { # Representation of an integrated device (such as a phone or a wearable) that can hold sensors. Each sensor is exposed as a data source. # Representation of an integrated device (such as a phone or a wearable) that can hold sensors.
        #
        # 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:
        # - Distinguishing two similar sensors on different devices (the step counter on two nexus 5 phones, for instance)
        # - Display the source of data to the user (by using the device make / model)
        # - Treat data differently depending on sensor type (accelerometers on a watch may give different patterns than those on a phone)
        # - Build different analysis models for each device/version.
      "model": "A String", # End-user visible model name for the device.
      "version": "A String", # Version string for the device hardware/software.
      "type": "A String", # A constant representing the type of the device.
      "uid": "A String", # 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.
      "manufacturer": "A String", # Manufacturer of the product/hardware.
    },
    "dataStreamId": "A String", # A unique identifier for the data stream produced by this data source. The identifier includes:
        # 
        # 
        # - The physical device's manufacturer, model, and serial number (UID).
        # - The application'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.
        # - The data source's type.
        # - The data source's stream name.  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'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're not equal.
        # 
        # The exact format of the data stream ID created by an Android application is: type:dataType.name:application.packageName:device.manufacturer:device.model:device.uid:dataStreamName
        # 
        # The exact format of the data stream ID created by a REST client is: type:dataType.name:developer project number:device.manufacturer:device.model:device.uid:dataStreamName
        # 
        # 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 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 developer project number in clear and normal form.
    "type": "A String", # A constant describing the type of this data source. Indicates whether this data source produces raw or derived data.
  }


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.
      "name": "A String", # An end-user visible name for this data source.
      "dataStreamName": "A String", # 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.
      "dataType": { # The data type defines the schema for a stream of data being collected by, inserted into, or queried from the Fitness API.
        "field": [ # 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.
            "optional": True or False,
            "name": "A String", # 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.
            "format": "A String", # The different supported formats for each field in a data type.
          },
        ],
        "name": "A String", # Each data type has a unique, namespaced, name. All data types in the com.google namespace are shared as part of the platform.
      },
      "dataQualityStandard": [ # 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.
        "A String",
      ],
      "application": { # Information about an application which feeds sensor data into the platform.
        "packageName": "A String", # 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.
        "version": "A String", # Version of the application. You should update this field whenever the application changes in a way that affects the computation of the data.
        "name": "A String", # 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.
        "detailsUrl": "A String", # An optional URI that can be used to link back to the application.
      },
      "device": { # Representation of an integrated device (such as a phone or a wearable) that can hold sensors. Each sensor is exposed as a data source. # Representation of an integrated device (such as a phone or a wearable) that can hold sensors.
          #
          # 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:
          # - Distinguishing two similar sensors on different devices (the step counter on two nexus 5 phones, for instance)
          # - Display the source of data to the user (by using the device make / model)
          # - Treat data differently depending on sensor type (accelerometers on a watch may give different patterns than those on a phone)
          # - Build different analysis models for each device/version.
        "model": "A String", # End-user visible model name for the device.
        "version": "A String", # Version string for the device hardware/software.
        "type": "A String", # A constant representing the type of the device.
        "uid": "A String", # 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.
        "manufacturer": "A String", # Manufacturer of the product/hardware.
      },
      "dataStreamId": "A String", # A unique identifier for the data stream produced by this data source. The identifier includes:
          #
          #
          # - The physical device's manufacturer, model, and serial number (UID).
          # - The application'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.
          # - The data source's type.
          # - The data source's stream name.  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'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're not equal.
          #
          # The exact format of the data stream ID created by an Android application is: type:dataType.name:application.packageName:device.manufacturer:device.model:device.uid:dataStreamName
          #
          # The exact format of the data stream ID created by a REST client is: type:dataType.name:developer project number:device.manufacturer:device.model:device.uid:dataStreamName
          #
          # 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 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 developer project number in clear and normal form.
      "type": "A String", # A constant describing the type of this data source. Indicates whether this data source produces raw or derived data.
    }</pre>
</div>

</body></html>