Changelog

New updates and improvements to Seam.

New Integration: 33 Lock

New Integration: 33 Lock

This week, we’re thrilled to release our 33 Lock integration! We’ve gotten to know the 33 Lock team over the past year. They’re an up-and-coming access control brand based out of Vancouver, Canada. Focused on delivering innovative access solutions at an affordable price, 33 Lock offers a number of lock devices. Check them all out on our Supported Devices & Systems page!

For this integration, we support creating and managing access codes, as well as performing remote unlocking. Later on, we plan to add support for mobile Bluetooth⁠ credentials.

For more details, see our 33 Lock getting started and integration guides.

2024.12.13 Changelog

Changed

  • Improved error handling for Salto: We now recognize when a user has been removed from a Salto site and flag the associated account as disconnected instead of continuing to try to reconnect the account.

Fixes

  • Dormakaba Oracode syncing: We corrected an issue in which a Dormakaba Oracode account with a large number of sites and devices was failing to sync. Also, note that Dormakaba Oracode does not have the stable tag.
  • Duplicate Schlage access code names: We corrected an issue in which excess internal errors resulted when users customized Schlage access code names, deleted these access codes, and then created new ones with the same custom names.

New DeviceDB

New DeviceDB

This week, we’re excited to release our new DeviceDB that powers our Supported Devices & Systems page and will soon also connect to our embeddable <SupportedDeviceTable /> Seam Component that you can add to your website.

Many of you consult the Seam Supported Devices & Systems page to understand which brands and devices can be controlled using Seam.

Up until recently, this page was generated from a couple of hacked-together spreadsheets. However, as we extended Seam integrations to new device categories and brands, it became apparent that the spreadsheet approach could not accurately represent the full breadth of device and system permutations that Seam supports.

It was clearly time for a more robust approach, so we set out to create DeviceDB—a new, powerful, and exhaustive backend to store and retrieve all devices, accessories, systems, and brands that Seam supports. Given the complexity of the IoT world, it took many months to arrive at a sufficiently-flexible schema that could handle this complexity correctly.

As of this week, our new DeviceDB is powering the Supported Devices & Systems page. We’ll let you know when we connect DeviceDB to the <SupportedDeviceTable /> Seam Component as well.

As part of this release, we’re now listing not only the specific systems that we support (such as Salto KS and Salto Space), but also the compatibility between specific devices and systems. In the coming weeks, we’ll roll out additional information, such as device capabilities and required accessories to enable these capabilities.

Check out these powerful new DeviceDB features!

System, Service, and App Compatibility by Manufacturer

Our Supported Devices & Systems page now shows the exact app and system that Seam is compatible with for each brand.

For example, Seam supports connecting with Yale accounts for both Yale Access (U.S. and Canada) and Yale Home (Europe, Middle East, India, and APAC). However, Seam does not yet support Yale Smart Living accounts (primarily, UK) and Yale Connect (Latin America).

System, service, and app compatibility by manufacturer on our Supported Devices & Systems page

System and App Compatibility by Device

On our Supported Devices & Systems page, we also now show the system and apps with which specific devices are compatible.

For example, while some Assa Abloy Vingcard devices are compatible with both Visionline and Vostio systems, some are only compatible with one or the other. Knowing system and app compatibility at this granular level can help your users better understand the devices that are compatible with their existing systems.

System compatibility by device on our Supported Devices & Systems page

2024.12.06 Changelog

New

  • Improved Nest thermostat rate limiting error message: We now provide a more helpful error message to let you know about the restrictive account and rate limits in the Google Device Access Sandbox environment. We recommend that you apply for Google Commercial Development for your Nest devices. For more information, see Obtain Google Nest Device Access and Commercial Development.
  • Improved thermostat set point error messages: We now provide more helpful error messages when a requested thermostat set point is invalid, for example, if the requested set point is outside of the allowed temperature range for the thermostat.

Changed

  • Improved thermostat threshold display in Seam Console: We moved thermostat temperature thresholds to the Properties area on the Seam Console thermostat page. We also made it more intuitive to set and edit these thresholds.

    Improved thermostat temperature threshold display in Seam Console

  • Added support for two more Igloohome devices: We added support for two Igloohome Deadbolt Go devices.

Fixes

  • Seam Console background truncation: We fixed an issue in which the background for Seam Console pages was truncated.
  • My2N login failure in Connect Webview: We fixed a permissions-related issue that was causing login failures for some My2N accounts.
  • Method for Schlage lock.unlocked events: When a remote unlock occurred through the Seam API for a Schlage device, the resulting lock.unlocked event was incorrectly reporting the method as manual. We corrected this issue such that these lock.unlocked events now show seamapi as the method.

New Set HVAC Mode Endpoint

New Set HVAC Mode Endpoint

