Managing Offline Access Codes
Learn how to create offline access codes for applicable smart locks with keypads.
Overview
This guide explains how to create offline access (PIN) codes for smart locks that support these types of codes. Use the Access Codes API to generate a time-bound or one-time-use offline access code. Note that Seam support for offline access code functions varies depending on the device manufacturer. For details, see the corresponding device guide.
Offline Access Code Restrictions
Note the following restrictions on offline access codes:
You cannot set custom codes for offline access codes.
For devices that support offline access codes, these PIN codes are retrieved from the door lock itself. That is, these PIN codes are not programmed using Wi-Fi. Rather, they are generated by an algorithm.
Once you create an offline access code, you cannot use the Seam API to update or delete it.
Brand-Specific Offline Access Code Restrictions
It is imperative to understand all manufacturer- and device-specific behaviors and constraints. For example, igloohome categorizes time-bound offline access codes as hourly-bound or daily-bound and enforces maximum numbers of each type. Also, you must configure dormakaba Oracode offline access codes to fit into specific predefined time slots called "user levels." Further, some manufacturers support one-time-use offline access codes, while others do not.
For details, see the corresponding device guide. Also, get the lock and view any manufacturer-specific properties.
Before You Begin: Confirm Capabilities
Before you attempt to create an offline access code, be sure to confirm that your device has the capability to perform this operation. You can check the following capability flag for the device:
device.can_program_offline_access_codes
Use Get Device for a specific device to return this capability flag. Then, use an if
statement or similar check to confirm that this flag is both present and true
before attempting to create an offline access code.
Request:
seam.locks.get(device="11111111-1111-1111-1111-444444444444")
Response:
Device(
device_id='11111111-1111-1111-1111-444444444444',
can_program_offline_access_codes=True, // You can create offline access codes for this device.
...
)
Creating Time-Bound Offline Access Codes
For Lockly locks, you can create time-bound offline access codes that define a validity period using starts_at
and ends_at
timestamps. For igloohome locks and dormakaba Oracode locks, you can create time-bound offline access codes with validity durations at either the hour level or the day level.
To create a time-bound offline access code, first issue a creation request. Then, poll or use a webhook to confirm that the code was registered successfully in the device manufacturer's offline access code server.
1. Create a Time-Bound Offline Access Code
To create a time-bound offline access code, provide the device_id
of the lock for which you want to create the code and set is_offline_access_code
to true
. Specify the starts_at
and ends_at
ISO 8601 timestamps to define the active time window for the offline code. You can also assign an optional name
to the offline access code. For more details, see the Create Access Code endpoint.
Request:
# Get the device.
device = seam.locks.get(
device_id="11111111-1111-1111-1111-444444444444"
)
# Confirm that the device supports offline access codes.
if device.can_program_offline_access_codes:
# Create the time-bound offline access code.
seam.access_codes.create(
device_id = device.device_id,
name = "my time-bound offline code",
starts_at = "2023-11-10T00:00:00-00:00",
ends_at = "2023-11-15T18:00:00-00:00",
# To create a daily-bound code for devices
# that support this feature, include
# max_time_rounding = "1d",
is_offline_access_code = True
)
Response:
AccessCode(
access_code_id='11111111-1111-1111-1111-777777777777',
device_id='11111111-1111-1111-1111-444444444444',
type='time_bound',
starts_at='2023-11-10T00:00:00.000Z',
ends_at='2023-11-15T18:00:00.000Z',
name='my time-bound offline code',
is_offline_access_code=True,
...
)
2. Verify Successful Time-Bound Code Registration
The lifecycle of a time-bound access code is marked by distinct phases:
Unset
: When initially created on Seam, the offline access code remains in anunset
state, indicating that it is not yet available for use on the lock due to a configured future activation time.Setting
: As the scheduledstarts_at
time approaches, Seam initiates the process of readying the code for use on the lock, transitioning thestatus
of the offline code tosetting
.Set
: Upon successful programming, the status updates toset
, signaling that the code is ready to grant the designated user the ability to unlock the door.
There are two methods to verify that an time-bound offline access code has been registered in the offline access code server that the device manufacturer maintains:
Polling: Continuously query the access code until the
status
is updated. For instructions, see Polling Method.Webhook: Wait for updates to arrive using webhook requests from the Seam API. For instructions, see Webhook Events Method.
Creating One-Time-Use Offline Access Codes
For igloohome locks and Lockly locks, you can create one-time-use offline access codes. These codes expire after a single use. To confirm whether your device supports one-time-use offline access codes and to learn any manufacturer- and device-specific restrictions, see the corresponding device guide.
To create a one-time-use offline access code, first issue a creation request. In this request, set is_offline_access_code
and is_one_time_use
to true
, and specify the desired starts_at
and ends_at
timestamps, as applicable for your device. Then, poll or use a webhook to confirm that the code was registered successfully in the offline access code server that the device manufacturer maintains.
1. Create a One-Time-Use Offline Access Code
To create a one-time-use offline access code, provide the device_id
of the lock for which you want to create the code. Set is_offline_access_code
and is_one_time_use
to true
. Specify the starts_at
ISO 8601 timestamp to define the beginning of the active time window for the offline code. If applicable for your device, specify the ends_at
ISO 8601 timestamp to define the end of the active time window for the offline code.
You can also assign an optional name
to the offline access code. For more details, see the Create Access Code endpoint.
Request:
# Get the device.
device = seam.locks.get(
device_id="11111111-1111-1111-1111-444444444444"
)
# Confirm that the device supports offline access codes.
if device.can_program_offline_access_codes:
# Create the one-time-use offline access code.
seam.access_codes.create(
device_id = device.device_id,
name = "my one-time-use offline code",
starts_at = "2023-11-12T00:00:00-00:00",
# Specify ends_at if your device supports it.
ends_at = "2023-11-14T00:00:00-00:00",
is_offline_access_code = True,
is_one_time_use = True
)
Response:
AccessCode(
access_code_id='11111111-1111-1111-1111-777777888888',
device_id='11111111-1111-1111-1111-444444444444',
type='time_bound',
starts_at='2023-11-12T00:00:00.000Z',
ends_at='2023-11-14T00:00:00.000Z',
name='my one-time-use offline code',
is_offline_access_code=True,
is_one_time_use=True,
...
)
2. Verify Successful One-Time-Use Code Registration
The lifecycle of a one-time-use access code is marked by distinct phases:
Unset
: When initially created on Seam, the offline access code remains in anunset
state, indicating that it is not yet available for use on the lock due to a configured future activation time.Setting
: As the scheduledstarts_at
time approaches, Seam initiates the process of readying the code for use on the lock, transitioning thestatus
of the offline code tosetting
.Set
: Upon successful programming, the status updates toset
, signaling that the code is ready to grant the designated user the ability to unlock the door.
There are two methods to verify that a one-time-use offline access code has been registered in the offline access code server that the device manufacturer maintains:
Polling: Continuously query the access code until the
status
is updated. For instructions, see Polling Method.Webhook: Wait for updates to arrive using webhook requests from the Seam API. For instructions, see Webhook Events Method.
Last updated
Was this helpful?