Before You Begin
- A Seam workspace with at least one connected device or access system. You can use a sandbox workspace with test devices.
- An API key.
- The Seam SDK installed in your language of choice (see Quick Start).
Step 1: Create the Access Grant
Call/access_grants/create with four things:
- Who — a
user_identity_idfor an existing user, or passuser_identityto create one inline - Where — the resources to grant access to
- When — the access schedule (
starts_atandends_at) - How — the access method modes to issue (e.g.,
code,mobile_key,card,cloud_key)
Choosing Resources
You specify where to grant access using one or more of these parameters:| Parameter | Best for | Description |
|---|---|---|
device_ids | Standalone smart locks | Pass IDs of individual devices like August, Yale, or Schlage locks connected through a Connect Webview. |
space_ids | Grouped access points | Grant access to all entrances and devices in one or more spaces. Useful when a guest needs access to a room door, lobby, and elevator in one call. |
acs_entrance_ids | Access control system entrances | Pass IDs of individual ACS entrances for fine-grained control. |
device_ids) plus a set of ACS entrances (acs_entrance_ids).
If you’re using Dormakaba Ambiance, Dormakaba Community, Visionline, Salto Space, or Vostio, you’ll also need to pass a
reservation_key to coordinate credential override sequencing. See Reservation Access Grants.If you create multiple Access Grants for the same
user_identity_id, Seam tries to reuse the same access methods across grants — for example, assigning the same PIN code so the user doesn’t have to learn a new one for each reservation.Example
The example below creates an Access Grant for a single smart lock with a PIN code. To grant access to multiple doors at once, passspace_ids instead of device_ids. To target specific ACS entrances, use acs_entrance_ids. You can also request multiple modes in one call — for example, [{"mode": "code"}, {"mode": "mobile_key"}].
When you request
mobile_key, Seam also generates an instant_key_url on the Access Grant — a shareable link that gives your user mobile access without downloading an app. See Using Instant Keys.Step 2: Deliver the Access Methods
After creating the grant, list the access methods to see what was created and check their issuance status.is_issued flag. Once it’s true, the credential is active and ready to deliver. How you deliver depends on the mode:
| Mode | What to do | Guide |
|---|---|---|
code | Read the code property and share the PIN with your user. | Using PIN Codes |
mobile_key | Initialize the Seam mobile SDK with the client_session_token, or send the instant_key_url. | Using Mobile Keys / Instant Keys |
card | Encode a fresh card or assign an existing card. is_issued becomes true after encoding or assignment. | Using Key Cards |
cloud_key | Call access_methods.unlock_door from your web app to unlock on behalf of the user. | Using Cloud Keys |
In a sandbox workspace, automatically-issued access methods are ready almost instantly. On real devices, issuance can take a few moments.
Tracking Issuance with Events
Instead of pollingis_issued, you can listen for webhook events:
| Event | Meaning |
|---|---|
access_method.issued | The access method is ready to deliver. |
access_method.card_encoding_required | A card needs to be encoded before it can be delivered. |
access_method.card_assignment_required | A card needs to be assigned to a physical card before it can be issued. |