This week, we’ve added a new thermostat endpoint, and we want your opinion. At Seam, we’re fervently committed to making it easier to develop your IoT app. We saw an opportunity to make an aspect of our thermostats API more ergonomic, so we jumped at the chance to give you more choices and to meet your needs better!

In our original implementation, you could set the HVAC mode of a thermostat using any of the following four separate “imperative” endpoints:

  • /thermostats/heat
  • /thermostats/cool
  • /thermosats/heat_cool
  • /thermostats/off

Then, we realized that some developers might find it more efficient to use a single endpoint—/thermostats/set_hvac_mode.

We’re introducing a preview of this new endpoint in our HTTP API and in our JavaScript, Python, Ruby, and PHP SDKs. We invite you to try it out and let us know what you think.

(Don’t worry, though. We’re not deprecating the existing four imperative endpoints. We’ve just added the new one.)

The following JavaScript example shows you how to use this new endpoint:

1// Get the thermostat.
2const thermostat = await seam.devices.get({
3  device_id: "bad6d447-f847-4672-94a9-5992398d0272"
4});
5
6// Confirm that the thermostat supports the desired mode.
7if (thermostat.can_hvac_heat) {
8  // Set the HVAC mode.
9  await seam.thermostats.setHvacMode({
10    device_id: thermostat.device_id,
11    hvac_mode_setting: "heat",
12    heating_set_point_celsius: 20
13  })
14};

2024.11.26 Changelog

New

  • Akiles webhooks: We added webhook support for Akiles lock.unlocked and lock.locked events.

Changed

  • Warning for Nest thermostats in manual eco mode: You cannot perform imperative actions—such as setting the HVAC mode to heat—on Google Nest thermostats that are in manual eco mode. Consequently, we now emit a nest_thermostat_in_manual_eco_mode warning on the affected device.
  • Workspaces displayed in alphabetical order: The Seam Console workspace picker now displays the list of your workspaces in alphabetical order.

Fixes

  • Add missing device capability flag: We corrected an issue in which specific locks with Yale Smart Modules were missing the can_program_online_access_codes capability flag.
  • Improve handling for Nuki outages: To handle these intermittent outages more elegantly, we now try to refresh the affected Nuki devices instead of just marking them as disconnected.
  • Device warnings displayed twice in Seam Console: We corrected an issue in which the Warnings area was displayed twice on the Seam Console Device page.

New Ruby SDK

New Ruby SDK

This week, we’re excited to continue our new SDK releases with the official announcement of our new Ruby SDK!

Like the other new Seam SDKs that we’ve released recently, the new Ruby SDK is generated automatically on a daily basis to ensure that methods and types are always up-to-date with the latest API changes. Our new Ruby SDK streamlines dependencies and standardizes the core interfaces to match our JavaScript and other SDKs closely. This means that if your organization uses multiple programming languages, you can expect the same familiar features—like the Seam::Webhook handler and wait_for_action_attempt option—no matter which SDK you need.

By auto-generating and aligning our SDKs, we make sure that using the Seam SDKs is always the best developer experience for integrating with Seam.

We encourage you to install the new Seam Ruby SDK right away. Use the following command to add the Seam Ruby SDK as a dependency to your project using Bundler:

1bundle add seam

If you’re running the original Seam Ruby SDK (that is, the seamapi gem instead of the new seam gem), see our migration guide. seam is mostly a drop-in replacement for seamapi, but some method signatures and options have changed to improve overall consistency with the Seam API.

2024.11.15 Changelog

New

  • Akiles integration: We are thrilled to promote our Akiles integration from the previous preview stage to a stable release! For details, see our Get started with Akiles locks guide.

Changed

  • Deprecate /devices/delete: We have now deprecated /devices/delete, and we plan to remove this endpoint in the near future. Migrate away from using this endpoint. Instead, unmanage devices.

    If you want a way to mark unmanaged devices as "deleted" in you app, we recommend setting device.custom_metadata.

    We plan to bring back /devices/delete in the future, but the behavior will be different. Consequently, to avoid unexpected changes in you app’s behavior, we will remove this endpoint and then reintroduce it later. In this way, we can ensure that no customers rely on the current behavior. We are monitoring the use of /devices/delete and will reach out directly to any workspace owners that are actively using this endpoint. In addition, we plan to provide advanced notice once we have set a date for the removal of /devices/delete.

    Note that Seam will continue to emit device.deleted events when devices are deleted due to the deletion of the associated connected_account.

    If you have any questions, contact us.

  • Improved validation consistency for thermostats in Seam Console: We have made field validation more visually consistent across the thermostat pages in Seam Console.

  • Deprecate climate preset manual_override_allowed property: We are in the process of migrating the manual_override_allowed property from climate presets to thermostat_schedule.is_override_allowed. As an intermediary step, we have made this manual_override_allowed property optional on climate presets, and it defaults to true. Because we have deprecated manual_override_allowed property on climate presets, we recommend omitting this property from all climate preset requests.

