Skip to main content
Use Seam to connect a supported Yale lock, lock or unlock it remotely, and issue scheduled guest access. This guide uses the Yale Home or Yale Access connection and a keypad lock that supports online access codes.

Check the connection path

Confirm the lock works in its manufacturer app and has the connection hardware its model requires. A Yale brand name alone does not establish which functions a device supports. Check the returned capability flags before using an operation. Create a Seam account and get an API key. Use a sandbox workspace for virtual devices, or a production workspace for real locks. Keep the API key on your server.

1. Install the SDK

The server-side examples use Node.js 24 and JavaScript. For other languages, see the API and SDK reference.

2. Connect the Yale account

Create a Connect Webview and send its URL to the person who owns the Yale account. Use the yale provider key for this connection path.
JavaScript
For the Yale sandbox account, use jane@example.com, password 1234, and verification code 123456. These credentials are only for virtual devices. After the user finishes, retrieve the Connect Webview and list devices for that specific account:
JavaScript
Choose the intended door’s device_id. Do not automatically grant access to the first device returned from a customer’s account.

3. Grant scheduled guest access

Use Access Grants for a guest’s access lifecycle. The example below creates one code method for a keypad lock. Other credential types depend on the device and integration. Set YALE_DEVICE_ID to the chosen virtual lock, then run this example on your server. It starts five minutes from now, uses whole-minute boundaries, and ends one hour later. For a real booking, convert the property’s local check-in and checkout times to ISO timestamps with an explicit UTC offset.
JavaScript
Persist the returned grant and user identity IDs with your booking. Reuse them for changes; do not create another guest or grant every time your booking system retries a notification.

Check issuance before sharing the code

A successful create request is not confirmation that the lock has received its code. Read the related access methods, or subscribe to access method events.
JavaScript
If ready is false, retain a pending state and check the grant and method errors. Retry status checks with a bounded timeout or process the subsequent webhook. Share the method’s code through your guest delivery flow only after issuance is confirmed. Do not log guest codes in production.

Change or cancel the booking

Update the existing grant when checkout changes. Read it back and track the access method’s pending changes before reporting completion.
JavaScript
Deletion starts the removal workflow. Track access method deletion and errors before treating physical access as revoked. An offline lock may need to reconnect. A sandbox exercises the API lifecycle; it cannot prove that a real door has accepted or removed a code. If you created a guest solely for this test, also delete that user identity after its access has been removed. Keep identities that other bookings still use.

Remote lock and unlock

For a direct remote command, check can_remotely_lock or can_remotely_unlock, then use Lock Door or Unlock Door. These commands return an action attempt. They do not grant a guest ongoing access.

Troubleshooting

See the Yale error reference for provider-specific checks. For an application that pushes reservation data and lets Seam manage automations, continue with Reservation Automations.