Changelog/April 24, 2026
April 24, 2026

Seam is now SOC 2 compliant

Changelog image for Seam is now SOC 2 compliant

Seam is now SOC 2 compliant

We're excited to announce that Seam has successfully completed its SOC 2 Type I audit. Independently audited by Johanson Group LLP, our SOC 2 report validates the internal controls Seam operates to keep customer data — including access codes and credentials managed through our API — secure, available, and confidential.

SOC 2 is a security framework developed by the American Institute of Certified Public Accountants (AICPA). Our Type I report validates, at a point in time, that the controls Seam has in place are suitably designed to meet the Trust Services Criteria for security, confidentiality and availability.

Building secure access infrastructure is a core tenet of how Seam serves our customers. Whether you're issuing a lock code for a short-term rental, encoding a hotel key, or granting entry to an ACS system, the trust placed in our platform depends on our ability to protect the data flowing through it. SOC 2 Type I is the first step in formalizing that commitment — we're already working toward our SOC 2 Type II attestation, which validates the operating effectiveness of these controls over a sustained period.

If you would like a copy of our SOC 2 report, you can now request it by emailing security@seam.co — we'll send it under NDA.

2026.04.24 Changelog

New

  • API
    • Dormakaba Oracode access grants: Dormakaba Oracode now supports access grants. Time ranges honor a 1-day rounding window so user-specified check-in / check-out times map cleanly to Oracode user levels.
    • Dormakaba Oracode in-place code updates: Online (wireless) Oracode doors now update access codes in place via /earlyCheckin and /extendStay Live Services instead of delete+recreate, supporting up to 7 days early check-in and a 30-day extension. Offline codes still fall back to delete+recreate.
    • Schlage canonical IANA timezone: Every Schlage device now carries a canonical device.location.timezone (IANA string) that is auto-inferred from polled UTC offset history, and can also be set explicitly via POST /devices/report_provider_metadata with schlage_metadata.time_zone. DST math now uses this zone instead of a raw offset, resolving ambiguous cases (e.g. Phoenix vs. Pacific).
    • created_after and between filters on /seam/customer/v1/reservations/list: The customer reservations list endpoint accepts a created_after filter, and the between filter now performs an overlap check on starts_at / ends_at (returns reservations whose schedule overlaps the given window).
    • action_attempt_id on lock/unlock events: IS_LOCKED_REPORTED lock/unlock events now include the originating action_attempt_id (replacing the previous boolean reported_after_immediate_lock_action), making it easier to correlate a reported state change with the action that triggered it.
    • list_accessible_devices now follows access grants: /user_identities/list_accessible_devices returns devices reachable via the user's access grants (through spaces), not just devices directly linked to the user identity — matching the behavior of list_accessible_entrances. Devices reachable via both paths are deduplicated.
    • customers/list includes deleted customers: /seam/customer/v1/customers/list no longer hides soft-deleted customers.
    • New slug and manufacturer_model_ids on devices-by-capability: The devices-by-capability-name endpoint now returns slug and manufacturer_model_ids, and reports partner-facing capability support separately from the raw provider capability.
  • Console
    • Preferred timezone everywhere: Every date input and date display across the Console (access codes, access groups, access grants, ACS users / credentials, events, device properties, billing, team invites, customization profiles) now honors the workspace preferred timezone instead of browser-local. Workspace Settings adds a "Reset to local time" shortcut.
    • SALTO_KS_ENTRANCES_ONLY_FOR_SPACES workspace flag: A new workspace-level flag limits Salto KS access grants to entrances attached to spaces. Visible and toggleable in the Console and exposed to the Customer Portal.

Changed

  • API
    • credential_being_deleted merged into credential_deleted: The credential_being_deleted error type from the encode-credential flow has been merged into credential_deleted. Encode requests for a credential that is in the process of being deleted now return credential_deleted.
    • Encode requests rejected for resources being deleted: Card encode requests for access methods or credentials that are being deleted now fail fast with a clear error instead of proceeding and producing inconsistent state.
    • devices_connected_to_other_account warning clarified: The warning message now explicitly labels each offending UUID as device_id: rather than listing bare UUIDs, which previously looked like account IDs. The warning also updates its own message text when the device list changes.
    • New Salto warning — code modified external to Seam: When a Salto access group drifts from Seam's desired state, the affected access code now carries a code_modified_external_to_seam warning instead of silently reconciling.
    • KeyNest supports_webhooks corrected to false: KeyNest previously advertised webhook support but had no handler — capabilities now reflect reality.
    • list_accessible_devices drops client_session auth: Following the access-grant support above, /user_identities/list_accessible_devices no longer accepts client_session auth — use publishable_key or client_session_token as documented.
  • Console
    • Access codes managed by access grants are read-only for most fields: When editing an access code created by an access grant, only schedule fields (ongoing / time-bound, start / end) are editable, and an info banner lists every device whose access code will also be updated. Submitting routes through /access_grants/update so all linked codes update together.