New Thermostat Native Scheduling Override

New Thermostat Native Scheduling Override

This week, we’re excited to announce that Seam now overrides any native thermostat scheduling for all thermostats that we support, including Ecobee, Honeywell Resideo, and Google Nest. Often, actions sent to remotely-managed devices can “collide” with native preprogrammed schedules or native “hold” behavior, which creates confusion for everyone involved. Of course, we have a solution for this issue!

When you use Seam to tell a thermostat to do something, Seam makes sure that the thermostat does exactly what you’ve requested—with no confusion.

When you schedule or activate a climate preset, or when you set a thermostat to heat or cool to a specific temperature, Seam’s platform works persistently behind-the-scenes to ensure that your request overrides any native behavior or scheduling on the thermostat.

2024.11.08 Changelog

New

  • Update multiple linked access codes: For a property with a single locked entrance, you can use /access_codes/update. However, consider a situation in which a property has multiple doors, and you want to use a single PIN code for all the doors. In this case, you’d create groups of linked access codes using /access_codes/create_multiple. To enable you to change the starts_at and ends_at times for groups of linked access codes, we’ve introduced a new /access_codes/update_multiple endpoint. For details, see the Seam docs.

    1// Create the group of linked access codes.
    2// Each returned access code includes a common_code_key.
    3const linkedCodes = await seam.accessCodes.createMultiple({
    4  device_ids: [
    5    "8e94044d-a4d1-4691-9f7e-e97d3e8a0b73",
    6    "d87eea5d-71c6-4633-a966-396c5ac51177"
    7  ],
    8  name: "Jane's reservation",
    9  starts_at: "2024-11-15T15:00:00Z",
    10  ends_at: "2024-11-17T11:00:00Z"
    11});
    12
    13// Update the starting and ending times
    14// for all these linked access codes.
    15await seam.accessCodes.updateMultiple({
    16  common_code_key: linkedCodes[0].common_code_key,
    17  starts_at: "2024-11-15T12:00:00Z",
    18  ends_at: "2024-11-17T15:00:00Z"
    19});
  • Added location property for Google Nest devices: We now capture and display the thermostat.location for Google Nest devices.

Changed

  • Loosened /access_codes/update restrictions: If you use /access_codes/create_multiple with a single device_id, the result is a single access code on a single device. Previously, you could not use /access_codes/update to change this access code. We have eliminated this restriction. Note, however, that if you use /access_codes/create_multiple with multiple device_ids, and you then want to change the starting or ending times for these access codes, you must use /access_codes/update_multiple, to ensure that all linked access codes remain in sync.

Seam Console Navigation Redesign

Seam Console Navigation Redesign

This week, we’re excited to share our refreshed Seam Console navigation. We’ve updated its design to be modern and intuitive. A brand new workspace switcher makes it easier to distinguish between production and sandbox workspaces. Console is one of our oldest products, and we’re planning to roll out a number of large improvements in the coming weeks, from device profiles to team management.

After a few weeks of testing with beta users, we’re now rolling out this refresh to our entire user base. If you spot any issues or bugs, please reach out to us right away, and we’ll fix them.

New Tab Menu

We’ve introduced a new, simplified top navigation menu that includes submenus within the respective sections. Previously, the navigation pane was on the left.

The new top tab menu makes it easier to navigate the Seam Console.

New Workspace Switcher

At the top of the Seam Console, we’ve added a new workspace switcher. We’ve also improved the labeling to indicate whether each workspace is a sandbox or production workspace.

The new workspace switcher makes it easier to distinguish between sandbox and production workspaces.

New Submenus

Some of the areas of the Console now include submenus that provide more depth. For example, the Developer tab provides a submenu with additional options, such as Connect Webviews, API Keys, Webhooks, and more.

Some areas of the Seam Console now have submenus.

2024.11.01 Changelog

New

  • Connect Webview button customization: You can now customize the background color and text color for the primary button at the bottom of your Connect Webviews. This new feature enables you to blend Connect Webviews more seamlessly into your app.
  • Seam Console support for temperature thresholds: We’ve added full support for configuring thermostat temperature thresholds in the Seam Console. In the top menu, click Devices and then select your thermostat. Click Thresholds and then Add Threshold. Select the Threshold Type, choose the desired threshold values, and click Save. You can now set temperature thresholds using the Seam Console.

Changed

  • Temperature threshold warning readability: The thermostat temperature_threshold_exceeded warning message displays the reported temperature that exceeded the configured threshold. We now round this reported temperature to two decimal places for better readability.

Fixes

  • Connect Webview success page shown after canceling: We corrected an issue in which a Connect Webview displayed in an iframe still showed the success page after the user canceled the authorization process at a previous page.
  • Excessive climate preset activation: We corrected an issue in which Seam reactivated the climate preset at each sync with the thermostat, even when the thermostat’s climate settings already matched the desired preset. This issue also resulted in excessive thermostat.climate_preset_activated events.

