Skip to main content

The access_code Object

Represents a smart lock access code. An access code is a code used for a keypad or pinpad device. Unlike physical keys, which can easily be lost or duplicated, PIN codes can be customized, tracked, and altered on the fly. Using the Seam Access Code API, you can easily generate access codes on the hundreds of door lock models with which we integrate. Seam supports programming two types of access codes: ongoing and time-bound. To differentiate between the two, refer to the type property of the access code. Ongoing codes display as ongoing, whereas time-bound codes are labeled time_bound. An ongoing access code is active, until it has been removed from the device. To specify an ongoing access code, leave both starts_at and ends_at empty. A time-bound access code will be programmed at the starts_at time and removed at the ends_at time. In addition, for certain devices, Seam also supports offline access codes. Offline access (PIN) codes are designed for door locks that might not always maintain an internet connection. For this type of access code, the device manufacturer uses encryption keys (tokens) to create server-based registries of algorithmically-generated offline PIN codes. Because the tokens remain synchronized with the managed devices, the locks do not require an active internet connection—and you do not need to be near the locks—to create an offline access code. Then, owners or managers can share these offline codes with users through a variety of mechanisms, such as messaging applications. That is, lock users do not need to install a smartphone application to receive an offline access code.
A one-time-use offline access code resource.
{
  "access_code_id": "e9cf6dd6-89aa-477f-a701-c08f3de13c1f",
  "code": "1234",
  "common_code_key": null,
  "created_at": "2025-06-14T16:54:17.946242Z",
  "device_id": "c9cd621d-ef0c-45c8-b608-026ebdb74615",
  "ends_at": "2025-07-04T16:54:17.946049Z",
  "errors": [],
  "pending_mutations": [],
  "is_backup": false,
  "is_backup_access_code_available": false,
  "is_external_modification_allowed": false,
  "is_managed": true,
  "is_offline_access_code": true,
  "is_one_time_use": true,
  "is_scheduled_on_device": true,
  "is_waiting_for_code_assignment": false,
  "name": "My Access Code",
  "pulled_backup_access_code_id": null,
  "starts_at": "2025-07-02T16:54:17.946049Z",
  "status": "set",
  "type": "time_bound",
  "warnings": [],
  "workspace_id": "750fc0bc-4450-4356-8d9f-18c6a3a6b2c7"
}

Properties

access_code_id UUID Unique identifier for the access code.
code String Code used for access. Typically, a numeric or alphanumeric string.
common_code_key String Unique identifier for a group of access codes that share the same code.
created_at Datetime Date and time at which the access code was created.
device_id UUID Unique identifier for the device associated with the access code.
dormakaba_oracode_metadata Object Metadata for a dormakaba Oracode managed access code. Only present for access codes from dormakaba Oracode devices.
ends_at Datetime Date and time after which the time-bound access code becomes inactive.
errors List of Objects Errors associated with the access code. The specific structure of each object in this list depends on the value of its error_code field. Variants:
is_backup Boolean Indicates whether the access code is a backup code.
is_backup_access_code_available Boolean Indicates whether a backup access code is available for use if the primary access code is lost or compromised.
is_external_modification_allowed Boolean Indicates whether changes to the access code from external sources are permitted.
is_managed Boolean Indicates whether Seam manages the access code.
is_offline_access_code Boolean Indicates whether the access code is intended for use in offline scenarios. If true, this code can be created on a device without a network connection.
is_one_time_use Boolean Indicates whether the access code can only be used once. If true, the code becomes invalid after the first use.
is_scheduled_on_device Boolean Indicates whether the code is set on the device according to a preconfigured schedule.
is_waiting_for_code_assignment Boolean Indicates whether the access code is waiting for a code assignment.
name String Name of the access code. Enables administrators and users to identify the access code easily, especially when there are numerous access codes. Note that the name provided on Seam is used to identify the code on Seam and is not necessarily the name that will appear in the lock provider’s app or on the device. This is because lock providers may have constraints on names, such as length, uniqueness, or characters that can be used. In addition, some lock providers may break down names into components such as first_name and last_name. To provide a consistent experience, Seam identifies the code on Seam by its name but may modify the name that appears on the lock provider’s app or on the device. For example, Seam may add additional characters or truncate the name to meet provider constraints. To help your users identify codes set by Seam, Seam provides the name exactly as it appears on the lock provider’s app or on the device as a separate property called appearance. This is an object with a name property and, optionally, first_name and last_name properties (for providers that break down a name into components).
pending_mutations List of Objects Collection of pending mutations for the access code. Indicates changes that Seam is in the process of pushing to the device. The specific structure of each object in this list depends on the value of its mutation_code field. Variants:
pulled_backup_access_code_id UUID Identifier of the pulled backup access code. Used to associate the pulled backup access code with the original access code.
starts_at Datetime Date and time at which the time-bound access code becomes active.
status Enum Current status of the access code within the operational lifecycle. Values are setting, a transitional phase that indicates that the code is being configured or activated; set, which indicates that the code is active and operational; unset, which indicates a deactivated or unused state, either before activation or after deliberate deactivation; removing, which indicates a transitional period in which the code is being deleted or made inactive; and unknown, which indicates an indeterminate state, due to reasons such as system errors or incomplete data, that highlights a potential need for system review or troubleshooting. See also Lifecycle of Access Codes.
type Enum Type of the access code. ongoing access codes are active continuously until deactivated manually. time_bound access codes have a specific duration.
warnings List of Objects Warnings associated with the access code. The specific structure of each object in this list depends on the value of its warning_code field. Variants:
workspace_id UUID Unique identifier for the Seam workspace associated with the access code.