Fixed

  • Schlage
    • Access code update retry collisions: Schlage access code updates now use a deferred retry strategy so in-flight commands on the lock resolve first, preventing "failed to process multiple commands" rejections.
    • DST-risk warning on ambiguous-timezone devices: Schlage devices whose zone couldn't be inferred from offset history now raise a schlage_access_code_ambiguous_timezone_dst_risk warning on any active native time-bound code whose schedule crosses an upcoming DST transition. Clearing the warning is a one-call fix via /devices/report_provider_metadata.
  • Salto
    • Heal stale access group references on permanent codes: When a Salto access group was deleted externally (or by cleanup scripts) but a site_user still referenced it, creating a permanent access code would fail. Seam now verifies the group exists, clears the stale reference, and creates a fresh group — and persists the healed group back to provider_state with the correct time schedule.
    • Strip slashes from names sent to Salto KS: Guest / entrance names are now sanitized before being sent to the Salto KS API, avoiding requests the upstream API rejects.
    • Preserve common_code_key when preferred PIN is unavailable: When Salto cannot assign the preferred PIN, common_code_key is preserved so subsequent codes can still share a credential.
    • Membership sync skipped for unchanged access groups: Access group membership sync short-circuits when Salto KS reports no change, reducing unnecessary writes.
  • Nuki
    • Proactive token refresh before expiry: Nuki access tokens are now refreshed before expiry instead of on 401, removing a class of transient connectivity failures.
    • Correct token TTL, 401 retry, configurable refresh buffer: Token handling honors the real TTL, retries 401s once with a fresh token, and exposes a configurable refresh buffer.
  • TTLock
    • WiFi lock detection via featureValue bits: TTLock WiFi lock detection now reads the featureValue bitfield in addition to the feature-flags fallback, giving accurate online status for some WiFi locks that previously reported incorrectly.
    • Reduced gateway BLE load during lock/unlock: Lock and unlock actions generate less BLE traffic to the gateway, improving responsiveness on busy deployments.
  • Sensi
    • OutOfRange setpoint handling: Sensi thermostat setpoint errors for out-of-range values are now handled and device setpoint constraints reflect the enforced range.
    • Enforced setpoint range persists across syncs: The enforced setpoint range is now persisted and reused across Sensi sync cycles rather than re-queried each time.
    • Offline thermostat on initial sync: When a Sensi thermostat is offline during the initial sync, the device is now created as offline with a device_disconnected warning and a message asking the user to reconnect to Wi-Fi, instead of the Connect Webview completing with zero devices.
  • Tado
    • Token refresh uses the right token: refreshAccount now passes refresh_token instead of the expired access_token, unblocking Tado reauthorization.
  • Honeywell Resideo
    • Automatic retry with exponential backoff: All Honeywell Resideo API calls now retry up to 3× on network errors and idempotent failures, improving reliability when the upstream API is flaky.
  • ASSA ABLOY Visionline
    • Guard against encoding superseded credentials: Encode no longer runs when the credential has already been replaced.
  • Igloohome
    • Bridge and device online state separated: Device status reflects the device's own state independently of the bridge's state, instead of conflating the two.
  • SmartThings
    • Flaky-connection false positives fixed: Interleaved DEVICE_ONLINE and HUB_AND_DEVICE_ONLINE events no longer trip the flaky-connection warning.
  • Access Codes & Access Grants
    • creating mutation cleared on offline-code provider success: Offline access codes (igloohome, Dormakaba Oracode) no longer remain in the creating pending-mutation state after being successfully programmed on the device.
By subscribing you agree to our Privacy Policy.
One API for All Devices
Global Infrastructure for Controlling the Physical World
Seam makes controlling IoT devices seamless and programmable. Our teams operate globally,
enabling businesses of all sizes.
Smart Locks
Access Systems
Knowledge
Lock Capabilities
Thermostats
Sensors
© 2026 Seam Labs, Inc.