New Thermostat Temperature Threshold Monitoring

New Thermostat Temperature Threshold Monitoring

This week, we’re excited to announce new thermostat temperature range monitoring functionality. Our new temperature thresholds enable you to set a temperature range and receive event notifications whenever the current temperature reported by a thermostat crosses outside of the range. This can be handy for detecting malfunctioning HVAC systems or thermostat misuse, such as running the A/C too low.

To start, set upper and lower temperature thresholds for your thermostat. Then, if the thermostat reports a temperature outside this range, Seam emits a thermostat.temperature_threshold_exceeded event. Seam also adds a warning to the affected device.

Setting the Threshold

First, set the threshold range in Celsius or Fahrenheit using the new setTemperatureThreshold function with the desired upper and lower limit parameters.

1await seam.thermostats.setTemperatureThreshold({
2  device_id: "2d488679-6f07-4810-aed2-e726872c1dd5",
3  lower_limit_celsius: 4,
4  upper_limit_celsius: 30
5});

Monitoring for Events

Next, monitor for incoming webhooks with the thermostat.temperature_threshold_exceeded event. This event includes the device_id of the affected thermostat, as well as the configured threshold values and the reported temperature that exceeded this threshold range.

1{
2  "event_id": "1d045cba-af1b-44a6-a167-af0c82c0bf74",
3  "device_id": "2d488679-6f07-4810-aed2-e726872c1dd5",
4  "event_description": "Current temperature (3.5°C) has exceeded the lower limit of 4°C.",
5  "event_type": "thermostat.temperature_threshold_exceeded",
6  "workspace_id": "0664b610-ec46b-4366-ad29-78491f7832bc",
7  "created_at": "2024-10-23T21:28:05.894Z",
8  "occurred_at": "2024-10-23T21:28:02.212Z",
9  "temperature_celsius": 3.5
10  "temperature_fahrenheit": 38.3
11  "lower_limit_celsius": 4
12  "lower_limit_fahrenheit": 39.2
13  "upper_limit_celsius": 30
14  "upper_limit_fahrenheit": 86
15  "connected_account_id": "f2249ed5-621d-4cf2-a2ed-5935e3b9a4cd",
16}

For more details on this functionality, check out our updated docs.

2024.10.25 Changelog

New

  • device.added event: We’ve introduced a device.added event to indicate when a new device is added to Seam or when a device is re-added to Seam after having been removed. This event pairs with device.removed, and we encourage you to use device.added instead of device.connected to confirm the addition of devices to Seam.

    device.connected and device.disconnected are intended for monitoring online and offline status changes. That is, this pair of events specifically addresses a device’s internet connection status.

    The new device.added event is especially useful for devices that are always considered offline, such as devices that support offline access codes.

  • New method property for thermostat.manually_adjusted event: We added a new method property for the thermostat.manually_adjusted event. This property indicates whether the thermostat adjustment was caused by the Seam API (seam) or by a person making a change at the thermostat (manual). While API-triggered events provide information on the usage of your app, manual events inform you about guest behavior.

Changed

  • Improved Google Nest name display: We now display more descriptive Google Nest device names, which makes it easier to distinguish between multiple Nest devices, especially in the Seam Console.
  • Seam thermostat actions for Ecobee: When you issue an “imperative” thermostat action, such as /thermostats/heat, we now override the thermostat’s native scheduling for Ecobee devices. We’re adding this functionality for Honeywell thermostats next.

Fixes

  • Unmanaged code deletion: We fixed an edge-case where deleting unmanaged codes could lock devices into a state in which no other codes could be added or removed.

New Igloohome Real-Time Events

New Igloohome Real-Time Events

This week, we are excited to announce support for new events for Igloohome devices. To help you monitor your Igloohome locks more effectively in real time, we have added Igloohome to the list of manufacturers for which we emit lock.unlocked and lock.locked events. In these events for Igloohome devices, we also now report the following lock or unlock method values in the event payloads:

For lock.unlocked:

  • keycode
  • manual
  • unknown
  • seamapi

For lock.locked:

  • keycode
  • manual
  • unknown
  • seamapi
  • automatic

In addition, we now support the lock.access_denied event for Igloohome devices. This event indicates that an invalid entry attempt occurred, including entering the wrong PIN, exceeding the PIN length, and using an invalid key card.

2024.10.18 Changelog

New

  • Igloohome lock and unlock event support: We have added support for lock.locked and lock.unlocked events for Igloohome devices, as well as lock.access_denied. In these events for Igloohome devices, we also now report the lock or unlock method values in the event payloads.

