New updates and improvements to Seam.
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…
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.
manually_adjusted
event: We corrected an issue that caused the thermostat.manually_adjusted
event to occur unnecessarily.climate_preset_activated
event: We corrected a minor issue that was preventing the thermostat.climate_preset_activated
event from occurring.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.
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.
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
.
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.
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.
We've added or improved the following endpoints:
/thermostats/list
and /devices/get
. The Seam API returns robust, up-to-date information about your connected thermostats./thermostats/heat
, /thermostats/cool
, /thermostats/set_fan_mode
, and so on./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./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.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!
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.
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.
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.
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.
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.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.time_bound
****access codes in our access code Seam Component.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.
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.
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.
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.
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.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_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.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
value for lock_method
events, which means that we now make it clearer when a lock automatically relocks after an unlocking operation.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
./locks/get
endpoint. If your code uses it, you will begin to see a warning.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.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.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.
For this feature launch, we are releasing the first four capability flags across all providers and existing devices that we support.
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)
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:
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.