# Devices

The `device` object represents a [device](https://docs.seam.co/latest/~/revisions/DFdrUdS2jQOnbJTNDT5a/core-concepts/devices) that has been connected to Seam.

## `device` Properties

The `device` object has the following properties:

<table><thead><tr><th width="181">Property</th><th width="166.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>device_id</code></td><td>String (UUID)<br><em>Required</em></td><td>Unique identifier for the device.</td></tr><tr><td><code>device_type</code></td><td>String<br><em>Required</em></td><td>Type of the device.</td></tr><tr><td><code>display_name</code></td><td>String<br><em>Required</em></td><td>Display name for the device.</td></tr><tr><td><code>capabilities_supported</code></td><td>Array of strings<br><em>Required</em></td><td>Collection of capabilities that the device supports when connected to Seam.<br>See <a href="#capabilities_supported-values"><code>capabilities_supported</code> Values</a>.<br><strong>Important:</strong> Superseded by <a href="../../capability-guides/device-and-system-capabilities#capability-flags">capability flags</a>.</td></tr><tr><td><code>properties</code></td><td><p>Object</p><p><em>Required</em></p></td><td>Properties of the device.<br>See <a href="#device.properties-properties"><code>device.properties</code> Properties</a>.</td></tr><tr><td><code>location</code></td><td>Object<br><em>Optional</em></td><td>Read-only location information for the device.<br>See <a href="#location-properties"><code>location</code> Properties</a>.</td></tr><tr><td><code>connected_account_id</code></td><td>String (UUID)<br><em>Required</em></td><td>ID of the <a href="connected_accounts">connected account</a> associated with the device.</td></tr><tr><td><code>workspace_id</code></td><td>String (UUID)<br><em>Required</em></td><td>ID of the <a href="../core-concepts/workspaces">workspace</a> that contains the device.</td></tr><tr><td><code>errors</code></td><td>Array of objects<br><em>Required</em></td><td><p>Array of errors associated with the device.</p><p>Each error object within the array contains two fields: <code>error_code</code> and <code>message</code>.</p><p><code>error_code</code> is a string that uniquely identifies the type of error, enabling quick recognition and categorization of the issue.</p><p><code>message</code> provides a more detailed description of the error, offering insights into the issue and potentially how to rectify it.<br>See <a href="#device-error-types">Device Error Types</a>.</p></td></tr><tr><td><code>warnings</code></td><td>Array of objects<br><em>Required</em></td><td><p>Array of warnings associated with the device.</p><p>Each warning object within the array contains two fields: <code>warning_code</code> and <code>message</code>.</p><p><code>warning_code</code> is a string that uniquely identifies the type of warning, enabling quick recognition and categorization of the issue.</p><p><code>message</code> provides a more detailed description of the warning, offering insights into the issue and potentially how to rectify it.<br>See <a href="#device-warning-types">Device Warning Types</a>.</p></td></tr><tr><td><code>created_at</code></td><td>String (datetime)<br><em>Required</em></td><td>Date and time at which the device object was created.</td></tr><tr><td><code>is_managed</code></td><td>Boolean<br><em>Required</em></td><td>Indicates whether Seam manages the device.</td></tr><tr><td><code>custom_metadata</code></td><td>JSON object<br><em>Optional</em></td><td><p>Set of <code>custom_metadata</code> for the device.</p><p>Specify up to 50 keys, with key names up to 40 characters long. Accepts string or Boolean values. Strings are limited to 500 characters.</p></td></tr><tr><td><code>can_remotely_unlock</code></td><td>Boolean<br><em>Optional</em></td><td>Indicates whether the device can perform a <a href="../capability-guides/smart-locks/lock-and-unlock">remote unlock operation</a>. See <a href="../../capability-guides/device-and-system-capabilities#capability-flags">Capability Flags</a>.</td></tr><tr><td><code>can_remotely_lock</code></td><td>Boolean<br><em>Optional</em></td><td>Indicates whether the device can perform a <a href="../capability-guides/smart-locks/lock-and-unlock">remote lock operation</a>. See <a href="../../capability-guides/device-and-system-capabilities#capability-flags">Capability Flags</a>.</td></tr><tr><td><code>can_program_online_access_codes</code></td><td>Boolean<br><em>Optional</em></td><td>Indicates whether the device can <a href="../capability-guides/smart-locks/access-codes">program online access codes</a>. See <a href="../../capability-guides/device-and-system-capabilities#capability-flags">Capability Flags</a>.</td></tr><tr><td><code>can_program_offline_access_codes</code></td><td>Boolean<br><em>Optional</em></td><td>Indicates whether the device can <a href="../capability-guides/smart-locks/access-codes/offline-access-codes">program offline access codes</a>. See <a href="../../capability-guides/device-and-system-capabilities#capability-flags">Capability Flags</a>.</td></tr><tr><td><code>can_hvac_heat</code></td><td>Boolean<br><em>Optional</em></td><td>Indicates whether the thermostat device (in conjunction with the associated HVAC system) supports <a href="../capability-guides/thermostats/understanding-thermostat-concepts/hvac-mode">heat mode</a>. See <a href="../../capability-guides/device-and-system-capabilities#capability-flags">Capability Flags</a>.</td></tr><tr><td><code>can_hvac_cool</code></td><td>Boolean<br><em>Optional</em></td><td>Indicates whether the thermostat device (in conjunction with the associated HVAC system) supports <a href="../capability-guides/thermostats/understanding-thermostat-concepts/hvac-mode">cool mode</a>. See <a href="../../capability-guides/device-and-system-capabilities#capability-flags">Capability Flags</a>.</td></tr><tr><td><code>can_hvac_heat_cool</code></td><td>Boolean<br><em>Optional</em></td><td>Indicates whether the thermostat device (in conjunction with the associated HVAC system) supports <a href="../capability-guides/thermostats/understanding-thermostat-concepts/hvac-mode">heat-cool (auto) mode</a>. See <a href="../../capability-guides/device-and-system-capabilities#capability-flags">Capability Flags</a>.</td></tr><tr><td><code>can_turn_off_hvac</code></td><td>Boolean<br><em>Optional</em></td><td>Indicates whether the thermostat device (in conjunction with the associated HVAC system) supports <a href="../capability-guides/thermostats/understanding-thermostat-concepts/hvac-mode">off mode</a>. See <a href="../../capability-guides/device-and-system-capabilities#capability-flags">Capability Flags</a>.</td></tr><tr><td><code>can_simulate_removal</code></td><td>Boolean<br><em>Optional</em></td><td>Indicates whether you can simulate removal of the <a href="../developer-tools/sandbox-and-sample-data">sandbox device</a>. See <a href="../core-concepts/devices/testing-your-app-against-device-disconnection-and-removal">Testing Your App Against Device Disconnection and Removal</a>.</td></tr><tr><td><code>can_simulate_connection</code></td><td>Boolean<br><em>Optional</em></td><td>Indicates whether you can simulate connection (or reconnection) of the <a href="../developer-tools/sandbox-and-sample-data">sandbox device</a>. See <a href="../core-concepts/devices/testing-your-app-against-device-disconnection-and-removal">Testing Your App Against Device Disconnection and Removal</a>.</td></tr><tr><td><code>can_simulate_disconnection</code></td><td>Boolean<br><em>Optional</em></td><td>Indicates whether you can simulate disconnection of the <a href="../developer-tools/sandbox-and-sample-data">sandbox device</a>. See <a href="../core-concepts/devices/testing-your-app-against-device-disconnection-and-removal">Testing Your App Against Device Disconnection and Removal</a>.</td></tr></tbody></table>

### `capabilities_supported` Values

{% hint style="info" %}
Superseded by [capability flags](https://docs.seam.co/latest/~/revisions/DFdrUdS2jQOnbJTNDT5a/capability-guides/device-and-system-capabilities#capability-flags).
{% endhint %}

<table><thead><tr><th width="202">Capability</th><th>Description</th></tr></thead><tbody><tr><td><code>access_code</code></td><td>If present, the device can manage and utilize digital PIN codes for secure access.</td></tr><tr><td><code>lock</code></td><td>If present, the device controls a door locking mechanism, enabling the remote opening and closing of doors and other entry points.</td></tr><tr><td><code>noise_detection</code></td><td>If present, the device supports monitoring and responding to ambient noise levels.</td></tr><tr><td><code>thermostat</code></td><td>If present, the device can regulate and adjust indoor temperatures.</td></tr><tr><td><code>battery</code></td><td>If present, the device can manage battery life and health.</td></tr><tr><td><code>phone</code></td><td>If present, the device is a mobile phone.</td></tr></tbody></table>

### `device.properties` Properties

<table><thead><tr><th width="230.33333333333331">Property</th><th width="129">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>online</code></td><td>Boolean<br><em>Required</em></td><td>Indicates whether the device is online.</td></tr><tr><td><code>accessory_keypad</code></td><td>Object<br><em>Optional</em></td><td>Accessory keypad state. See <a href="#accessory_keypad-properties"><code>accessory_keypad</code> Properties</a>.</td></tr><tr><td><code>appearance</code></td><td>Object<br><em>Required</em></td><td>Appearance-related properties, including the read-only <code>name</code> of the device, as seen from the provider API and application.</td></tr><tr><td><code>model</code></td><td>Object<br><em>Required</em></td><td>Device model properties. See <a href="#model-properties"><code>model</code> Properties</a>.</td></tr><tr><td><code>has_direct_power</code></td><td>Boolean<br><em>Optional</em></td><td>Indicates whether the device has direct power.</td></tr><tr><td><code>battery_level</code></td><td>Number<br><em>Required</em></td><td>Indicates the battery level of the device as a decimal value between <code>0</code> and <code>1</code>, inclusive.<br>If the device is offline, Seam does not return this property.<br>Deprecated. Use <a href="#device-battery-properties"><code>device.properties.battery.level</code></a> instead.</td></tr><tr><td><code>battery</code></td><td>Object<br><em>Optional</em></td><td><p>Device battery properties.</p><p>If the device is offline, Seam does not return this property.<br>See <a href="#device-battery-properties">Device<code>battery</code> Properties</a>.</p></td></tr><tr><td><code>manufacturer</code></td><td>String<br><em>Optional</em></td><td>Manufacturer of the device. See <a href="#device-manufacturers">Device Manufacturers</a>.</td></tr><tr><td><code>image_url</code></td><td>String (URL)<br><em>Optional</em></td><td>Image URL for the device or placeholder image URL if a device-specific image is unavailable.</td></tr><tr><td><code>image_alt_text</code></td><td>String<br><em>Optional</em></td><td>Alternative text for the device image.</td></tr><tr><td><code>serial_number</code></td><td>String<br><em>Optional</em></td><td>Serial number of the device.</td></tr><tr><td><code>online_access_codes_enabled</code></td><td>Boolean<br><em>Optional</em></td><td>Indicates whether it is currently possible to use <a href="../capability-guides/smart-locks/access-codes">online access codes</a> for the device.<br>Superseded by the <code>device.properties.can_program_online_access_codes</code> <a href="../../capability-guides/device-and-system-capabilities#capability-flags">capability flag</a>.</td></tr><tr><td><code>offline_access_codes_enabled</code></td><td>Boolean<br><em>Optional</em></td><td>Indicates whether it is currently possible to use <a href="../capability-guides/smart-locks/access-codes/offline-access-codes">offline access codes</a> for the device.<br>Superseded by the <code>device.properties.can_program_offline_access_codes</code> <a href="../../capability-guides/device-and-system-capabilities#capability-flags">capability flag</a>.</td></tr><tr><td><code>noise_level_decibels</code></td><td>Number<br><em>Optional</em></td><td>Current noise level in decibels, if the device supports noise detection.</td></tr><tr><td><code>currently_triggering_noise_threshold_ids</code></td><td>Array of strings<br><em>Optional</em></td><td>Array of noise threshold IDs that are currently triggering.</td></tr><tr><td><code>code_constraints</code></td><td>Array of objects<br><em>Optional</em></td><td><p>Constraints on access codes that can be set on the device.</p><p>Applicable to devices that support access codes.<br>See <a href="#access-code-constraints">Access Code Constraints</a>.</p></td></tr><tr><td><code>supported_code_lengths</code></td><td>Array of numbers<br><em>Optional</em></td><td><p>Supported code lengths for the device.</p><p>For example, <code>[4,5]</code> means that <code>1234</code> and <code>12345</code> are valid codes, but <code>123</code> and <code>123456</code> are invalid codes.<br>Applicable to devices that support access codes.</p></td></tr><tr><td><code>max_active_codes_supported</code></td><td>Number<br><em>Optional</em></td><td>Maximum number of codes that can exist on the device at one time.<br>Applicable to devices that support access codes.</td></tr><tr><td><code>supports_backup_access_code_pool</code></td><td>Boolean<br><em>Optional</em></td><td>Indicates whether the device supports <a href="../capability-guides/smart-locks/access-codes/backup-access-codes">backup access code pools</a>.<br>Applicable to devices that support access codes.</td></tr><tr><td><code>has_native_entry_events</code></td><td>Boolean<br><em>Optional</em></td><td>Indicates whether Seam receives lock and unlock events from the device provider.</td></tr><tr><td><code>locked</code></td><td>Boolean<br><em>Optional</em></td><td><p>Indicates whether the device is locked.</p><p>Applicable to locks.<br>If the device is offline, Seam does not return this property.</p></td></tr><tr><td><code>keypad_battery</code></td><td>Object<br><em>Optional</em></td><td><p>Keypad battery properties.</p><p>Applicable to locks.</p><p>See <a href="#keypad_battery-properties"><code>keypad_battery</code> Properties</a>.</p></td></tr><tr><td><code>door_open</code></td><td>Boolean<br><em>Optional</em></td><td><p>Indicates whether the door is open.</p><p>Applicable to locks.<br>If the device is offline, Seam does not return this property.</p></td></tr><tr><td><code>temperature_fahrenheit</code></td><td>Number<br><em>Required</em></td><td>Temperature, measured in Fahrenheit.<br>Applicable to thermostats.</td></tr><tr><td><code>temperature_celsius</code></td><td>Number<br><em>Required</em></td><td>Temperature, measured in Celsius.<br>Applicable to thermostats.</td></tr><tr><td><code>relative_humidity</code></td><td>Number<br><em>Required</em></td><td>Relative humidity, the amount of moisture in the air compared to the maximum amount of moisture the air can hold at a given temperature. It is a percentage expressed as a number between <code>0</code> and <code>1</code>, inclusive.<br>Applicable to thermostats.</td></tr><tr><td><code>available_hvac_mode_settings</code></td><td>Array of enums (strings)</td><td><p>List of the available HVAC mode settings for the thermostat.<br>Possible values:</p><ul><li><code>cool</code></li><li><code>heat</code></li><li><code>heat_cool</code></li><li><code>off</code></li></ul><p>Applicable to thermostats.</p></td></tr><tr><td><code>available_fan_mode_settings</code></td><td>Array of enums (strings)</td><td><p>List of the available fan mode settings for the thermostat.<br>Possible values:</p><ul><li><code>auto</code></li><li><code>on</code></li><li><code>circulate</code></li></ul><p>Applicable to thermostats.</p></td></tr><tr><td><code>is_heating</code></td><td>Boolean<br><em>Required</em></td><td>Indicates whether the heating system is currently heating.<br>Applicable to thermostats.</td></tr><tr><td><code>is_cooling</code></td><td>Boolean<br><em>Required</em></td><td>Indicates whether the cooling system is currently cooling.<br>Applicable to thermostats.</td></tr><tr><td><code>is_fan_running</code></td><td>Boolean<br><em>Required</em></td><td>Indicates whether the fan is currently running.<br>Applicable to thermostats.</td></tr><tr><td><code>fan_mode_setting</code></td><td>Enum (string)<br><em>Required</em></td><td><p>Fan mode setting of the thermostat.</p><p>Deprecated. Use <code>current_climate_setting.fan_mode_setting</code> instead.</p><p>Applicable to thermostats.</p></td></tr><tr><td><code>is_temporary_manual_override_active</code></td><td>Boolean<br><em>Required</em></td><td>Indicates whether the current thermostat settings differ from the configured <code>current_climate_setting</code>.<br>Applicable to thermostats.</td></tr><tr><td><code>current_climate_setting</code></td><td>Object<br><em>Required</em></td><td>Current climate setting for the thermostat.<br>Applicable to thermostats.<br>See <a href="#current_climate_setting-properties"><code>current_climate_setting</code> Properties</a>.</td></tr><tr><td><code>default_climate_setting</code></td><td>Object<br><em>Required</em></td><td>Deprecated. Use <code>fallback_climate_preset_key</code> to <a href="../capability-guides/thermostats/creating-and-managing-climate-presets/setting-the-fallback-climate-preset">specify a fallback climate preset</a> instead.</td></tr><tr><td><code>available_climate_presets</code></td><td>Array of objects<br><em>Required</em></td><td>Set of <a href="../capability-guides/thermostats/creating-and-managing-climate-presets">climate presets</a> that are available for the thermostat device.<br>See <a href="#available_climate_presets-properties"><code>available_climate_presets</code> Properties</a>.</td></tr><tr><td><code>fallback_climate_preset_key</code></td><td>String<br><em>Optional</em></td><td>Key that identifies the current <a href="../capability-guides/thermostats/creating-and-managing-climate-presets/setting-the-fallback-climate-preset">fallback climate preset</a>.</td></tr><tr><td><code>active_thermostat_schedule</code></td><td>Object<br><em>Optional</em></td><td>Currently active <a href="../capability-guides/thermostats/creating-and-managing-thermostat-schedules">thermostat schedule</a>.<br>See <a href="#active_thermostat_schedule-properties"><code>active_thermostat_schedule</code> Properties</a>.</td></tr><tr><td><code>min_cooling_set_point_celsius</code></td><td>Number<br><em>Required</em></td><td>Minimum cooling <a href="#climate-set-points">set point</a> that this thermostat supports, measured in Celsius.<br>Applicable to thermostats.</td></tr><tr><td><code>min_cooling_set_point_fahrenheit</code></td><td>Number<br><em>Required</em></td><td>Minimum cooling <a href="#climate-set-points">set point</a> that this thermostat supports, measured in Fahrenheit.<br>Applicable to thermostats.</td></tr><tr><td><code>max_cooling_set_point_celsius</code></td><td>Number<br><em>Required</em></td><td>Maximum cooling <a href="#climate-set-points">set point</a> that this thermostat supports, measured in Celsius.<br>Applicable to thermostats.</td></tr><tr><td><code>max_cooling_set_point_fahrenheit</code></td><td>Number<br><em>Required</em></td><td>Maximum cooling <a href="#climate-set-points">set point</a> that this thermostat supports, measured in Fahrenheit.<br>Applicable to thermostats.</td></tr><tr><td><code>min_heating_set_point_celsius</code></td><td>Number<br><em>Required</em></td><td>Minimum heating <a href="#climate-set-points">set point</a> that this thermostat supports, measured in Celsius.<br>Applicable to thermostats.</td></tr><tr><td><code>min_heating_set_point_fahrenheit</code></td><td>Number<br><em>Required</em></td><td>Minimum heating <a href="#climate-set-points">set point</a> that this thermostat supports, measured in Fahrenheit.<br>Applicable to thermostats.</td></tr><tr><td><code>max_heating_set_point_celsius</code></td><td>Number<br><em>Required</em></td><td>Maximum heating <a href="#climate-set-points">set point</a> that this thermostat supports, measured in Celsius.<br>Applicable to thermostats.</td></tr><tr><td><code>max_heating_set_point_fahrenheit</code></td><td>Number<br><em>Required</em></td><td>Maximum heating <a href="#climate-set-points">set point</a> that this thermostat supports, measured in Fahrenheit.<br>Applicable to thermostats.</td></tr><tr><td><code>min_heating_cooling_delta_celsius</code></td><td>Number<br><em>Required</em></td><td>Minimum temperature difference—that is, delta—in degrees Celsius between the cooling and heating set points when in heat-cool (auto) mode.<br>Applicable to thermostats.</td></tr><tr><td><code>min_heating_cooling_delta_fahrenheit</code></td><td>Number<br><em>Required</em></td><td>Minimum temperature difference—that is, delta—in degrees Fahrenheit between the cooling and heating set points when in heat-cool (auto) mode.<br>Applicable to thermostats.</td></tr><tr><td><code>temperature_threshold</code></td><td>Object<br><em>Optional</em></td><td>Acceptable temperature bounds consisting of a temperature range or single upper or lower temperature. Seam emits a <code>thermostat.temperature_threshold_exceeded</code> event if the thermostat reports a temperature outside the specified threshold.<br>See <a href="#temperature_threshold-properties"><code>temperature_threshold</code> Properties</a>.</td></tr><tr><td><code>XXX_metadata</code></td><td>Object</td><td>Manufacturer-specific metadata for the device, where <code>XXX</code> is the manufacturer.</td></tr></tbody></table>

### `location` Properties

<table><thead><tr><th width="204">Property</th><th width="128.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>location_name</code></td><td>String</td><td>Read-only name of the device location.</td></tr><tr><td><code>timezone</code></td><td>String</td><td>Read-only time zone of the device location, as a name from the IANA time zone database.</td></tr></tbody></table>

### `accessory_keypad` Properties

<table><thead><tr><th width="204">Property</th><th width="128.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>is_connected</code></td><td>Boolean<br><em>Required</em></td><td>Indicates whether the accessory keypad is connected to the device.</td></tr><tr><td><code>battery</code></td><td>Object<br><em>Optional</em></td><td>Keypad battery properties. See <a href="#keypad-battery-properties">Keypad <code>battery</code> Properties</a>.</td></tr></tbody></table>

### Keypad `battery` Properties

<table><thead><tr><th width="204">Property</th><th width="128.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>level</code></td><td>Number<br><em>Required</em></td><td>Indicates the battery level of the keypad as a decimal value between <code>0</code> and <code>1</code>, inclusive.</td></tr></tbody></table>

### `keypad_battery` Properties

<table><thead><tr><th width="204">Property</th><th width="128.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>level</code></td><td>Number<br><em>Required</em></td><td>Indicates the battery level of the keypad as a decimal value between <code>0</code> and <code>1</code>, inclusive.</td></tr></tbody></table>

### `model` Properties

<table><thead><tr><th width="204">Property</th><th width="128.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>can_connect_accessory_keypad</code></td><td>Boolean<br><em>Optional</em></td><td>Indicates whether the device can connect a accessory keypad.</td></tr><tr><td><code>display_name</code></td><td>String<br><em>Required</em></td><td>Display name of the device model.</td></tr><tr><td><code>manufacturer_display_name</code></td><td>String<br><em>Required</em></td><td>Display name that corresponds to the manufacturer-specific terminology for the device.</td></tr><tr><td><code>has_built_in_keypad</code></td><td>Boolean<br><em>Optional</em></td><td>Indicates whether the device has a built in accessory keypad.</td></tr><tr><td><code>offline_access_codes_supported</code></td><td>Boolean<br><em>Optional</em></td><td>Indicates whether the device supports <a href="../capability-guides/smart-locks/access-codes/offline-access-codes">offline access codes</a>.<br>Superseded by the <code>device.properties.can_program_offline_access_codes</code> <a href="../../capability-guides/device-and-system-capabilities#capability-flags">capability flag</a>.</td></tr><tr><td><code>online_access_codes_supported</code></td><td>Boolean<br><em>Optional</em></td><td>Indicates whether the device supports <a href="../capability-guides/smart-locks/access-codes">online access codes</a>.<br>Superseded by the <code>device.properties.can_program_online_access_codes</code> <a href="../../capability-guides/device-and-system-capabilities#capability-flags">capability flag</a>.</td></tr><tr><td><code>accessory_keypad_supported</code></td><td>Boolean<br><em>Optional</em></td><td>Indicates whether the device supports an accessory keypad.<br>Deprecated. Use <code>device.properties.model.can_connect_accessory_keypad</code> instead.</td></tr></tbody></table>

### Device `battery` Properties

If the device is offline, Seam does not return these properties.

<table><thead><tr><th width="204">Property</th><th width="128.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>level</code></td><td>Number<br><em>Required</em></td><td>Indicates the battery level of the device as a decimal value between <code>0</code> and <code>1</code>, inclusive.</td></tr><tr><td><code>status</code></td><td>Enum (string)<br>Required</td><td><p>Represents the current status of the battery charge level.</p><p>Values are:</p><ul><li><code>critical</code>: Indicates an extremely low level, suggesting imminent shutdown or an urgent need for charging.</li><li><code>low</code>: Signifies that the battery is under the preferred threshold and should be charged soon.</li><li><code>good</code>: Denotes a satisfactory charge level, adequate for normal use without the immediate need for recharging.</li><li><code>full</code>: Represents a battery that is fully charged, providing the maximum duration of usage.</li></ul></td></tr></tbody></table>

### `current_climate_setting` Properties

<table><thead><tr><th width="204">Property</th><th width="128.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>climate_preset_key</code></td><td>String<br><em>Required</em></td><td>Unique key to identify the current <a href="../capability-guides/thermostats/creating-and-managing-climate-presets">climate preset</a>.</td></tr><tr><td><code>can_edit</code></td><td>Boolean<br><em>Required</em></td><td>Indicates whether the current climate preset can be edited.</td></tr><tr><td><code>can_delete</code></td><td>Boolean<br><em>Required</em></td><td>Indicates whether the current climate preset can be deleted.</td></tr><tr><td><code>name</code></td><td>String<br><em>Optional</em></td><td>User-friendly name to identify the current climate preset.</td></tr><tr><td><code>display_name</code></td><td>String<br><em>Required</em></td><td>Display name for the current climate preset.</td></tr><tr><td><code>fan_mode_setting</code></td><td>Enum (string)<br><em>Required</em></td><td><p>Current desired <a href="../../capability-guides/thermostats/configure-current-climate-settings#fan-mode-settings">fan mode setting</a>.</p><p>Possible values:</p><ul><li><code>auto</code></li><li><code>on</code></li><li><code>circulate</code></li></ul></td></tr><tr><td><code>hvac_mode_setting</code></td><td>Enum (string)<br><em>Required</em></td><td><p>Current desired <a href="../../capability-guides/thermostats/configure-current-climate-settings#hvac-settings">HVAC mode setting</a>.</p><p>Possible values:</p><ul><li><code>cool</code></li><li><code>heat</code></li><li><code>heat_cool</code></li><li><code>off</code></li></ul></td></tr><tr><td><code>cooling_set_point_celsius</code></td><td>Number<br><em>Optional</em></td><td>Temperature to which the thermostat should currently cool (in °C). See also <a href="../capability-guides/thermostats/understanding-thermostat-concepts/set-points">Set Points</a>.</td></tr><tr><td><code>heating_set_point_celsius</code></td><td>Number<br><em>Optional</em></td><td>Temperature to which the thermostat should currently heat (in °C).</td></tr><tr><td><code>cooling_set_point_fahrenheit</code></td><td>Number<br><em>Optional</em></td><td>Temperature to which the thermostat should currently cool (in °F).</td></tr><tr><td><code>heating_set_point_fahrenheit</code></td><td>Number<br><em>Optional</em></td><td>Temperature to which the thermostat should currently heat (in °F).</td></tr><tr><td><code>manual_override_allowed</code></td><td>Boolean<br><em>Required</em></td><td>Indicates whether another user can use the thermostat or API to override this climate setting.<br>Deprecated. Use <code>thermostat_schedule.is_override_allowed</code> instead.</td></tr></tbody></table>

### `available_climate_presets` Properties

<table><thead><tr><th width="204">Property</th><th width="128.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>climate_preset_key</code></td><td>String<br><em>Required</em></td><td>Unique key to identify the <a href="../capability-guides/thermostats/creating-and-managing-climate-presets">climate preset</a>.</td></tr><tr><td><code>can_edit</code></td><td>Boolean<br><em>Required</em></td><td>Indicates whether the climate preset can be edited.</td></tr><tr><td><code>can_delete</code></td><td>Boolean<br><em>Required</em></td><td>Indicates whether the climate preset can be deleted.</td></tr><tr><td><code>name</code></td><td>String<br><em>Optional</em></td><td>User-friendly name to identify the climate preset.</td></tr><tr><td><code>display_name</code></td><td>String<br><em>Required</em></td><td>Display name for the climate preset.</td></tr><tr><td><code>fan_mode_setting</code></td><td>Enum (string)<br><em>Required</em></td><td><p>Desired <a href="../../capability-guides/thermostats/configure-current-climate-settings#fan-mode-settings">fan mode setting</a>.</p><p>Possible values:</p><ul><li><code>auto</code></li><li><code>on</code></li><li><code>circulate</code></li></ul></td></tr><tr><td><code>hvac_mode_setting</code></td><td>Enum (string)<br><em>Required</em></td><td><p>Desired <a href="../../capability-guides/thermostats/configure-current-climate-settings#hvac-settings">HVAC mode setting</a>.</p><p>Possible values:</p><ul><li><code>cool</code></li><li><code>heat</code></li><li><code>heat_cool</code></li><li><code>off</code></li></ul></td></tr><tr><td><code>cooling_set_point_celsius</code></td><td>Number<br><em>Optional</em></td><td>Temperature to which the thermostat should cool (in °C). See also <a href="../capability-guides/thermostats/understanding-thermostat-concepts/set-points">Set Points</a>.</td></tr><tr><td><code>heating_set_point_celsius</code></td><td>Number<br><em>Optional</em></td><td>Temperature to which the thermostat should heat (in °C).</td></tr><tr><td><code>cooling_set_point_fahrenheit</code></td><td>Number<br><em>Optional</em></td><td>Temperature to which the thermostat should cool (in °F).</td></tr><tr><td><code>heating_set_point_fahrenheit</code></td><td>Number<br><em>Optional</em></td><td>Temperature to which the thermostat should heat (in °F).</td></tr><tr><td><code>manual_override_allowed</code></td><td>Boolean<br><em>Required</em></td><td>Indicates whether another user can use the thermostat or API to override this climate setting.<br>Deprecated. Use <code>thermostat_schedule.is_override_allowed</code> instead.</td></tr></tbody></table>

### `active_thermostat_schedule` Properties

<table><thead><tr><th width="204">Property</th><th width="128.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>thermostat_schedule_id</code></td><td>String (UUID)<br><em>Required</em></td><td>ID of the active <a href="../capability-guides/thermostats/creating-and-managing-thermostat-schedules">thermostat schedule</a>.</td></tr><tr><td><code>device_id</code></td><td>String (UUID)<br><em>Required</em></td><td>ID of the thermostat device.</td></tr><tr><td><code>name</code></td><td>String<br><em>Optional</em></td><td>User-friendly name to identify the thermostat schedule.</td></tr><tr><td><code>climate_preset_key</code></td><td>String<br><em>Required</em></td><td>Key of the <a href="../capability-guides/thermostats/creating-and-managing-climate-presets">climate preset</a> to use for the thermostat schedule.</td></tr><tr><td><code>max_override_period_minutes</code></td><td>Integer<br><em>Required</em></td><td>Number of minutes for which a person at the thermostat can change the thermostat's settings after the activation of the scheduled climate preset. See also <a href="../../capability-guides/thermostats/creating-and-managing-thermostat-schedules#specifying-manual-override-permissions">Specifying Manual Override Permissions</a>.</td></tr><tr><td><code>starts_at</code></td><td>String (Datetime)<br><em>Required</em></td><td>Date and time at which the thermostat schedule starts, in <a href="https://www.iso.org/iso-8601-date-and-time-format.html">ISO 8601</a> format.</td></tr><tr><td><code>is_override_allowed</code></td><td>Boolean<br><em>Optional</em></td><td>Indicates whether a person at the thermostat or using the API can change the thermostat's settings.</td></tr><tr><td><code>ends_at</code></td><td>String (Datetime)<br><em>Required</em></td><td>Date and time at which the thermostat schedule ends, in <a href="https://www.iso.org/iso-8601-date-and-time-format.html">ISO 8601</a> format.</td></tr><tr><td><code>created_at</code></td><td>String (Datetime)<br><em>Required</em></td><td>Date and time at which the thermostat schedule was created.</td></tr><tr><td><code>errors</code></td><td>Array of objects<br><em>Optional</em></td><td>Array of errors associated with the thermostat schedule. Each error object within the array contains two fields: <code>error_code</code> and <code>message</code>. <code>error_code</code> is a string that uniquely identifies the type of error, enabling quick recognition and categorization of the issue. <code>message</code> provides a more detailed description of the error, offering insights into the issue and potentially how to rectify it.</td></tr></tbody></table>

### `temperature_threshold` Properties

<table><thead><tr><th width="204">Property</th><th width="128.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>lower_limit_celsius</code></td><td>Number<br><em>Optional</em></td><td>Lower acceptable temperature bound in degrees Celsius.</td></tr><tr><td><code>lower_limit_fahrenheit</code></td><td>Number<br><em>Optional</em></td><td>Lower acceptable temperature bound in degrees Fahrenheit.</td></tr><tr><td><code>upper_limit_celsius</code></td><td>Number<br><em>Optional</em></td><td>Upper acceptable temperature bound in degrees Celsius.</td></tr><tr><td><code>upper_limit_fahrenheit</code></td><td>Number<br><em>Optional</em></td><td>Upper acceptable temperature bound in degrees Fahrenheit.</td></tr></tbody></table>

## Device Error Types

Errors are returned in a list. For example:

```
"errors": [
  {
    "is_device_error": true,
    "error_code": "device_disconnected",
    "message": "Device Disconnected, you may need to reconnect the device.",
    "created_at": "2023-06-27T22:50:19.440Z
  }
]
```

### Generic Errors

Seam recommends adding error handling logic to you app for each generic error in this table. Seam may add more generic errors in the future, so your app should include a fallback case if it encounters an unknown generic error code.

<table><thead><tr><th width="263">Error Type</th><th>Description</th></tr></thead><tbody><tr><td><code>device_disconnected</code></td><td>Device is disconnected.</td></tr><tr><td><code>device_removed</code></td><td>Device has been removed from the connected account. Seam can no longer sync with this device.</td></tr><tr><td><code>hub_disconnected</code></td><td>The hub that the device is connected to is offline. Seam is unable to sync updates to this device.</td></tr></tbody></table>

### Specific Errors

When Seam is able to provide more specific information beyond one of the [generic errors](#generic-errors), one or more errors from the list of specific errors may appear. This gives your app the option to display additional context or suggest provider specific resolutions.

{% hint style="info" %}
If the connected account associated with a device has an error, it is attached to the device alongside any other device errors. Treat these errors as specific errors.
{% endhint %}

| Error Type                          | Description                                                                                                                                                                         |
| ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `missing_device_credentials`        | Missing device credentials. Create a new [Connect Webview](https://docs.seam.co/latest/~/revisions/DFdrUdS2jQOnbJTNDT5a/core-concepts/connect-webviews) to provide the credentials. |
| `ttlock_lock_not_paired_to_gateway` | The lock is not paired with a gateway. Seam cannot unlock or program access codes on the lock. Add a gateway to enable support.                                                     |

## Device Warning Types

Warnings are returned in a list. For example:

```
"warnings": [
  {
    "warning_code": "device_has_flaky_connection",
    "message": "Device has a flaky connection to the internet.",
    "created_at": "2023-06-27T22:50:19.440Z
  }
]
```

| Warning Type                                | Description                                                                                                                                                                                                                                 |
| ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `device_has_flaky_connection`               | Device has a flaky connection to the internet.                                                                                                                                                                                              |
| `third_party_integration_detected`          | We detected that another third-party service (for example, Operto) is being used to manage this device. This situation may cause access codes that Seam sets to fail because the third-party service is making modifications to Seam codes. |
| `salto_office_mode`                         | Lock is in office mode. Access codes will not unlock doors. You can disable office mode in the Salto dashboard.                                                                                                                             |
| `salto_privacy_mode`                        | Lock is in privacy mode. Access Codes will not unlock doors. You can disable privacy mode by pressing the back of the lock.                                                                                                                 |
| `ttlock_lock_gateway_unlocking_not_enabled` | Turn on the remote unlock feature in the lock settings to enable unlocks. This feature must be turned on from the mobile app while near the door lock.                                                                                      |

## `device` Methods

You can perform the following actions on `device` objects:

* [List devices](https://docs.seam.co/latest/~/revisions/DFdrUdS2jQOnbJTNDT5a/api/devices/list)
* [List device providers](https://docs.seam.co/latest/~/revisions/DFdrUdS2jQOnbJTNDT5a/api/devices/list_device_providers)
* [Get a device](https://docs.seam.co/latest/~/revisions/DFdrUdS2jQOnbJTNDT5a/api/devices/get)
* [Update a device](https://docs.seam.co/latest/~/revisions/DFdrUdS2jQOnbJTNDT5a/api/devices/update)
* [List unmanaged devices](https://docs.seam.co/latest/~/revisions/DFdrUdS2jQOnbJTNDT5a/api/devices/unmanaged/list)
* [Get an unmanaged devices](https://github.com/seamapi/docs/blob/main/docs/api-clients/devices/unmanaged/get/README.md)
* [Update an unmanaged device](https://docs.seam.co/latest/~/revisions/DFdrUdS2jQOnbJTNDT5a/api/devices/unmanaged/update)