Fixes

  • Thermostats in Seam Console: We polished the thermostats area of the Seam Console. First, we corrected a temperature display issue related to rounding when converting between Celsius and Fahrenheit. Second, we improved the Climate Presets tab, specifically when there are no climate presets or when the last climate preset is deleted from a device.
  • Heating and cooling set point validation: We now ensure that the heating set point is always lower than the cooling set point for a climate preset. If not, Seam now emits an invalid_heating_cooling_delta error.

New Akiles Integration

¿Qué tal, Akiles?

This week, we’re thrilled to share an early preview of our exciting new integration with Akiles, a leading provider of smart lock solutions in Europe!

Barcelona-based Akiles produces the Smart Cylinder, Roomlock, and Pinpad, as well as the Smart Controller for electrified locks and access points. The company also offers the Akiles Gateway and Akiles Cloud.

See our list of supported Akiles devices.

With this integration, you can…

  • Perform remote unlocking.
  • Create and manage online access codes.
  • View battery level.
  • Receive real-time events.

We’re excited to be working with the Akiles team, and we look forward to seeing what you build with their devices and Seam.

In the meantime, check out our Get started with Akiles locks guide to get a head start! If you have any questions, contact us.

2024.10.11 Changelog

Fixes

  • Too frequent thermostat manually_adjusted event: We corrected an issue that caused the thermostat.manually_adjusted event to occur unnecessarily.
  • Thermostat climate_preset_activated event: We corrected a minor issue that was preventing the thermostat.climate_preset_activated event from occurring.
  • NoiseAware device sync: We corrected an issue in which Seam only synced some of the NoiseAware devices within a connected account.

Introducing the Sandbox Simulate Feature

Introducing the Sandbox Simulate Feature

This week, we’re releasing a new set of simulate endpoints to enable you to simulate interactions and events with sandbox devices. The Seam sandbox is a special type of workspace where you can interact with virtual devices. These devices mimic very closely their real-world counterparts, which means that you can create device integration features without ever needing to own real devices. In fact, we’re often told that our sandbox is one of the best features in the Seam platform.

One limitation of virtual sandbox devices though is that you can’t physically interact with them to recreate real-world operating conditions, such as the Wi-Fi going out or someone unlocking a door. Furthermore, some conditions can be difficult to simulate even on real devices, like triggering a low-battery event.

Today, we’re making our sandbox even more powerful by introducing the first three endpoints to simulate specific conditions.

  • devices/simulate/disconnect
  • devices/simulate/connect
  • devices/simulate/remove

For now, these endpoints are only available on Yale and August sandbox devices. However, our plan is to add them to more device types over time, as well as to introduce new endpoints, like door unlocking, low battery, and so on.

The following JavaScript example shows how to simulate disconnecting a device:

1// Get the device.
2const device = await seam.devices.get({
3  device_id: "11111111-1111-1111-1111-444444444444"
4});
5
6// Confirm that Seam supports simulated disconnection for the device.
7if (device.can_simulate_disconnection) {
8  // Perform the simulated disconnection.
9  await seam.devices.simulate.disconnect({
10    device_id: device.device_id
11  })
12};

For details, see our docs.

2024.10.04 Changelog

New

  • New thermostat.manually_adjusted and thermostat.climate_preset_activated events: We added new events to report when a thermostat climate setting changes, either due to a scheduled climate preset becoming active or because something has changed on the device itself. We're introducing these events as a preview so that you can test while we continue to fine-tune them.

  • Simulation capability flags: To accompany our new simulate feature, we’ve added the following capability flags to show you which sandbox devices support these simulate endpoints:

    • device.can_simulate_disconnection
    • device.can_simulate_connection
    • device.can_simulate_removal

    For more information about capability flags, see our docs.

  • Climate preset management in Seam Console: You can now create and manage climate presets in the Seam Console.

Create and manage climate presets in the Seam Console.

  • Climate preset scheduling in Seam Console: You can now create and manage climate schedules in the Seam Console.

Create and manage climate schedules in the Seam Console.

Fixes

  • August/Yale access code sync: We fixed an issue that prevented access codes from being synced with August and Yale devices.

Seam Now Available on Mac Homebrew

Mac lovers, this week, we’re excited to announce that you can now brew install the Seam CLI on your Mac! Simply run brew install seam to get started. Special thanks to all of you who upvoted our GitHub project to help us secure the Seam name with Homebrew.

If you're not familiar with the Seam CLI, you can give it a spin in your browser first. It’s a great way to explore and test the Seam API.

1brew tap seamapi/homebrew-seam
2brew install seam

You can also install the Seam CLI using npm install -g seam-cli.

Demo of the Seam CLI in action

2024.09.27 Changelog

New

  • Thermostats API refinement: Last week, we announced our powerful and flexible new thermostats API. We appreciate your ideas and suggestions, and we are continuing to refine this API based on your feedback. For more details, see last week’s changelog or contact Seam.

