# Telemetry

> Track state, logger sync, KV values, routes, and downstream data flow.

Telemetry is data emitted by devices, such as measurements, status, events, or operational signals. In Infuse-IoT Cloud, the API surface currently exposes the operational side of telemetry: latest device state, routes, logger progress, and device key-value entries.

Use Infuse-IoT Cloud to understand what the device last reported and how to communicate with it. Use Infuse-DB for raw and computed time-series records after telemetry is ingested into a dataset.

## Console Views

The console exposes operational telemetry context from the device detail page:

<table>
<thead>
  <tr>
    <th>
      Device detail area
    </th>
    
    <th>
      Use
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      Summary
    </td>
    
    <td>
      Review last seen time, status, application ID, and application version.
    </td>
  </tr>
  
  <tr>
    <td>
      KV Store
    </td>
    
    <td>
      Inspect device configuration and state entries, including decoded values where definitions are available.
    </td>
  </tr>
  
  <tr>
    <td>
      Logger Sync
    </td>
    
    <td>
      Inspect per-logger reported/downloaded blocks, timestamps, and download enablement.
    </td>
  </tr>
  
  <tr>
    <td>
      RPCs
    </td>
    
    <td>
      Review command activity and responses for the device.
    </td>
  </tr>
</tbody>
</table>

Use these views for support and operations. Use Infuse-DB for queryable time-series data and long-term analysis.

## Device State

Device state represents the latest operational state known for a device. It can be read by record ID or by `deviceId`, and updated by backend services when they receive trusted state changes.

<table>
<thead>
  <tr>
    <th>
      Task
    </th>
    
    <th>
      Endpoint
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      Read state by record ID
    </td>
    
    <td>
      <code>
        GET /device/id/{id}/state
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      Update state by record ID
    </td>
    
    <td>
      <code>
        PUT /device/id/{id}/state
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      Read state by device ID
    </td>
    
    <td>
      <code>
        GET /device/deviceId/{deviceId}/state
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      List devices with state
    </td>
    
    <td>
      <code>
        GET /device-and-state
      </code>
    </td>
  </tr>
</tbody>
</table>

## Routes

Route data captures the last known communication path for a device. It is used by downlink workflows such as RPC commands.

<table>
<thead>
  <tr>
    <th>
      Task
    </th>
    
    <th>
      Endpoint
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      Read last route for one device
    </td>
    
    <td>
      <code>
        GET /device/deviceId/{deviceId}/lastRoute
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      Read last routes for multiple devices
    </td>
    
    <td>
      <code>
        POST /device/lastRoute
      </code>
    </td>
  </tr>
</tbody>
</table>

## Logger State

Logger state tracks per-logger download progress and whether logger download is enabled.

<table>
<thead>
  <tr>
    <th>
      Task
    </th>
    
    <th>
      Endpoint
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      Read one logger state
    </td>
    
    <td>
      <code>
        GET /device/deviceId/{deviceId}/loggerState/{index}
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      Update one logger state
    </td>
    
    <td>
      <code>
        PATCH /device/deviceId/{deviceId}/loggerState/{index}
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      Read all logger states
    </td>
    
    <td>
      <code>
        GET /device/deviceId/{deviceId}/loggerStates
      </code>
    </td>
  </tr>
</tbody>
</table>

## KV Entries

KV entries represent device-side configuration or state values. Entries can be decoded when the relevant KV definitions are known. Pending updates let your backend request device-side changes and track their status.

<table>
<thead>
  <tr>
    <th>
      Task
    </th>
    
    <th>
      Endpoint
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      List entries
    </td>
    
    <td>
      <code>
        GET /device/deviceId/{deviceId}/kv/entries
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      Read one entry
    </td>
    
    <td>
      <code>
        GET /device/deviceId/{deviceId}/kv/entries/{keyId}
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      Read pending or historical updates
    </td>
    
    <td>
      <code>
        GET /device/deviceId/{deviceId}/kv/entries/{keyId}/updates
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      Create an update
    </td>
    
    <td>
      <code>
        POST /device/deviceId/{deviceId}/kv/entries/{keyId}/updates
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      Cancel a pending update
    </td>
    
    <td>
      <code>
        DELETE /device/deviceId/{deviceId}/kv/entries/{keyId}/updates
      </code>
    </td>
  </tr>
</tbody>
</table>

The console can show decoded KV values when KV definitions are available. If a definition is unavailable, use the raw base64 view. For more detail, see [Device Configuration](/docs/infuse-iot-cloud/device-configuration).

## Moving Data To Infuse-DB

Infuse-IoT Cloud is the device communication and operational context layer. Infuse-DB is the scalable time-series data layer. A typical data pipeline receives telemetry from devices or gateways, uses Infuse-IoT Cloud identifiers and definitions to interpret the data, then writes raw or computed streams into Infuse-DB for live and historical fleet access.

For a cross-product flow, see [Stream IoT Data to Infuse-DB](/guides/data/stream-iot-data-to-infuse-db).
