diff --git a/docs/api/access_codes/README.md b/docs/api/access_codes/README.md
index f58d8241c..d46204f60 100644
--- a/docs/api/access_codes/README.md
+++ b/docs/api/access_codes/README.md
@@ -2414,245 +2414,243 @@ Unable to confirm that the access code is set on Kwikset device.
## Errors
-**`account_disconnected`**
+**`wyze_potential_duplicate_code`**
-Indicates that the account is disconnected.
+Potential duplicate access code detected.
---
-**`august_device_programming_delay`**
+**`wyze_duplicate_code_name`**
-Access code has not yet been fully moved to the device.
+Duplicate access code name detected.
---
-**`august_device_slots_full`**
+**`smartthings_no_free_slots_available`**
-All access code slots on the device are full.
+No free slots available on the device.
---
-**`august_lock_invalid_code_length`**
+**`smartthings_failed_to_set_after_multiple_retries`**
-Invalid code length for August lock.
+Failed to set code after multiple retries.
---
-**`august_lock_missing_keypad`**
+**`smartthings_failed_to_set_access_code`**
-August lock is missing a keypad.
+Failed to set code on SmartThings device.
---
-**`august_lock_temporarily_offline`**
+**`salto_ks_user_not_subscribed`**
-August lock is temporarily offline.
+Salto site user is not subscribed.
---
-**`bridge_disconnected`**
+**`no_space_for_access_code_on_device`**
-Indicates that the Seam API cannot communicate with [Seam Bridge](../../capability-guides/seam-bridge.md), for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also [Troubleshooting Your Access Control System](../../capability-guides/access-systems/troubleshooting-your-access-control-system.md#acs_system.errors.seam_bridge_disconnected).
+No space for access code on device.
---
-**`code_modified_external_to_seam`**
+**`kwikset_unable_to_confirm_deletion`**
-Code was modified or removed externally after Seam successfully set it on the device.
+Unable to confirm the deletion of the access code on Kwikset device.
---
-**`device_disconnected`**
+**`kwikset_unable_to_confirm_code`**
-Indicates that the device is disconnected.
+Unable to confirm that the access code is set on Kwikset device.
---
-**`device_offline`**
+**`igloohome_offline_access_code_no_variance_available`**
-Indicates that the device is offline.
+Lock has reached maximum amount of codes.
---
-**`device_removed`**
+**`igloohome_bridge_too_many_pending_jobs`**
-Indicates that the device has been removed.
+Igloohome bridge has too many pending jobs in the queue.
---
-**`dormakaba_oracode_no_valid_user_level`**
+**`igloohome_bridge_offline`**
-No valid user level for Oracode.
+Igloohome bridge is offline.
---
-**`duplicate_code_attempt_prevented`**
+**`hubitat_no_free_positions_available`**
-An attempt to modify this access code was prevented.
+No free positions available on the device.
---
-**`duplicate_code_on_device`**
+**`hubitat_device_programming_delay`**
-Duplicate access code detected on device.
+Access code has not yet been fully moved to the device.
---
-**`failed_to_remove_from_device`**
+**`failed_to_set_on_device`**
-Failed to remove code from device.
+Failed to set code on device.
---
-**`failed_to_set_on_device`**
+**`failed_to_remove_from_device`**
-Failed to set code on device.
+Failed to remove code from device.
---
-**`hub_disconnected`**
+**`duplicate_code_on_device`**
-Indicates that the hub is disconnected.
+Duplicate access code detected on device.
---
-**`hubitat_device_programming_delay`**
+**`duplicate_code_attempt_prevented`**
-Access code has not yet been fully moved to the device.
+An attempt to modify this access code was prevented.
---
-**`hubitat_no_free_positions_available`**
+**`dormakaba_oracode_no_valid_user_level`**
-No free positions available on the device.
+No valid user level for Oracode.
---
-**`igloohome_bridge_offline`**
+**`code_modified_external_to_seam`**
-Igloohome bridge is offline.
+Code was modified or removed externally after Seam successfully set it on the device.
---
-**`igloohome_bridge_too_many_pending_jobs`**
+**`august_lock_temporarily_offline`**
-Igloohome bridge has too many pending jobs in the queue.
+August lock is temporarily offline.
---
-**`igloohome_offline_access_code_no_variance_available`**
+**`august_lock_missing_keypad`**
-Lock has reached maximum amount of codes.
+August lock is missing a keypad.
---
-**`invalid_credentials`**
+**`august_lock_invalid_code_length`**
-Indicates that the credentials provided were invalid.
+Invalid code length for August lock.
---
-**`kwikset_unable_to_confirm_code`**
+**`august_device_slots_full`**
-Unable to confirm that the access code is set on Kwikset device.
+All access code slots on the device are full.
---
-**`kwikset_unable_to_confirm_deletion`**
+**`august_device_programming_delay`**
-Unable to confirm the deletion of the access code on Kwikset device.
+Access code has not yet been fully moved to the device.
---
-**`lockly_missing_wifi_bridge`**
+**`account_disconnected`**
-Indicates that the Lockly lock is not connected to a Wi-Fi bridge.
+Indicates that the account is disconnected.
---
-**`missing_device_credentials`**
+**`august_lock_missing_bridge`**
-Indicates that device credentials are missing.
+Indicates that the lock is not connected to a bridge.
---
-**`no_space_for_access_code_on_device`**
+**`august_lock_not_authorized`**
-No space for access code on device.
+Indicates that the user is not authorized to use the August lock.
---
-**`salto_ks_user_not_subscribed`**
+**`bridge_disconnected`**
-Salto site user is not subscribed.
+Indicates that the Seam API cannot communicate with [Seam Bridge](../../capability-guides/seam-bridge.md), for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also [Troubleshooting Your Access Control System](../../capability-guides/access-systems/troubleshooting-your-access-control-system.md#acs_system.errors.seam_bridge_disconnected).
---
-**`smartthings_failed_to_set_access_code`**
+**`device_disconnected`**
-Failed to set code on SmartThings device.
+Indicates that the device is disconnected.
---
-**`smartthings_failed_to_set_after_multiple_retries`**
+**`device_offline`**
-Failed to set code after multiple retries.
+Indicates that the device is offline.
---
-**`smartthings_no_free_slots_available`**
+**`device_removed`**
-No free slots available on the device.
+Indicates that the device has been removed.
---
-**`subscription_required`**
+**`empty_backup_access_code_pool`**
-Indicates that a subscription is required to connect.
+Indicates that the [backup access code pool](https://docs.seam.co/latest/capability-guides/smart-locks/access-codes/backup-access-codes) is empty.
---
-**`ttlock_lock_not_paired_to_gateway`**
+**`hub_disconnected`**
-Indicates that the lock is not paired with a gateway.
+Indicates that the hub is disconnected.
---
-**`wyze_duplicate_code_name`**
+**`invalid_credentials`**
-Duplicate access code name detected.
+Indicates that the credentials provided were invalid.
---
-**`wyze_potential_duplicate_code`**
+**`lockly_missing_wifi_bridge`**
-Potential duplicate access code detected.
+Indicates that the Lockly lock is not connected to a Wi-Fi bridge.
---
-### Access Codes
-**`empty_backup_access_code_pool`**
+**`missing_device_credentials`**
-Indicates that the [backup access code pool](https://docs.seam.co/latest/capability-guides/smart-locks/access-codes/backup-access-codes) is empty.
+Indicates that device credentials are missing.
---
-### Locks
-**`august_lock_missing_bridge`**
+**`salto_ks_subscription_limit_exceeded`**
-Indicates that the lock is not connected to a bridge.
+Indicates that the Salto site user limit has been reached.
---
-**`august_lock_not_authorized`**
+**`subscription_required`**
-Indicates that the user is not authorized to use the August lock.
+Indicates that a subscription is required to connect.
---
-**`salto_ks_subscription_limit_exceeded`**
+**`ttlock_lock_not_paired_to_gateway`**
-Indicates that the Salto site user limit has been reached.
+Indicates that the lock is not paired with a gateway.
---
diff --git a/docs/api/access_codes/unmanaged/README.md b/docs/api/access_codes/unmanaged/README.md
index fa710ea15..da07450db 100644
--- a/docs/api/access_codes/unmanaged/README.md
+++ b/docs/api/access_codes/unmanaged/README.md
@@ -2258,12 +2258,24 @@ Invalid code length for August lock.
---
+**`august_lock_missing_bridge`**
+
+Indicates that the lock is not connected to a bridge.
+
+---
+
**`august_lock_missing_keypad`**
August lock is missing a keypad.
---
+**`august_lock_not_authorized`**
+
+Indicates that the user is not authorized to use the August lock.
+
+---
+
**`august_lock_temporarily_offline`**
August lock is temporarily offline.
@@ -2318,6 +2330,12 @@ Duplicate access code detected on device.
---
+**`empty_backup_access_code_pool`**
+
+Indicates that the [backup access code pool](https://docs.seam.co/latest/capability-guides/smart-locks/access-codes/backup-access-codes) is empty.
+
+---
+
**`failed_to_remove_from_device`**
Failed to remove code from device.
@@ -2402,6 +2420,12 @@ No space for access code on device.
---
+**`salto_ks_subscription_limit_exceeded`**
+
+Indicates that the Salto site user limit has been reached.
+
+---
+
**`salto_ks_user_not_subscribed`**
Salto site user is not subscribed.
@@ -2450,32 +2474,6 @@ Potential duplicate access code detected.
---
-### Access Codes
-**`empty_backup_access_code_pool`**
-
-Indicates that the [backup access code pool](https://docs.seam.co/latest/capability-guides/smart-locks/access-codes/backup-access-codes) is empty.
-
----
-
-### Locks
-**`august_lock_missing_bridge`**
-
-Indicates that the lock is not connected to a bridge.
-
----
-
-**`august_lock_not_authorized`**
-
-Indicates that the user is not authorized to use the August lock.
-
----
-
-**`salto_ks_subscription_limit_exceeded`**
-
-Indicates that the Salto site user limit has been reached.
-
----
-
## Warnings
diff --git a/docs/api/thermostats/README.md b/docs/api/thermostats/README.md
index 4b249c94e..9d4a8c69b 100644
--- a/docs/api/thermostats/README.md
+++ b/docs/api/thermostats/README.md
@@ -23,154 +23,8 @@ The Seam API represents a thermostat as a `device` resource that includes both b
---
-## The device Object
-
-- [Properties](./#properties)
-- [device.properties](./#device.properties)
-- [Errors](./#errors)
-- [Warnings](./#warnings)
-- [Events](./#events)
-- [Endpoints](./#endpoints)
-
-
-Represents a [device](../../core-concepts/devices/README.md) that has been connected to Seam.
{% tabs %}
-{% tab title="Lock Device" %}
-
-A lock device resource.
-
-```json
-{
- "can_program_online_access_codes": true,
- "can_remotely_lock": true,
- "can_remotely_unlock": true,
- "capabilities_supported": ["access_code", "lock"],
- "connected_account_id": "8e3a4f1b-2c7d-4a9e-8b5f-3d2c1a0b9e8f",
- "created_at": "2025-03-27T02:08:16.418Z",
- "custom_metadata": { "id": "internalId1" },
- "device_id": "a69569e1-133b-4a9d-b883-018641bfe543",
- "device_type": "schlage_lock",
- "display_name": "FRONT DOOR",
- "errors": [],
- "is_managed": true,
- "location": { "location_name": "Front Door", "timezone": "America/New_York" },
- "nickname": "Front Door",
- "properties": {
- "appearance": { "name": "FRONT DOOR" },
- "battery": { "level": 0.48, "status": "good" },
- "battery_level": 0.48,
- "code_constraints": [{ "constraint_type": "name_length", "max_length": 9 }],
- "has_native_entry_events": true,
- "image_alt_text": "Schlage Sense Smart Deadbolt with Camelot Trim, Front",
- "image_url": "https://connect.getseam.com/_next/image?url=https://connect.getseam.com/assets/images/devices/schlage_sense-smart-deadbolt-with-camelot-trim_front.png&q=75&w=128",
- "locked": false,
- "manufacturer": "schlage",
- "model": {
- "accessory_keypad_supported": false,
- "can_connect_accessory_keypad": false,
- "display_name": "Encode",
- "has_built_in_keypad": true,
- "manufacturer_display_name": "Schlage",
- "offline_access_codes_supported": false,
- "online_access_codes_supported": true
- },
- "name": "FRONT DOOR",
- "offline_access_codes_enabled": false,
- "online": true,
- "online_access_codes_enabled": true,
- "schlage_metadata": {
- "device_id": "a69569e1-133b-4a9d-b883-018641bfe543",
- "device_name": "FRONT DOOR",
- "model": "Encode"
- },
- "serial_number": "34000000000531e0",
- "supported_code_lengths": [4, 5, 6, 7, 8],
- "supports_backup_access_code_pool": true,
- "supports_offline_access_codes": false
- },
- "warnings": [],
- "workspace_id": "5d7f2e1a-9c8b-4f3e-8d2c-1a0b9e8f7c6d"
-}
-```
-{% endtab %}
-{% tab title="Noise Sensor Device" %}
-
-A noise sensor device resource.
-
-```json
-{
- "capabilities_supported": ["noise_detection"],
- "connected_account_id": "9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d",
- "created_at": "2025-05-16T16:54:17.946049Z",
- "custom_metadata": { "id": "internalId1" },
- "device_id": "f1e2d3c4-b5a6-4d7c-8e9f-0a1b2c3d4e5f",
- "device_type": "minut_sensor",
- "display_name": "Living Room",
- "errors": [],
- "is_managed": true,
- "location": {
- "location_name": "Jane's Test Home",
- "timezone": "America/Los_Angeles"
- },
- "nickname": "Living Room",
- "properties": {
- "appearance": { "name": "Living Room" },
- "battery": { "level": 1, "status": "full" },
- "battery_level": 1,
- "currently_triggering_noise_threshold_ids": [],
- "image_alt_text": "Minut Sensor",
- "image_url": "https://connect.getseam.com/_next/image?url=https://connect.getseam.com/assets/images/devices/minut_gen-3_front.png&q=75&w=128",
- "manufacturer": "minut",
- "minut_metadata": {
- "device_id": "770cd3153deca3dee0fe0614",
- "device_location": { "latitude": 0, "longitude": 0 },
- "device_name": "Living Room",
- "home_address": {
- "city": "San Francisco",
- "country": "US",
- "notes": "string",
- "post_code": "44210",
- "region": "San Francisco County",
- "street_name1": "2258 24th Street",
- "street_name2": ""
- },
- "home_id": "2978b6d5dba395ec08300e46",
- "home_location": { "latitude": 0, "longitude": 0 },
- "home_name": "Jane's Test Home",
- "latest_sensor_values": {
- "accelerometer_z": {
- "time": "2025-06-16T16:54:17.946049Z",
- "value": -1.00390625
- },
- "humidity": {
- "time": "2025-06-16T16:54:17.946049Z",
- "value": 31.110000610351562
- },
- "pressure": { "time": "2025-06-16T16:54:17.946049Z", "value": 101923 },
- "sound": {
- "time": "2025-06-16T16:54:17.946049Z",
- "value": 47.7117919921875
- },
- "temperature": {
- "time": "2025-06-16T16:54:17.946049Z",
- "value": 21.270000457763672
- }
- }
- },
- "model": {
- "display_name": "Noise Sensor",
- "manufacturer_display_name": "Minut"
- },
- "name": "Living Room",
- "noise_level_decibels": 47.7117919921875,
- "online": true
- },
- "warnings": [],
- "workspace_id": "1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d"
-}
-```
-{% endtab %}
{% tab title="Thermostat Device" %}
A thermostat device resource.
@@ -1846,6 +1700,85 @@ Unique identifier for the Seam workspace associated with the device.
+---
+
+**`active_thermostat_schedule`** *Object*
+
+Active [thermostat schedule](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md).
+
+{% hint style="warning" %}
+**Deprecated**. Use `active_thermostat_schedule_id` with `/thermostats/schedules/get` instead.
+{% endhint %}
+
+
+
+ Child Properties
+
+ - climate_preset_key String
+
+ Key of the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md) to use for the [thermostat schedule](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md).
+
+ - created_at Datetime
+
+ Date and time at which the [thermostat schedule](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md) was created.
+
+ - device_id UUID
+
+ ID of the desired [thermostat](https://docs.seam.co/latest/capability-guides/thermostats) device.
+
+ - ends_at Datetime
+
+ Date and time at which the [thermostat schedule](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md) ends, in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format.
+
+ - errors List of Objects
+
+ Errors associated with the [thermostat schedule](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md).
+
+- error_code String
+
+ Unique identifier of the type of error. Enables quick recognition and categorization of the issue.
+
+
+- message String
+
+ Detailed description of the error. Provides insights into the issue and potentially how to rectify it.
+
+
+ - is_override_allowed Boolean
+
+ Indicates whether a person at the thermostat can change the thermostat's settings after the [thermostat schedule](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md) starts.
+
+ - max_override_period_minutes Number
+
+ Number of minutes for which a person at the thermostat can change the thermostat's settings after the activation of the scheduled [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md). See also [Specifying Manual Override Permissions](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md#specifying-manual-override-permissions).
+
+ - name String
+
+ User-friendly name to identify the [thermostat schedule](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md).
+
+ - starts_at Datetime
+
+ Date and time at which the [thermostat schedule](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md) starts, in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format.
+
+ - thermostat_schedule_id UUID
+
+ ID of the [thermostat schedule](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md).
+
+ - workspace_id UUID
+
+ ID of the [workspace](../../core-concepts/workspaces/README.md) that contains the thermostat schedule.
+
+
+
+---
+
+**`active_thermostat_schedule_id`** *UUID*
+
+ID of the active [thermostat schedule](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md).
+
+
+
+
---
**`akiles_metadata`** *Object*
@@ -1964,6 +1897,107 @@ Metadata for an August device.
+---
+
+**`available_climate_presets`** *List* *of Objects*
+
+Available [climate presets](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md) for the thermostat.
+
+
+
+
+ Child Object Properties
+
+ can_delete Boolean
+
+ Indicates whether the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md) key can be deleted.
+
+ can_edit Boolean
+
+ Indicates whether the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md) key can be edited.
+
+ can_program Boolean
+
+ Indicates whether the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md) key can be programmed in a thermostat daily program.
+
+ climate_preset_key String
+
+ Unique key to identify the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md).
+
+ cooling_set_point_celsius Number
+
+ Temperature to which the thermostat should cool (in °C). See also [Set Points](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md).
+
+ cooling_set_point_fahrenheit Number
+
+ Temperature to which the thermostat should cool (in °F). See also [Set Points](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md).
+
+ display_name String
+
+ Display name for the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md).
+
+ fan_mode_setting Enum
+
+ Desired [fan mode setting](https://docs.seam.co/latest/capability-guides/thermostats/configure-current-climate-settings#fan-mode-settings), such as `on`, `auto`, or `circulate`.
+
+ Enum values:
+
+ - auto
+ - on
+ - circulate
+
+
+ heating_set_point_celsius Number
+
+ Temperature to which the thermostat should heat (in °C). See also [Set Points](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md).
+
+ heating_set_point_fahrenheit Number
+
+ Temperature to which the thermostat should heat (in °F). See also [Set Points](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md).
+
+ hvac_mode_setting Enum
+
+ Desired [HVAC mode](../../capability-guides/thermostats/understanding-thermostat-concepts/hvac-mode.md) setting, such as `heat`, `cool`, `heat_cool`, or `off`.
+
+ Enum values:
+
+ - off
+ - heat
+ - cool
+ - heat_cool
+
+
+ manual_override_allowed Boolean
+
+ Indicates whether a person at the thermostat can change the thermostat's settings. See [Specifying Manual Override Permissions](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md#specifying-manual-override-permissions).
+
+ {% hint style="warning" %}
+ **Deprecated**. Use 'thermostat_schedule.is_override_allowed'
+ {% endhint %}
+
+ name String
+
+ User-friendly name to identify the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md).
+
+
+---
+
+**`available_fan_mode_settings`** *List* *of Enums*
+
+Fan mode settings that the thermostat supports.
+
+
+
+
+---
+
+**`available_hvac_mode_settings`** *List* *of Enums*
+
+HVAC mode settings that the thermostat supports.
+
+
+
+
---
**`avigilon_alta_metadata`** *Object*
@@ -2049,36 +2083,206 @@ Metadata for a ControlByWeb device.
---
-**`dormakaba_oracode_metadata`** *Object*
+**`current_climate_setting`** *Object*
-Metadata for a dormakaba Oracode device.
+Current climate setting.
Child Properties
- - device_id Object
+ - can_delete Boolean
- Device ID for a dormakaba Oracode device.
+ Indicates whether the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md) key can be deleted.
- - door_id Number
+ - can_edit Boolean
- Door ID for a dormakaba Oracode device.
+ Indicates whether the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md) key can be edited.
- - door_is_wireless Boolean
+ - can_program Boolean
- Indicates whether a door is wireless for a dormakaba Oracode device.
+ Indicates whether the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md) key can be programmed in a thermostat daily program.
- - door_name String
+ - climate_preset_key String
- Door name for a dormakaba Oracode device.
+ Unique key to identify the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md).
- - iana_timezone String
+ - cooling_set_point_celsius Number
- IANA time zone for a dormakaba Oracode device.
+ Temperature to which the thermostat should cool (in °C). See also [Set Points](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md).
- - predefined_time_slots List of Objects
+ - cooling_set_point_fahrenheit Number
+
+ Temperature to which the thermostat should cool (in °F). See also [Set Points](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md).
+
+ - display_name String
+
+ Display name for the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md).
+
+ - fan_mode_setting Enum
+
+ Desired [fan mode setting](https://docs.seam.co/latest/capability-guides/thermostats/configure-current-climate-settings#fan-mode-settings), such as `on`, `auto`, or `circulate`.
+
+ Enum values:
+
+ - auto
+ - on
+ - circulate
+
+
+ - heating_set_point_celsius Number
+
+ Temperature to which the thermostat should heat (in °C). See also [Set Points](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md).
+
+ - heating_set_point_fahrenheit Number
+
+ Temperature to which the thermostat should heat (in °F). See also [Set Points](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md).
+
+ - hvac_mode_setting Enum
+
+ Desired [HVAC mode](../../capability-guides/thermostats/understanding-thermostat-concepts/hvac-mode.md) setting, such as `heat`, `cool`, `heat_cool`, or `off`.
+
+ Enum values:
+
+ - off
+ - heat
+ - cool
+ - heat_cool
+
+
+ - manual_override_allowed Boolean
+
+ Indicates whether a person at the thermostat can change the thermostat's settings. See [Specifying Manual Override Permissions](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md#specifying-manual-override-permissions).
+
+ {% hint style="warning" %}
+ **Deprecated**. Use 'thermostat_schedule.is_override_allowed'
+ {% endhint %}
+
+ - name String
+
+ User-friendly name to identify the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md).
+
+
+
+---
+
+**`default_climate_setting`** *Object*
+
+
+{% hint style="warning" %}
+**Deprecated**. use fallback_climate_preset_key to specify a fallback climate preset instead.
+{% endhint %}
+
+
+
+ Child Properties
+
+ - can_delete Boolean
+
+ Indicates whether the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md) key can be deleted.
+
+ - can_edit Boolean
+
+ Indicates whether the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md) key can be edited.
+
+ - can_program Boolean
+
+ Indicates whether the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md) key can be programmed in a thermostat daily program.
+
+ - climate_preset_key String
+
+ Unique key to identify the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md).
+
+ - cooling_set_point_celsius Number
+
+ Temperature to which the thermostat should cool (in °C). See also [Set Points](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md).
+
+ - cooling_set_point_fahrenheit Number
+
+ Temperature to which the thermostat should cool (in °F). See also [Set Points](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md).
+
+ - display_name String
+
+ Display name for the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md).
+
+ - fan_mode_setting Enum
+
+ Desired [fan mode setting](https://docs.seam.co/latest/capability-guides/thermostats/configure-current-climate-settings#fan-mode-settings), such as `on`, `auto`, or `circulate`.
+
+ Enum values:
+
+ - auto
+ - on
+ - circulate
+
+
+ - heating_set_point_celsius Number
+
+ Temperature to which the thermostat should heat (in °C). See also [Set Points](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md).
+
+ - heating_set_point_fahrenheit Number
+
+ Temperature to which the thermostat should heat (in °F). See also [Set Points](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md).
+
+ - hvac_mode_setting Enum
+
+ Desired [HVAC mode](../../capability-guides/thermostats/understanding-thermostat-concepts/hvac-mode.md) setting, such as `heat`, `cool`, `heat_cool`, or `off`.
+
+ Enum values:
+
+ - off
+ - heat
+ - cool
+ - heat_cool
+
+
+ - manual_override_allowed Boolean
+
+ Indicates whether a person at the thermostat can change the thermostat's settings. See [Specifying Manual Override Permissions](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md#specifying-manual-override-permissions).
+
+ {% hint style="warning" %}
+ **Deprecated**. Use 'thermostat_schedule.is_override_allowed'
+ {% endhint %}
+
+ - name String
+
+ User-friendly name to identify the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md).
+
+
+
+---
+
+**`dormakaba_oracode_metadata`** *Object*
+
+Metadata for a dormakaba Oracode device.
+
+
+
+
+ Child Properties
+
+ - device_id Object
+
+ Device ID for a dormakaba Oracode device.
+
+ - door_id Number
+
+ Door ID for a dormakaba Oracode device.
+
+ - door_is_wireless Boolean
+
+ Indicates whether a door is wireless for a dormakaba Oracode device.
+
+ - door_name String
+
+ Door name for a dormakaba Oracode device.
+
+ - iana_timezone String
+
+ IANA time zone for a dormakaba Oracode device.
+
+ - predefined_time_slots List of Objects
Predefined time slots for a dormakaba Oracode device.
@@ -2167,6 +2371,33 @@ Metadata for an ecobee device.
+---
+
+**`fallback_climate_preset_key`** *String*
+
+Key of the [fallback climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/setting-the-fallback-climate-preset.md) for the thermostat.
+
+
+
+
+---
+
+**`fan_mode_setting`** *Enum*
+
+
+{% hint style="warning" %}
+**Deprecated**. Use `current_climate_setting.fan_mode_setting` instead.
+{% endhint %}
+
+
+Enum values
+
+- auto
+- on
+- circulate
+
+
+
---
**`four_suites_metadata`** *Object*
@@ -2317,6 +2548,42 @@ Metadata for an igloohome device.
+---
+
+**`is_cooling`** *Boolean*
+
+Indicates whether the connected HVAC system is currently cooling, as reported by the thermostat.
+
+
+
+
+---
+
+**`is_fan_running`** *Boolean*
+
+Indicates whether the fan in the connected HVAC system is currently running, as reported by the thermostat.
+
+
+
+
+---
+
+**`is_heating`** *Boolean*
+
+Indicates whether the connected HVAC system is currently heating, as reported by the thermostat.
+
+
+
+
+---
+
+**`is_temporary_manual_override_active`** *Boolean*
+
+Indicates whether the current thermostat settings differ from the most recent active program or schedule that Seam activated. For this condition to occur, `current_climate_setting.manual_override_allowed` must also be `true`.
+
+
+
+
---
**`kwikset_metadata`** *Object*
@@ -2369,32 +2636,122 @@ Metadata for a Lockly device.
---
-**`minut_metadata`** *Object*
+**`max_cooling_set_point_celsius`** *Number*
-Metadata for a Minut device.
+Maximum [cooling set point](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md#cooling-set-point) in °C.
-
- Child Properties
- - device_id String
-
- Device ID for a Minut device.
+---
- - device_name String
-
- Device name for a Minut device.
+**`max_cooling_set_point_fahrenheit`** *Number*
- - latest_sensor_values Object
-
- Latest sensor values for a Minut device.
+Maximum [cooling set point](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md#cooling-set-point) in °F.
- - latest_sensor_values.accelerometer_z Object
-
- Latest accelerometer Z-axis reading for a Minut device.
- - latest_sensor_values.accelerometer_z.time String
+
+
+---
+
+**`max_heating_set_point_celsius`** *Number*
+
+Maximum [heating set point](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md#heating-set-point) in °C.
+
+
+
+
+---
+
+**`max_heating_set_point_fahrenheit`** *Number*
+
+Maximum [heating set point](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md#heating-set-point) in °F.
+
+
+
+
+---
+
+**`min_cooling_set_point_celsius`** *Number*
+
+Minimum [cooling set point](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md#cooling-set-point) in °C.
+
+
+
+
+---
+
+**`min_cooling_set_point_fahrenheit`** *Number*
+
+Minimum [cooling set point](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md#cooling-set-point) in °F.
+
+
+
+
+---
+
+**`min_heating_cooling_delta_celsius`** *Number*
+
+Minimum [temperature difference](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md#minimum-heating-cooling-temperature-delta) in °C between the cooling and heating set points when in heat-cool (auto) mode.
+
+
+
+
+---
+
+**`min_heating_cooling_delta_fahrenheit`** *Number*
+
+Minimum [temperature difference](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md#minimum-heating-cooling-temperature-delta) in °F between the cooling and heating set points when in heat-cool (auto) mode.
+
+
+
+
+---
+
+**`min_heating_set_point_celsius`** *Number*
+
+Minimum [heating set point](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md#heating-set-point) in °C.
+
+
+
+
+---
+
+**`min_heating_set_point_fahrenheit`** *Number*
+
+Minimum [heating set point](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md#heating-set-point) in °F.
+
+
+
+
+---
+
+**`minut_metadata`** *Object*
+
+Metadata for a Minut device.
+
+
+
+
+ Child Properties
+
+ - device_id String
+
+ Device ID for a Minut device.
+
+ - device_name String
+
+ Device name for a Minut device.
+
+ - latest_sensor_values Object
+
+ Latest sensor values for a Minut device.
+
+ - latest_sensor_values.accelerometer_z Object
+
+ Latest accelerometer Z-axis reading for a Minut device.
+
+ - latest_sensor_values.accelerometer_z.time String
Time of latest accelerometer Z-axis reading for a Minut device.
@@ -2621,6 +2978,15 @@ Indicates whether the device is online.
+---
+
+**`relative_humidity`** *Number*
+
+Reported relative humidity, as a value between 0 and 1, inclusive.
+
+
+
+
---
**`salto_ks_metadata`** *Object*
@@ -2889,6 +3255,144 @@ Metadata for a Tedee device.
---
+**`temperature_celsius`** *Number*
+
+Reported temperature in °C.
+
+
+
+
+---
+
+**`temperature_fahrenheit`** *Number*
+
+Reported temperature in °F.
+
+
+
+
+---
+
+**`temperature_threshold`** *Object*
+
+Current [temperature threshold](../../capability-guides/thermostats/setting-and-monitoring-temperature-thresholds.md) set for the thermostat.
+
+
+
+
+ Child Properties
+
+ - lower_limit_celsius Number
+
+ Lower limit in °C within the current [temperature threshold](../../capability-guides/thermostats/setting-and-monitoring-temperature-thresholds.md) set for the thermostat.
+
+ - lower_limit_fahrenheit Number
+
+ Lower limit in °F within the current [temperature threshold](../../capability-guides/thermostats/setting-and-monitoring-temperature-thresholds.md) set for the thermostat.
+
+ - upper_limit_celsius Number
+
+ Upper limit in °C within the current [temperature threshold](../../capability-guides/thermostats/setting-and-monitoring-temperature-thresholds.md) set for the thermostat.
+
+ - upper_limit_fahrenheit Number
+
+ Upper limit in °F within the current [temperature threshold](../../capability-guides/thermostats/setting-and-monitoring-temperature-thresholds.md) set for the thermostat.
+
+
+
+---
+
+**`thermostat_daily_programs`** *List* *of Objects*
+
+Configured [daily programs](../../capability-guides/thermostats/creating-and-managing-thermostat-programs.md) for the thermostat.
+
+
+
+
+ Child Object Properties
+
+ created_at Datetime
+
+ Date and time at which the thermostat daily program was created.
+
+ device_id UUID
+
+ ID of the thermostat device on which the thermostat daily program is configured.
+
+ name String
+
+ User-friendly name to identify the thermostat daily program.
+
+ periods List of Objects
+
+ Array of thermostat daily program periods.
+
+ - climate_preset_key String
+
+ Key of the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md) to activate at the `starts_at_time`.
+
+
+ - starts_at_time String
+
+ Time at which the thermostat daily program period starts, in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format.
+
+
+ thermostat_daily_program_id UUID
+
+ ID of the thermostat daily program.
+
+ workspace_id UUID
+
+ ID of the [workspace](../../core-concepts/workspaces/README.md) that contains the thermostat daily program.
+
+
+---
+
+**`thermostat_weekly_program`** *Object*
+
+Current [weekly program](../../capability-guides/thermostats/creating-and-managing-thermostat-programs.md) for the thermostat.
+
+
+
+
+ Child Properties
+
+ - created_at Datetime
+
+ Date and time at which the thermostat weekly program was created.
+
+ - friday_program_id UUID
+
+ ID of the thermostat daily program to run on Fridays.
+
+ - monday_program_id UUID
+
+ ID of the thermostat daily program to run on Mondays.
+
+ - saturday_program_id UUID
+
+ ID of the thermostat daily program to run on Saturdays.
+
+ - sunday_program_id UUID
+
+ ID of the thermostat daily program to run on Sundays.
+
+ - thursday_program_id UUID
+
+ ID of the thermostat daily program to run on Thursdays.
+
+ - tuesday_program_id UUID
+
+ ID of the thermostat daily program to run on Tuesdays.
+
+ - wednesday_program_id UUID
+
+ ID of the thermostat daily program to run on Wednesdays.
+
+
+
+---
+
**`ttlock_metadata`** *Object*
Metadata for a TTLock device.
@@ -3043,660 +3547,63 @@ Metadata for a Wyze device.
---
-## Thermostats
-**`active_thermostat_schedule`** *Object*
-
-Active [thermostat schedule](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md).
-
-{% hint style="warning" %}
-**Deprecated**. Use `active_thermostat_schedule_id` with `/thermostats/schedules/get` instead.
-{% endhint %}
-
-
-
- Child Properties
-
- - climate_preset_key String
-
- Key of the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md) to use for the [thermostat schedule](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md).
-
- - created_at Datetime
-
- Date and time at which the [thermostat schedule](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md) was created.
-
- - device_id UUID
-
- ID of the desired [thermostat](https://docs.seam.co/latest/capability-guides/thermostats) device.
-
- - ends_at Datetime
-
- Date and time at which the [thermostat schedule](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md) ends, in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format.
-
- - errors List of Objects
-
- Errors associated with the [thermostat schedule](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md).
-
-- error_code String
-
- Unique identifier of the type of error. Enables quick recognition and categorization of the issue.
-
-
-- message String
-
- Detailed description of the error. Provides insights into the issue and potentially how to rectify it.
-
-
- - is_override_allowed Boolean
-
- Indicates whether a person at the thermostat can change the thermostat's settings after the [thermostat schedule](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md) starts.
-
- - max_override_period_minutes Number
-
- Number of minutes for which a person at the thermostat can change the thermostat's settings after the activation of the scheduled [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md). See also [Specifying Manual Override Permissions](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md#specifying-manual-override-permissions).
-
- - name String
-
- User-friendly name to identify the [thermostat schedule](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md).
-
- - starts_at Datetime
-
- Date and time at which the [thermostat schedule](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md) starts, in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format.
-
- - thermostat_schedule_id UUID
-
- ID of the [thermostat schedule](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md).
-
- - workspace_id UUID
-
- ID of the [workspace](../../core-concepts/workspaces/README.md) that contains the thermostat schedule.
-
-
-
----
-
-**`active_thermostat_schedule_id`** *UUID*
-
-ID of the active [thermostat schedule](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md).
-
-
-
-
----
-
-**`available_climate_presets`** *List* *of Objects*
-
-Available [climate presets](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md) for the thermostat.
-
-
-
-
- Child Object Properties
-
- can_delete Boolean
-
- Indicates whether the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md) key can be deleted.
-
- can_edit Boolean
-
- Indicates whether the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md) key can be edited.
-
- can_program Boolean
-
- Indicates whether the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md) key can be programmed in a thermostat daily program.
-
- climate_preset_key String
-
- Unique key to identify the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md).
-
- cooling_set_point_celsius Number
-
- Temperature to which the thermostat should cool (in °C). See also [Set Points](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md).
-
- cooling_set_point_fahrenheit Number
-
- Temperature to which the thermostat should cool (in °F). See also [Set Points](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md).
-
- display_name String
-
- Display name for the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md).
-
- fan_mode_setting Enum
-
- Desired [fan mode setting](https://docs.seam.co/latest/capability-guides/thermostats/configure-current-climate-settings#fan-mode-settings), such as `on`, `auto`, or `circulate`.
-
- Enum values:
-
- - auto
- - on
- - circulate
-
-
- heating_set_point_celsius Number
-
- Temperature to which the thermostat should heat (in °C). See also [Set Points](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md).
-
- heating_set_point_fahrenheit Number
-
- Temperature to which the thermostat should heat (in °F). See also [Set Points](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md).
-
- hvac_mode_setting Enum
-
- Desired [HVAC mode](../../capability-guides/thermostats/understanding-thermostat-concepts/hvac-mode.md) setting, such as `heat`, `cool`, `heat_cool`, or `off`.
-
- Enum values:
-
- - off
- - heat
- - cool
- - heat_cool
-
-
- manual_override_allowed Boolean
-
- Indicates whether a person at the thermostat can change the thermostat's settings. See [Specifying Manual Override Permissions](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md#specifying-manual-override-permissions).
-
- {% hint style="warning" %}
- **Deprecated**. Use 'thermostat_schedule.is_override_allowed'
- {% endhint %}
-
- name String
-
- User-friendly name to identify the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md).
-
-
----
-
-**`available_fan_mode_settings`** *List* *of Enums*
-
-Fan mode settings that the thermostat supports.
-
-
-
-
----
-
-**`available_hvac_mode_settings`** *List* *of Enums*
-
-HVAC mode settings that the thermostat supports.
-
-
-
-
----
-
-**`current_climate_setting`** *Object*
-
-Current climate setting.
-
-
-
-
- Child Properties
-
- - can_delete Boolean
-
- Indicates whether the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md) key can be deleted.
-
- - can_edit Boolean
-
- Indicates whether the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md) key can be edited.
-
- - can_program Boolean
-
- Indicates whether the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md) key can be programmed in a thermostat daily program.
-
- - climate_preset_key String
-
- Unique key to identify the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md).
-
- - cooling_set_point_celsius Number
-
- Temperature to which the thermostat should cool (in °C). See also [Set Points](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md).
-
- - cooling_set_point_fahrenheit Number
-
- Temperature to which the thermostat should cool (in °F). See also [Set Points](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md).
-
- - display_name String
-
- Display name for the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md).
-
- - fan_mode_setting Enum
-
- Desired [fan mode setting](https://docs.seam.co/latest/capability-guides/thermostats/configure-current-climate-settings#fan-mode-settings), such as `on`, `auto`, or `circulate`.
-
- Enum values:
-
- - auto
- - on
- - circulate
-
-
- - heating_set_point_celsius Number
-
- Temperature to which the thermostat should heat (in °C). See also [Set Points](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md).
-
- - heating_set_point_fahrenheit Number
-
- Temperature to which the thermostat should heat (in °F). See also [Set Points](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md).
-
- - hvac_mode_setting Enum
-
- Desired [HVAC mode](../../capability-guides/thermostats/understanding-thermostat-concepts/hvac-mode.md) setting, such as `heat`, `cool`, `heat_cool`, or `off`.
-
- Enum values:
-
- - off
- - heat
- - cool
- - heat_cool
-
-
- - manual_override_allowed Boolean
-
- Indicates whether a person at the thermostat can change the thermostat's settings. See [Specifying Manual Override Permissions](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md#specifying-manual-override-permissions).
-
- {% hint style="warning" %}
- **Deprecated**. Use 'thermostat_schedule.is_override_allowed'
- {% endhint %}
-
- - name String
-
- User-friendly name to identify the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md).
-
-
-
----
-
-**`default_climate_setting`** *Object*
-
-
-{% hint style="warning" %}
-**Deprecated**. use fallback_climate_preset_key to specify a fallback climate preset instead.
-{% endhint %}
-
-
-
- Child Properties
-
- - can_delete Boolean
-
- Indicates whether the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md) key can be deleted.
-
- - can_edit Boolean
-
- Indicates whether the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md) key can be edited.
-
- - can_program Boolean
-
- Indicates whether the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md) key can be programmed in a thermostat daily program.
-
- - climate_preset_key String
-
- Unique key to identify the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md).
-
- - cooling_set_point_celsius Number
-
- Temperature to which the thermostat should cool (in °C). See also [Set Points](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md).
-
- - cooling_set_point_fahrenheit Number
-
- Temperature to which the thermostat should cool (in °F). See also [Set Points](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md).
-
- - display_name String
-
- Display name for the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md).
-
- - fan_mode_setting Enum
-
- Desired [fan mode setting](https://docs.seam.co/latest/capability-guides/thermostats/configure-current-climate-settings#fan-mode-settings), such as `on`, `auto`, or `circulate`.
-
- Enum values:
-
- - auto
- - on
- - circulate
-
-
- - heating_set_point_celsius Number
-
- Temperature to which the thermostat should heat (in °C). See also [Set Points](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md).
-
- - heating_set_point_fahrenheit Number
-
- Temperature to which the thermostat should heat (in °F). See also [Set Points](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md).
-
- - hvac_mode_setting Enum
-
- Desired [HVAC mode](../../capability-guides/thermostats/understanding-thermostat-concepts/hvac-mode.md) setting, such as `heat`, `cool`, `heat_cool`, or `off`.
-
- Enum values:
-
- - off
- - heat
- - cool
- - heat_cool
-
-
- - manual_override_allowed Boolean
-
- Indicates whether a person at the thermostat can change the thermostat's settings. See [Specifying Manual Override Permissions](../../capability-guides/thermostats/creating-and-managing-thermostat-schedules.md#specifying-manual-override-permissions).
-
- {% hint style="warning" %}
- **Deprecated**. Use 'thermostat_schedule.is_override_allowed'
- {% endhint %}
-
- - name String
-
- User-friendly name to identify the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md).
-
-
-
----
-
-**`fallback_climate_preset_key`** *String*
-
-Key of the [fallback climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/setting-the-fallback-climate-preset.md) for the thermostat.
-
-
-
-
----
-
-**`fan_mode_setting`** *Enum*
-
-
-{% hint style="warning" %}
-**Deprecated**. Use `current_climate_setting.fan_mode_setting` instead.
-{% endhint %}
-
-
-Enum values
-
-- auto
-- on
-- circulate
-
-
-
----
-
-**`is_cooling`** *Boolean*
-
-Indicates whether the connected HVAC system is currently cooling, as reported by the thermostat.
-
-
-
-
----
-
-**`is_fan_running`** *Boolean*
-
-Indicates whether the fan in the connected HVAC system is currently running, as reported by the thermostat.
-
-
-
-
----
-
-**`is_heating`** *Boolean*
-
-Indicates whether the connected HVAC system is currently heating, as reported by the thermostat.
-
-
-
-
----
-
-**`is_temporary_manual_override_active`** *Boolean*
-
-Indicates whether the current thermostat settings differ from the most recent active program or schedule that Seam activated. For this condition to occur, `current_climate_setting.manual_override_allowed` must also be `true`.
-
-
-
-
----
-
-**`max_cooling_set_point_celsius`** *Number*
-
-Maximum [cooling set point](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md#cooling-set-point) in °C.
-
-
-
-
----
-
-**`max_cooling_set_point_fahrenheit`** *Number*
-
-Maximum [cooling set point](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md#cooling-set-point) in °F.
-
-
-
-
----
-
-**`max_heating_set_point_celsius`** *Number*
-
-Maximum [heating set point](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md#heating-set-point) in °C.
-
-
-
-
----
-
-**`max_heating_set_point_fahrenheit`** *Number*
-
-Maximum [heating set point](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md#heating-set-point) in °F.
-
-
-
-
----
-
-**`min_cooling_set_point_celsius`** *Number*
-
-Minimum [cooling set point](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md#cooling-set-point) in °C.
-
-
-
-
----
-
-**`min_cooling_set_point_fahrenheit`** *Number*
-
-Minimum [cooling set point](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md#cooling-set-point) in °F.
-
-
-
-
----
-
-**`min_heating_cooling_delta_celsius`** *Number*
-
-Minimum [temperature difference](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md#minimum-heating-cooling-temperature-delta) in °C between the cooling and heating set points when in heat-cool (auto) mode.
-
-
-
-
----
-
-**`min_heating_cooling_delta_fahrenheit`** *Number*
-
-Minimum [temperature difference](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md#minimum-heating-cooling-temperature-delta) in °F between the cooling and heating set points when in heat-cool (auto) mode.
+## Errors
+**`auxiliary_heat_running`**
+Indicates that the auxiliary heat is running.
---
-**`min_heating_set_point_celsius`** *Number*
-
-Minimum [heating set point](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md#heating-set-point) in °C.
-
-
+**`ttlock_lock_not_paired_to_gateway`**
+Indicates that the lock is not paired with a gateway.
---
-**`min_heating_set_point_fahrenheit`** *Number*
-
-Minimum [heating set point](../../capability-guides/thermostats/understanding-thermostat-concepts/set-points.md#heating-set-point) in °F.
-
-
+**`subscription_required`**
+Indicates that a subscription is required to connect.
---
-**`relative_humidity`** *Number*
-
-Reported relative humidity, as a value between 0 and 1, inclusive.
-
-
+**`missing_device_credentials`**
+Indicates that device credentials are missing.
---
-**`temperature_celsius`** *Number*
-
-Reported temperature in °C.
-
-
+**`lockly_missing_wifi_bridge`**
+Indicates that the Lockly lock is not connected to a Wi-Fi bridge.
---
-**`temperature_fahrenheit`** *Number*
-
-Reported temperature in °F.
-
-
+**`hub_disconnected`**
+Indicates that the hub is disconnected.
---
-**`temperature_threshold`** *Object*
-
-Current [temperature threshold](../../capability-guides/thermostats/setting-and-monitoring-temperature-thresholds.md) set for the thermostat.
-
-
-
-
- Child Properties
-
- - lower_limit_celsius Number
-
- Lower limit in °C within the current [temperature threshold](../../capability-guides/thermostats/setting-and-monitoring-temperature-thresholds.md) set for the thermostat.
-
- - lower_limit_fahrenheit Number
-
- Lower limit in °F within the current [temperature threshold](../../capability-guides/thermostats/setting-and-monitoring-temperature-thresholds.md) set for the thermostat.
-
- - upper_limit_celsius Number
-
- Upper limit in °C within the current [temperature threshold](../../capability-guides/thermostats/setting-and-monitoring-temperature-thresholds.md) set for the thermostat.
-
- - upper_limit_fahrenheit Number
-
- Upper limit in °F within the current [temperature threshold](../../capability-guides/thermostats/setting-and-monitoring-temperature-thresholds.md) set for the thermostat.
+**`device_removed`**
-
+Indicates that the device has been removed.
---
-**`thermostat_daily_programs`** *List* *of Objects*
-
-Configured [daily programs](../../capability-guides/thermostats/creating-and-managing-thermostat-programs.md) for the thermostat.
-
-
-
-
- Child Object Properties
-
- created_at Datetime
-
- Date and time at which the thermostat daily program was created.
-
- device_id UUID
-
- ID of the thermostat device on which the thermostat daily program is configured.
-
- name String
-
- User-friendly name to identify the thermostat daily program.
-
- periods List of Objects
-
- Array of thermostat daily program periods.
-
- - climate_preset_key String
-
- Key of the [climate preset](../../capability-guides/thermostats/creating-and-managing-climate-presets/README.md) to activate at the `starts_at_time`.
-
-
- - starts_at_time String
-
- Time at which the thermostat daily program period starts, in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format.
-
-
- thermostat_daily_program_id UUID
-
- ID of the thermostat daily program.
+**`device_offline`**
- workspace_id UUID
-
- ID of the [workspace](../../core-concepts/workspaces/README.md) that contains the thermostat daily program.
-
+Indicates that the device is offline.
---
-**`thermostat_weekly_program`** *Object*
-
-Current [weekly program](../../capability-guides/thermostats/creating-and-managing-thermostat-programs.md) for the thermostat.
-
-
-
-
- Child Properties
-
- - created_at Datetime
-
- Date and time at which the thermostat weekly program was created.
-
- - friday_program_id UUID
-
- ID of the thermostat daily program to run on Fridays.
-
- - monday_program_id UUID
-
- ID of the thermostat daily program to run on Mondays.
-
- - saturday_program_id UUID
-
- ID of the thermostat daily program to run on Saturdays.
-
- - sunday_program_id UUID
-
- ID of the thermostat daily program to run on Sundays.
-
- - thursday_program_id UUID
-
- ID of the thermostat daily program to run on Thursdays.
-
- - tuesday_program_id UUID
-
- ID of the thermostat daily program to run on Tuesdays.
-
- - wednesday_program_id UUID
-
- ID of the thermostat daily program to run on Wednesdays.
+**`device_disconnected`**
-
+Indicates that the device is disconnected.
---
-
-## Errors
-
**`account_disconnected`**
Indicates that the account is disconnected.
@@ -3709,67 +3616,12 @@ Indicates that the Seam API cannot communicate with [Seam Bridge](../../capabili
---
-**`device_disconnected`**
-
-Indicates that the device is disconnected.
-
----
-
-**`device_offline`**
-
-Indicates that the device is offline.
-
----
-
-**`device_removed`**
-
-Indicates that the device has been removed.
-
----
-
-**`hub_disconnected`**
-
-Indicates that the hub is disconnected.
-
----
-
**`invalid_credentials`**
Indicates that the credentials provided were invalid.
---
-**`lockly_missing_wifi_bridge`**
-
-Indicates that the Lockly lock is not connected to a Wi-Fi bridge.
-
----
-
-**`missing_device_credentials`**
-
-Indicates that device credentials are missing.
-
----
-
-**`subscription_required`**
-
-Indicates that a subscription is required to connect.
-
----
-
-**`ttlock_lock_not_paired_to_gateway`**
-
-Indicates that the lock is not paired with a gateway.
-
----
-
-### Thermostats
-**`auxiliary_heat_running`**
-
-Indicates that the auxiliary heat is running.
-
----
-
## Warnings
@@ -3797,6 +3649,12 @@ Indicates that Seam detected that the Lockly device does not have a time zone co
---
+**`nest_thermostat_in_manual_eco_mode`**
+
+Indicates that the Nest thermostat is in manual eco mode.
+
+---
+
**`salto_ks_office_mode`**
Indicates that the Salto KS lock is in Office Mode. Access Codes will not unlock doors.
@@ -3821,6 +3679,12 @@ Indicates that a scheduled maintenance window has been detected.
---
+**`temperature_threshold_exceeded`**
+
+Indicates that the temperature threshold has been exceeded.
+
+---
+
**`third_party_integration_detected`**
Indicates that a third-party integration has been detected.
@@ -3839,19 +3703,6 @@ Indicates that the Wyze Lock is not connected to a gateway.
---
-### Thermostats
-**`nest_thermostat_in_manual_eco_mode`**
-
-Indicates that the Nest thermostat is in manual eco mode.
-
----
-
-**`temperature_threshold_exceeded`**
-
-Indicates that the temperature threshold has been exceeded.
-
----
-
## Events
diff --git a/src/layouts/partials/api-resource.hbs b/src/layouts/partials/api-resource.hbs
index b90d0ac9b..6f88817f9 100644
--- a/src/layouts/partials/api-resource.hbs
+++ b/src/layouts/partials/api-resource.hbs
@@ -1,3 +1,4 @@
+{{#unless hidePreamble}}
## The {{name}} Object
- [Properties](./#properties)
@@ -13,6 +14,7 @@
{{description}}
{{/if}}
+{{/unless}}
{{#if resourceSamples.length}}
{% tabs %}
diff --git a/src/lib/layout/api-endpoint.ts b/src/lib/layout/api-endpoint.ts
index 4a364f79d..c1000f0dc 100644
--- a/src/lib/layout/api-endpoint.ts
+++ b/src/lib/layout/api-endpoint.ts
@@ -168,6 +168,7 @@ export function setEndpointLayoutContext(
file.response.actionAttempt = {
name: actionAttempt.actionAttemptType,
description: actionAttempt.description,
+ hidePreamble: false,
propertyGroups: groupProperties(
actionAttempt.properties.filter(
({ isUndocumented }) => !isUndocumented,
diff --git a/src/lib/layout/api-route.ts b/src/lib/layout/api-route.ts
index 48aef14a2..c15d0ff51 100644
--- a/src/lib/layout/api-route.ts
+++ b/src/lib/layout/api-route.ts
@@ -75,6 +75,7 @@ export interface ApiRouteResource {
propertyGroups: ApiRoutePropertyGroup[]
legacyPropertyGroups?: ApiRoutePropertyGroup[]
events: ApiRouteEvent[]
+ hidePreamble: boolean
}
interface ApiRouteVariantGroup {
@@ -86,16 +87,17 @@ interface ApiRouteVariantGroup {
interface ApiRouteVariant {
name: string
description: string
+ parentResouceType: string | null
}
type ApiRouteEndpoint = Pick
-export function setApiRouteLayoutContext(
+export const setApiRouteLayoutContext = (
file: Partial,
route: Route,
blueprint: Blueprint,
pathMetadata: PathMetadata,
-): void {
+): void => {
const metadata = pathMetadata[route.path]
if (metadata == null) {
throw new Error(`Missing path metadata for ${route.path}`)
@@ -146,9 +148,13 @@ export function setApiRouteLayoutContext(
const warningsProp = resource.properties.find((p) => p.name === 'warnings')
const errorsProp = resource.properties.find((p) => p.name === 'errors')
const warningGroups =
- warningsProp != null ? groupVariants(warningsProp, groupOptions) : []
+ warningsProp != null
+ ? groupVariants(warningsProp, groupOptions, resourceType, resourceTypes)
+ : []
const errorGroups =
- errorsProp != null ? groupVariants(errorsProp, groupOptions) : []
+ errorsProp != null
+ ? groupVariants(errorsProp, groupOptions, resourceType, resourceTypes)
+ : []
const allProperties = resource.properties.filter(
({ isUndocumented }) => !isUndocumented,
@@ -190,8 +196,23 @@ export function setApiRouteLayoutContext(
...(legacyPropertyGroups == null ? {} : { legacyPropertyGroups }),
errorGroups,
warningGroups,
+ hidePreamble: route.path !== resource.routePath,
events: eventsByRoutePath.get(resource.routePath) ?? [],
- resourceSamples: resource.resourceSamples.map(mapResourceSample),
+ resourceSamples: resource.resourceSamples
+ .filter(({ title }) => {
+ if (groupOptions.include != null) {
+ return groupOptions.include.some((x) =>
+ title.toLowerCase().includes(x.split('_')[0]?.slice(0, -1) ?? ''),
+ )
+ }
+ if (groupOptions.exclude != null) {
+ return !groupOptions.exclude.some((x) =>
+ title.toLowerCase().includes(x.split('_')[0]?.slice(0, -1) ?? ''),
+ )
+ }
+ return true
+ })
+ .map(mapResourceSample),
})
}
}
@@ -205,6 +226,8 @@ const groupVariants = (
include?: string[] | undefined
exclude?: string[] | undefined
},
+ resourceType: string,
+ resourceTypes: string[],
): ApiRouteVariantGroup[] => {
if (!isDiscriminatedListProperty(property)) {
return []
@@ -213,17 +236,20 @@ const groupVariants = (
const getApiRouteVariants = (
variantGroupKey: string | null,
): ApiRouteVariant[] => {
- return collectResourceVariants({
- ...property,
- variants: property.variants.filter(
- (v) => v.variantGroupKey === variantGroupKey,
- ),
- }).sort((a, b) => {
+ return collectResourceVariants(
+ {
+ ...property,
+ variants: property.variants.filter(
+ (v) => v.variantGroupKey === variantGroupKey,
+ ),
+ },
+ resourceTypes,
+ ).sort((a, b) => {
return a.name.localeCompare(b.name)
})
}
- return property.variantGroups
+ const groups = property.variantGroups
.reduce(
(groups, variantGroup) => [
...groups,
@@ -256,6 +282,40 @@ const groupVariants = (
if (a.variantGroupKey === null || b.name == null) return 1
return a.name.localeCompare(b.name)
})
+
+ if (include != null) {
+ const variants = groups
+ .flatMap((g) => g.variants)
+ .sort((a, b) => {
+ if (a.parentResouceType === null && b.parentResouceType === null) {
+ return a.name.localeCompare(b.name)
+ }
+ if (a.parentResouceType === resourceType) {
+ return -1
+ }
+ if (b.parentResouceType === resourceType) {
+ return 1
+ }
+ if (a.parentResouceType === null) {
+ return -1
+ }
+ if (b.parentResouceType === null) {
+ return 1
+ }
+ if (a.parentResouceType !== b.parentResouceType) {
+ return a.parentResouceType.localeCompare(b.parentResouceType)
+ }
+ return a.name.localeCompare(b.name)
+ })
+ return [
+ {
+ variantGroupKey: null,
+ variants,
+ },
+ ]
+ }
+
+ return groups
}
const isDiscriminatedListProperty = (
@@ -270,6 +330,7 @@ const isDiscriminatedListProperty = (
const collectResourceVariants = (
property: DiscriminatedListProperty,
+ resourceTypes: string[],
): ApiRouteVariant[] => {
return property.variants
.map((variant) => {
@@ -284,6 +345,10 @@ const collectResourceVariants = (
return {
name: discriminator.values[0].name,
description: variant.description,
+ parentResouceType: getParentVariantResourceType(
+ variant.properties.map(({ name }) => name),
+ resourceTypes,
+ ),
}
})
.filter((variant): variant is ApiRouteVariant => variant !== null)
@@ -310,7 +375,7 @@ export const groupProperties = (
return a.name.localeCompare(b.name)
})
- return propertyGroups
+ const groups = propertyGroups
.reduce(
(groups, propertyGroup) => [
...groups,
@@ -343,6 +408,20 @@ export const groupProperties = (
if (b.name == null) return 1
return a.name.localeCompare(b.name)
})
+
+ if (include != null) {
+ const properties = groups
+ .flatMap((g) => g.properties)
+ .sort((a, b) => a.name.localeCompare(b.name))
+ return [
+ {
+ propertyGroupKey: null,
+ properties,
+ },
+ ]
+ }
+
+ return groups
}
const groupEventsByRoutePath = (
@@ -371,10 +450,10 @@ const groupEventsByRoutePath = (
const getFirstParagraph = (text: string): string =>
text.split('\n\n').at(0) ?? text
-function findEnumProperty(
+const findEnumProperty = (
properties: Property[],
name: string,
-): EnumProperty | null {
+): EnumProperty | null => {
const prop = properties.find(
(p) => p.name === name && p.format === 'enum',
) as EnumProperty | undefined
@@ -491,10 +570,10 @@ const flattenObjectProperties = (
return results
}
-function addLinkTargetsToProperties(
+const addLinkTargetsToProperties = (
properties: ApiRouteProperty[] | undefined,
sections: { hasErrors: boolean; hasWarnings: boolean },
-): void {
+): void => {
if (properties == null) return
const linkableProperties: Record = {
errors: sections.hasErrors ? './#errors' : undefined,
@@ -527,3 +606,15 @@ const mapResourceSample = (sample: ResourceSample): ResourceSampleContext => {
resourceDataSyntax: jsonSample.resource_data_syntax,
}
}
+
+const getParentVariantResourceType = (
+ propertyKeys: string[],
+ resourceTypes: string[],
+): string | null => {
+ const keyMap = Object.fromEntries(
+ resourceTypes.map((k) => [`is_${k}_error`, k]),
+ )
+ const key = propertyKeys.find((k) => Object.keys(keyMap).includes(k))
+ if (key == null) return null
+ return keyMap[key] ?? null
+}