Changed

  • August-Yale device name changes: When you change the name of an August or Yale (North America) lock using the Yale Access app, Seam now reflects this update right away instead of waiting for the next full device refresh.
  • More SmartThings sandbox device accounts: We added more sandbox device accounts for SmartThings.
  • Improved Igloohome Bridge access code performance: We introduced automatic job throttling with Igloohome access code creation to avoid job limits and timeouts on Igloohome Bridges.

Fixes

  • August/Yale capability detection: We improved the sync process to report device capabilities more accurately for August and Yale devices that are initially missing a bridge.
  • Igloohome access code creation: We expanded access code programming support for additional Igloohome device models.

New Thermostat Endpoints

Grab a Scarf! The New Seam Thermostat Endpoints Just Dropped

This week, we're excited to release a preview of the new thermostats API, improving existing functionality, as well as introducing new features such as climate presets! Note that final functionality is still subject to change so check with us first before launching this to a ton of users.

Why New Endpoints

Our previous thermostats API did a great job of retrieving thermostat data and enabling you to perform imperative commands, such as switching a thermostat to heat mode. However, we realized it needed a more intuitive and flexible interface for climate preset and scheduling. It also didn’t handle prioritization of overlapping scheduled climate presets, as well as reverting to a fallback preset.

This new and improved API now addresses all these, letting you create a set of reusable climate presets for a thermostat and then schedule these climate presets, by name, as needed.

New Thermostats API Endpoints

We've added or improved the following endpoints:

  • Get thermostats: Retrieve and monitor your users’ thermostats using /thermostats/list and /devices/get. The Seam API returns robust, up-to-date information about your connected thermostats.
  • Imperative endpoints: Perform immediate changes to your users’ thermostats using “imperative” endpoints, such as /thermostats/heat, /thermostats/cool, /thermostats/set_fan_mode, and so on.
  • [New] Create climate presets: Use /thermostats/create_climate_preset to create named climate presets, such as “occupied,” “eco,” “unoccupied,” “vacation mode,” and so on. Each preset can be configured with a specific operating mode (e.g. auto) and temperature.
  • [New] Flexible climate schedules: Schedule the climate presets that you have created, using /thermostats/schedules/create. Simply specify the preset climate name—that is, the climate_preset_key—along with starts_at and ends_at timestamps and the maximum override period. You can also set a fallback climate preset.

demo of the cli and new thermostat endpoints

Feedback and Next Steps

Because this release is a preview, we encourage you to try it out using the Seam CLI and give us your feedback. Note that we're also developing new capability flags for thermostats. Stay tuned for relevant announcements soon!

2024.09.20 Changelog

Changed

  • More Schlage sandbox device accounts: Added more sandbox device accounts for Schlage.

Fixes

  • TTLock capabilities detection: Fixed an issue in which TTLock devices with keypads were incorrectly reporting a lack of access code support.
  • SmartThings device refresh token detection: Improved automatic detection of failing refresh tokens. Instead of silently failing, Seam now correctly prompts the account owner to reauthenticate using a Connect Webview.
  • Dormakaba Oracode device reconnection: Fixed an issue that incorrectly disconnected Dormakaba Oracode accounts on reconnection.

New Python SDK

New Python SDK

This week, we’re excited to continue our new SDK releases with the official announcement of our new Python SDK!

Like the new Seam JavaScript SDK we released last week, the new Python SDK is generated automatically on a daily basis to ensure that methods and types are always up-to-date with the latest API changes. Our new Python SDK streamlines dependencies and standardizes the core interfaces to match our JavaScript SDK. This means that if your organization uses multiple programming languages, you can expect the same familiar features—like the SeamWebhook handler and waitForActionAttempt option—no matter which SDK you need.

By auto-generating and aligning our SDKs, we make sure that using the Seam SDKs is always the best developer experience for integrating with Seam.

We encourage you to install the new Seam Python SDK right away, using the following command:

1pip install seam
2# For some development environments, use pip3 in this command instead of pip.

If you’re running the original Seam Python SDK (that is, the seamapi package instead of the new seam package), see our migration guide. seam is mostly a drop-in replacement for seamapi, but some method signatures and options have changed to improve overall consistency with the Seam API.

2024.09.13 Changelog

New

  • Enhanced events filtering in Seam Console: We’ve made our events filtering more robust in the Seam Console. You can now filter events by a date range, filter to show only errors or warnings, and filter by a UUID. Also, you can now view the details of any event. an animated gif of the Seam Console's event page showing how to filter events

  • Extended log retention: We’ve introduced extended log retentions for select partners at an additional cost. Device logs, such as entry events and deleted device information, can now be retained longer than the default two weeks. Contact support@seam.co if you would like additional information.

Changed

  • Dormakaba Oracode error: Our previous error message for unsuccessful site connection inside the Connect Webview was confusing. We’ve adjusted it to make it clearer for users. If you’re trying to connect Oracode sites and are having issues, please let us know so that we can help you.
  • More August-Yale sandbox device accounts: We’ve added more sandbox device accounts for August-Yale. This expansion enables you to test multiple different accounts from the same provider in the same workspace.

