
Access Grants are now Generally Available
Today, we're excited to announce that Seam Access Grants are now Generally Available across every provider in our stable lineup.
An Access Grant is a single API call that gives a person physical access to a set of spaces: you specify the who, where, when, and how, and Seam takes care of issuing and managing the underlying credentials. It replaces the patchwork of provider-specific access-code, mobile-key, and card-encoding APIs with one consistent interface across every lock and access system we support.
Since the public beta in December 2025, our Access Grants API has been used by over 300,000 individuals to gain access to homes and buildings. With GA, every provider in our stable lineup is now covered.

Going forward, Access Grants are the default and recommended way to provide physical access to a unit of space via the Seam API.
With one API call, you tell Seam who should have access, where, and when. Seam takes care of everything underneath: creating the credential, attaching it to a user identity, encoding the time window, propagating it to every relevant device, and re-materializing it as devices come online, get added to spaces, or change ownership. Mobile keys, PIN codes, and plastic cards. All in the same request.
What GA brings
- Every provider in our stable lineup. Consumer smart locks (Yale, August, Schlage, Lockly, TTLock, Tedee, Igloohome, and more) and enterprise access systems (Salto KS, Salto Space, ASSA ABLOY Visionline / Vostio / Vingcard, Dormakaba Oracode / Ambiance / Community, Brivo, Avigilon Alta, and more) all speak the same Access Grant interface.
- One request, multiple credentials. Issue a mobile key, a PIN, and a plastic card in the same call. Seam fans out, encodes each credential on the right hardware, and surfaces failures per device.
- Auto-healing reliability. If a grant's devices aren't reachable at the moment of issuance (a lock offline, a space without devices, an account mid-reauth), Seam now surfaces the failure and automatically retries on the next provider poll. Partial issuance returns the specific
device_idsthat didn't receive a credential, so your app can act on it instead of guessing.
Get started
- Read the Access Grants capability guide
- Try the Access Grants quick start
- Browse the Access Grants API reference
- Migrating from
/access_codes/create? Reach out to support@seam.co and we'll help you map your existing flow.
2026.05.15 Changelog
New
Customer Portal
- Responsive device details and access code edit: The Customer Portal's device-details page, access-code create/edit form, and reservation access-method cards are now mobile-friendly, with a stacked layout on narrow viewports and full controls on tablet and desktop.
Changed
Providers
- Dormakaba Oracode — auto-approve connected sites: Oracode sites that Seam can reach via the doorlist API are now automatically approved.
- August — surface unmanaged PINs: August PINs that exist on the lock but weren't loaded by Seam are now exposed as
unmanagedaccess codes, so operators can see the full PIN inventory on a lock instead of only the Seam-managed slots.
Fixed
- Duplicate-code errors propagated to the access code: Provider-side duplicate-code errors from August and Yale are now reflected on the
access_codeitself so customers can see why a code failed without digging through logs. - PIN-slots-full, command-timeout, and stuck PIN recovery: Seam now handles August's "PIN slots full" path and no longer marks PIN operations stuck when the operation reference is null.
- Codes on the provider but not on the device reconciled: Codes that exist on the August account but aren't present on the device are now reconciled rather than silently lingering, and partner-managed codes can be deleted via non-
/pinsendpoints.
- In-place access code updates: The Schlage sync path now uses native PUT to update codes on the device instead of delete-and-recreate, so PINs no longer briefly disappear during routine sync drift.
- Correct code mapping during sync: Fixed a class of cases where the wrong code mapping was selected during Schlage access code sync (tier priority and 1:1 exclusion).
- DST-safe timestamps: Schlage
GETtimestamps now reparse against IANA timezones, so codes spanning daylight-saving boundaries are no longer misread. - Command errors classified as
known_device_error: Schlage command errors now surface asknown_device_errorinstead of generic provider failures, so apps can branch on the right category. - Cleaner orphan handling: Schlage
access_codeorphans are now prevented and cleaned up rather than persisted.
ASSA ABLOY Visionline
- Proactive session refresh: Visionline encode sessions now refresh proactively, with a reactive fallback, eliminating most "session expired" failures during card encoding.
- Auto-join for sibling cards: When the same access grant issues multiple Visionline credentials, sibling encodes now use
auto_joinso the second card shares the assignment instead of failing. - Early check-in applied in place: Early check-in time updates are now applied to the existing reservation in place instead of generating a new one.
- Adopt orphan keyboardPwd entries: TTLock entries written without a name (often the result of a fail-but-create) are now adopted at pull time, so customers don't end up with orphan codes on the lock.
- Faster sync, fewer API calls: Brivo sync now caches identity reads and pulls, reducing per-cycle Brivo API calls and improving sync latency for large workspaces.