Errors

wyze_potential_duplicate_code Potential duplicate access code detected.
wyze_duplicate_code_name Duplicate access code name detected.
smartthings_no_free_slots_available No free slots available on the device.
smartthings_failed_to_set_after_multiple_retries Failed to set code after multiple retries.
smartthings_failed_to_set_access_code Failed to set code on SmartThings device.
salto_ks_user_not_subscribed Salto site user is not subscribed.
replaced_by_newer_access_code This access code was overridden on the device by a newer access code programmed to the same slot.
no_space_for_access_code_on_device No space for access code on device.
kwikset_unable_to_confirm_deletion Unable to confirm the deletion of the access code on Kwikset device.
kwikset_unable_to_confirm_code Unable to confirm that the access code is set on Kwikset device.
kwikset_insufficient_permissions Admin role required—insufficient permissions to manage PINs on this Kwikset device. Please have a Home Admin update your role in the Kwikset app, or ask them to set the PIN.
keynest_unsupported_third_party_locker KeyNest locker is not supported.
failed_to_set_on_device Failed to set code on device.
failed_to_remove_from_device Failed to remove code from device.
duplicate_code_on_device Duplicate access code detected on device.
duplicate_code_attempt_prevented An attempt to modify this access code was prevented.
dormakaba_oracode_invalid_time_range No Dormakaba Oracode user levels configured for the requested time range.
code_modified_external_to_seam Code was modified or removed externally after Seam successfully set it on the device.
august_lock_temporarily_offline August lock is temporarily offline.
august_lock_missing_keypad August lock is missing a keypad.
august_lock_invalid_code_length Invalid code length for August lock.
august_device_programming_delay Access code has not yet been fully moved to the device.
account_disconnected Indicates that the account is disconnected.
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.
bridge_disconnected Indicates that the Seam API cannot communicate with Seam Bridge, 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.
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.
empty_backup_access_code_pool Indicates that the backup access code pool is empty.
hub_disconnected Indicates that the hub is disconnected.
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.
salto_ks_subscription_limit_exceeded Indicates that the Salto site user limit has been reached.
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.

Warnings

august_device_programming_delay Access code has not yet been fully moved to the device.
august_lock_temporarily_offline August lock is temporarily offline.
being_deleted Access code is being deleted.
code_modified_external_to_seam Code was modified or removed externally after Seam successfully set it on the device.
delay_in_removing_from_device Delay in removing code from device.
delay_in_setting_on_device Delay in setting code on device.
igloo_algopin_must_be_used_within_24_hours Algopins must be used within 24 hours.
kwikset_unable_to_confirm_code Unable to confirm that the access code is set on Kwikset device.
management_transferred Management was transferred to another workspace.
schlage_access_code_ambiguous_timezone_dst_risk The Schlage device’s timezone is ambiguous and this code’s schedule crosses a daylight-saving transition in at least one plausible timezone. A 1-hour safety buffer has been applied to the side of the schedule affected by the transition (ends_at for spring-forward, starts_at for fall-back) so the code stays active through the shift — the code may be usable up to 1 hour beyond your requested window. Set the device’s timezone via /devices/report_provider_metadata to clear the buffer and guarantee exact DST handling.
schlage_creation_outage Received an error when attempting to create this code.
schlage_detected_duplicate Duplicate access code detected.
smartthings_failed_to_set_access_code Failed to set code on SmartThings device.
third_party_integration_detected Third-party integration detected that may cause access codes to fail.
ultraloq_access_code_disabled Access code is disabled on Ultraloq device. Re-enable through the Ultraloq mobile app.
using_backup_access_code A backup access code has been pulled and is being used in place of this access code.

Events

access_code.created An access code was created.
access_code.changed An access code was changed.
access_code.scheduled_on_device An access code was scheduled natively on a device.
access_code.set_on_device An access code was set on a device.
access_code.removed_from_device An access code was removed from a device.
access_code.delay_in_setting_on_device There was an unusually long delay in setting an access code on a device.
access_code.failed_to_set_on_device An access code failed to be set on a device.
access_code.deleted An access code was deleted.
access_code.delay_in_removing_from_device There was an unusually long delay in removing an access code from a device.
access_code.failed_to_remove_from_device An access code failed to be removed from a device.
access_code.modified_external_to_seam An access code was modified outside of Seam.
access_code.deleted_external_to_seam An access code was deleted outside of Seam.
access_code.backup_access_code_pulled A backup access code was pulled from the backup access code pool and set on a device.

Endpoints

/access_codes/create Creates a new access code. /access_codes/create_multiple Creates new access codes that share a common code across multiple devices. /access_codes/delete Deletes an access code. /access_codes/generate_code Generates a code for an access code, given a device ID. /access_codes/get Returns a specified access code. /access_codes/list Returns a list of all access codes. /access_codes/pull_backup_access_code Retrieves a backup access code for an access code. See also Managing Backup Access Codes. /access_codes/report_device_constraints Enables you to report access code-related constraints for a device. Currently, supports reporting supported code length constraints for SmartThings devices. /access_codes/update Updates a specified active or upcoming access code. /access_codes/update_multiple Updates access codes that share a common code across multiple devices.