Fixes

  • Salto account cleanup: We corrected an issue in which Salto locks were being deleted before dependent resources, which sometimes resulted in an error.

New Javascript SDK

New JavaScript SDK

This week, we’re excited to announce the official release of our new JavaScript SDK!

The new SDK has a smaller bundle size and fewer dependencies, and it is generated automatically on a daily basis to ensure that methods and types are always up-to-date with the latest API changes. Written entirely in TypeScript, this SDK works both on the server and in the browser, powering the Seam Console, Seam Components, Seam CLI, and more.

Our plan is to move all of our SDKs to this new auto-generated approach. We want to make sure that using any of our variety of Seam SDKs is always the best developer experience for integrating with Seam.

We encourage you to install the new Seam JavaScript SDK right away, using the following command:

1npm i seam

If you’re running the original Seam JavaScript SDK (that is, the seamapi package instead of the new seam package), see our migration guide. seam is mostly a drop-in replacement for seamapi, but some method signatures and options have changed to improve overall consistency with the Seam API.

2024.09.06 Change Log

New

  • Preferred access code length: We’ve added a preferred_code_length parameter to the access code create function. When creating an access code, if you do not specify a code (for example, “1234”), you can now set the preferred_code_length. Seam then generates a code of this length if the affected device supports the specified preferred code length.
  • August-Yale name change events: We’ve added support for immediately detecting name changes for August-Yale devices and updating our data. Previously, it could take a while for these changes to be reflected in Seam. Note that this addition is only for August-Yale devices in North America.

Changed

  • August-Yale online status: We’ve improved the detection of online/offline status for August-Yale devices. You should now see much more accurate reports.

Fixes

  • SmartThings events: Previously, our backend would occasionally throw an error on incoming SmartThings events, causing some events to be dropped. We have fixed this issue. Thanks to the couple of folks who reported this issue!
  • Igloohome access codes: Our Igloohome integration was incorrectly accepting PIN codes longer than six digits for online access codes on create. We’ve fixed this behavior to allow codes only between four and six digits in length. Note that offline access codes can still contain up to nine digits.
  • Console: Provider logos weren’t correctly showing up in the connected account view. We’ve corrected this view.
  • Seam Component edit access code function: We fixed a bug that would prevent users from editing time_bound ****access codes in our access code Seam Component.

Yale-August Real-Time Events

This week, we’re excited to announce that we’ve released real-time events for Yale and August devices within the North American region. That is, if you control your devices using the Yale Access app, you should now notice a massive improvement in how quickly you receive events relating to your device unlocking or changing online status. For devices outside of North America, we are working with Yale’s APAC and EMEIA teams to bring this enhancement later on.

From polling to real-time

The August-Yale integration is one of our oldest and has relied from the start on plain old polling to update device status and events. That meant that when a lock operation (such as an unlock) took place, it would take a few minutes for the event to be emitted from the Seam API to your server. Furthermore, as the number of Yale devices connected via Seam grew larger, we further decreased polling frequency to avoid flooding Yale’s server (fun fact: Seam’s Yale largest connected partner!).

Last spring, our friends at Yale informed us that real-time events would become available for Seam to consume and relay. We were thrilled and jumped at the opportunity to implement this enhancement for our customers. Not only does it improve the overall Yale-Seam integration experience, but it also ensures that our Yale friends can sleep soundly at night.

Rollout and available events

we began rolling out real-time events in late June. Given the importance of reliable events, we only slow rolled this out to more customers in July. As of August, we’re making this enhancement broadly available to all our customers, at no extra charge.

The following events are currently available:

  • lock.locked
  • lock.unlocked
  • device.connected
  • device.disconnected

We are also working on adding additional events for access code creation operations and device metadata updates, such as a user changing a device name.

What about Yale devices out of North America

As some Yale owners may recall, in May of 2023, Assa Abloy sold its Yale North American assets to Fortune Brands. As a result of this transaction, all Yale users outside of North America were migrated to a new backend accessible via the Yale Home app. For all intents and purposes, this is effectively a completely different integration. We are currently working with the Yale Home team to add support for real-time events and will release this at a later time.

Change Log

