Skip to main content
Mobile keys let your users unlock doors by tapping a button in your mobile app. When you request a mobile_key access method in an Access Grant, Seam issues a mobile credential that you deliver through your own app using the Seam mobile SDKs. Each mobile key also includes an Instant Key URL for immediate access without an app download. Mobile keys work with:
  • Access control systems — Salto KS, Salto Space, ASSA ABLOY Visionline and Vostio, dormakaba, Brivo, and other ACS platforms that support BLE-based mobile credentials. Specify entrances with acs_entrance_ids or use space_ids.

Before You Begin

To use mobile keys, you need:
  • A Seam API key
  • A connected ACS with BLE-capable lock hardware
  • Mobile key licenses or subscriptions activated for your ACS (requirements vary by system — see your system integration guide)
  • A user identity representing the person who will receive the mobile key
  • An entrance that supports mobile keys (can_unlock_with_mobile_key is true)
If you plan to build a mobile app that delivers mobile keys, see Mobile Access for the complete SDK integration guide. If you just want to share a link for instant access, see Using Instant Keys instead.

Step 1: Verify Entrance Support

List the entrances for your ACS and confirm that can_unlock_with_mobile_key is true.
const entrances = await seam.acs.entrances.list({
  acs_system_id: 'c359cba2-8ef2-47fc-bee0-1c7c2a886339',
})

const mobileKeyEntrances = entrances.filter(
  (e) => e.can_unlock_with_mobile_key
)

Step 2: Create an Access Grant with a Mobile Key

Create an Access Grant specifying mobile_key as the requested access method mode.
const accessGrant = await seam.accessGrants.create({
  user_identity_id: '22222222-2222-2222-2222-222222222222',
  acs_entrance_ids: ['f74e4879-5991-4e2f-a368-888983dcfbfc'],
  requested_access_methods: [
    { mode: 'mobile_key' }
  ],
  starts_at: '2025-07-13T15:00:00.000Z',
  ends_at: '2025-07-16T11:00:00.000Z',
})

Step 3: Deliver the Mobile Key

Once the access method is issued, list the access methods for the Access Grant to get the client_session_id. Use this value to initialize the Seam mobile SDK on your user’s device so they can unlock doors from your app.
const accessMethods = await seam.accessMethods.list({
  access_grant_id: accessGrant.access_grant_id,
})

const mobileKey = accessMethods[0]
console.log(mobileKey.client_session_id)
console.log(mobileKey.instant_key_url)
Output:
{
  "access_method_id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
  "display_name": "Mobile Key",
  "mode": "mobile_key",
  "is_issued": true,
  "issued_at": "2025-06-16T16:55:03.924353Z",
  "client_session_id": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
  "instant_key_url": "https://ik.seam.co/ABCXYZ",
  ...
}
Use the client_session_id to look up the client session token, then pass it to the Seam mobile SDK to initialize your user’s mobile app. For the complete mobile SDK integration guide, see Mobile Access.
Every mobile key also includes an instant_key_url. You can share this URL with your user as an alternative or backup access method — no app download required. See Using Instant Keys.

Step 4: See Which Doors the Mobile Key Covers

An access method can cover multiple doors — for example, if the Access Grant includes several entrances or spaces. To see which doors a mobile key unlocks, call /access_methods/get_related.
const related = await seam.accessMethods.getRelated({
  access_method_ids: [accessMethod.access_method_id],
})

console.log(related.acs_entrances) // ACS entrances this mobile key unlocks

Next Steps