New

  • August-Yale real-time events: All August and Yale devices in North America now support real-time events for unlocking operations.
  • Connect Webview events: We’ve added two new events—connect_webview.login_succeeded and connect_webview.login_failed—to notify you whenever a Connect Webview completes. This will also create a more consistent developer experience with the events you receive from the iFrame-embedded Connect Webview.
  • Connect Webview styling: When you set a primary color, we now automatically adjust the text color to maximize contrast-ratio. Thanks to our friends at Lodgify for spotting this for us!
  • Lockly offline codes: You can now program offline access codes on all Lockly devices, and we also added the can_program_offline_access_codes capability flag. If you are not familiar with offline access codes, check out our Managing Offline Access Codes documentation.
  • Event descriptions: We’ve added an event_description to the payload for all events. It’s a human-readable string that tells you what the event is about and saves you a trip to our docs.
  • Access denied event: We’ve added a new lock.access_denied event to indicate when an incorrect access code is entered multiple times in a row on a smartlock device. This is only available on Kwikset devices at the moment.
  • Automatic relock event: We’ve added a new automatic value for lock_method events, which means that we now make it clearer when a lock automatically relocks after an unlocking operation.
  • Unmanaged device location: We now expose the location field for unmanaged devices. This enhancement can make it easier to identify where a device is located and whether it should be converted to managed.

Changed

  • Deprecate Get Locks: We’ve deprecated the /locks/get endpoint. If your code uses it, you will begin to see a warning.
  • Kwikset duplicate code name error: We’ve improved the error message to indicate clearly that Kwikset requires the first 14 characters of a Kwikset device access code name to be unique across the device.

Fixed

  • Schlage silent failing code: We’ve received a handful of reports that access codes on Schlage devices would occasionally report as set, despite not actually being set on the device. After weeks of investigation, we’ve identified the issue as a false positive status reported by the Schlage API. The good news is that we know how to identify this and have since implemented a fix that automatically recreates the code. We’ve seen a vast reduction in Schlage related access codes errors.
  • Kwikset Seam API unlock: Previously, lock.unlocked events on Kwikset devices didn’t reliably add the seamapi unlocking method to the event payload. We’ve improved the logic to make this detection more reliable.
  • Igloohome: We’ve fixed an issue related to the handling of invalid auth tokens whereas the renewal process wasn’t always correctly initiated.
  • Lockly: We now surface a clearer error message whenever a Lockly account’s API key does not have sufficient permissions.
  • Honeywell Resideo: We added a unique account id constraints on a given workspace because creating the same account twice lead to errors later on.
  • Nuki: We’ve improved the Nuki offline status detection because it was previously reporting devices as online when they were not.

New Capability Flags

This week, we’re thrilled to announce the release of our new device capability flags. Compared to the legacy capabilities_supported, these new flags provide far more granularity on what a specific device can do. They’re also computed in real time for each device to ensure timely knowledge of a given device instance’s functions. For example, these flags correctly detect the presence or lack of an accessory that is required for a specific function, such as an accessory keypad for programming online access codes.

Capability example

First four flags

For this feature launch, we are releasing the first four capability flags across all providers and existing devices that we support.

  • can_remotely_unlock: Indicates whether the device can perform a remote unlock operation.
  • can_remotely_lock: Indicates whether the device can perform a remote lock operation.
  • can_program_online_access_codes: Indicates whether the device can program online access codes. If true, it is currently possible to create new online access codes for the device, and Seam programs the device the next time it's online.
  • can_program_offline_access_codes: Indicates whether the device can program offline access codes. When this flag is true, Seam can generate an offline code for this device, regardless of the current online status of the device.

Example

1# Get the device.
2device = seam.devices.get(
3  device_id="11111111-1111-1111-1111-444444444444"
4)
5
6# Confirm that the device can remotely lock.
7if device.can_remotely_lock:
8  # Perform the lock operation.
9  seam.locks.lock_door(device_id=device.device_id)

Getting Started

We recommend that you begin migrating to these new flags because they will ensure that your applications correctly reflect the state and functions of a device.

To get started:

New Honeywell Thermostat Integration

This week, we are super excited to release our official Honeywell Thermostat integration! Along with Ecobee and Nest thermostats, you can now connect and control all Honeywell Resideo thermostats and control them through our SDKs, Seam-CLI, and the Seam Console.

Our office has a number of Honeywell thermostats. With the winter weather overtaking typically sunny California, we can confirm that the Seam CLI has been handy to crank up the heat on the Honeywell thermostats without having to get up and walk over to the actual thermostat…

Some resources to get you started with this integration:

As always, this integration will be in beta for the next couple of weeks; though we’ve thoroughly tested this integration, if you see any inconsistencies or bug, please let us know and we’ll patch issues right away.

Changelog

Added

  • Tedee: we added the ability to update an access code set on a Tedee device.
  • Seam Bridge: you can now setup Seam Bridge for on-prem systems through the Seam Connect Webview. If you need to connect on-prem devices or systems, contact us and we’ll fill you in on this Seam Bridge.
  • Seam Console & Account Disconnection: we added a button to let you quickly reconnect a third-party account; we also renamed the disconnect button to “delete” to avoid confusion with disconnection events tied to auth tokens expiring.

Fixed

  • Seam Components: we shipped a couple of visual tweaks to remove unnecessary borders and make components look generally better :)