> ## Documentation Index
> Fetch the complete documentation index at: https://seam-feat-mintlify-migration-iteration.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Granting Access

> Access Grants are the default and recommended way to grant access to any physical space, across smart locks and access control systems.

Use **Access Grants** to grant a person access to a physical space. Access Grants are the default and recommended way to grant access on Seam—for any kind of space (a home, a building, a locker, a parking structure) and irrespective of the locking hardware (standalone smart locks, access control systems, and more).

With one API call, you tell Seam *who* should have access, *where*, *when*, and *how*. Seam creates the credential, attaches it to a user identity, encodes the time window, propagates it to every relevant device, and re-materializes it as devices come online, get added to spaces, or change ownership. PIN codes, mobile keys, and plastic cards—all through the same request.

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    await seam.accessGrants.create({
      user_identity: {
        full_name: 'Jane Doe',
        email_address: 'jane@example.com',
      },
      device_ids: ['6ba7b811-9dad-11d1-80b4-00c04fd430c8'],
      requested_access_methods: [{ mode: 'code' }],
      starts_at: '2025-07-13T15:00:00.000Z',
      ends_at: '2025-07-16T11:00:00.000Z',
    })
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl --include --request POST "https://connect.getseam.com/access_grants/create" \
      --header "Authorization: Bearer $SEAM_API_KEY" \
      --json @- <<EOF
    {
      "user_identity": {
        "full_name": "Jane Doe",
        "email_address": "jane@example.com"
      },
      "device_ids": ["6ba7b811-9dad-11d1-80b4-00c04fd430c8"],
      "requested_access_methods": [
        {
          "mode": "code"
        }
      ],
      "starts_at": "2025-07-13T15:00:00.000Z",
      "ends_at": "2025-07-16T11:00:00.000Z"
    }
    EOF
    ```
  </Tab>

  <Tab title="Python">
    ```python theme={null}
    seam.access_grants.create(
        user_identity={
            "full_name": "Jane Doe",
            "email_address": "jane@example.com",
        },
        device_ids=["6ba7b811-9dad-11d1-80b4-00c04fd430c8"],
        requested_access_methods=[{"mode": "code"}],
        starts_at="2025-07-13T15:00:00.000Z",
        ends_at="2025-07-16T11:00:00.000Z",
    )
    ```
  </Tab>

  <Tab title="Ruby">
    ```ruby theme={null}
    seam.access_grants.create(
      user_identity: {
        full_name: "Jane Doe",
        email_address: "jane@example.com",
      },
      device_ids: %w[6ba7b811-9dad-11d1-80b4-00c04fd430c8],
      requested_access_methods: [{ mode: "code" }],
      starts_at: "2025-07-13T15:00:00.000Z",
      ends_at: "2025-07-16T11:00:00.000Z",
    )
    ```
  </Tab>

  <Tab title="PHP">
    ```php theme={null}
    $seam->access_grants->create(
        user_identity: [
            "full_name" => "Jane Doe",
            "email_address" => "jane@example.com",
        ],
        device_ids: ["6ba7b811-9dad-11d1-80b4-00c04fd430c8"],
        requested_access_methods: [
            ["mode" => "code"],
        ],
        starts_at: "2025-07-13T15:00:00.000Z",
        ends_at: "2025-07-16T11:00:00.000Z",
    );
    ```
  </Tab>

  <Tab title="C#">
    ```csharp theme={null}
    // Coming Soon!
    ```
  </Tab>

  <Tab title="Seam CLI">
    ```bash theme={null}
    seam access-grants create --user_identity {"full_name":"Jane Doe","email_address":"jane@example.com"} --device_ids ["6ba7b811-9dad-11d1-80b4-00c04fd430c8"] --requested_access_methods [{"mode":"code"}] --starts_at "2025-07-13T15:00:00.000Z" --ends_at "2025-07-16T11:00:00.000Z"
    ```
  </Tab>
</Tabs>

Access Grants work across the entire Seam provider lineup:

* **Standalone smart locks**, such as August, Yale, Schlage, Lockly, TTLock, Tedee, and igloohome devices. Specify the locks directly with `device_ids`.
* **Access control systems (ACS)**, such as Salto KS, Salto Space, ASSA ABLOY Visionline and Vostio, dormakaba, Brivo, and Avigilon Alta. Specify entrances with `acs_entrance_ids`.
* **Mixed estates.** Combine `device_ids` and `acs_entrance_ids` in the same Access Grant, or group access points into [spaces](/api/spaces/object) and grant access to the whole group with `space_ids`.

***

## Start Simple, Then Scale Up

We recommend learning Access Grants in three steps, from the simplest setup to the most advanced:

1. **One device.** Connect a smart lock and create an Access Grant with a single `device_id` and a `code` access method. See [Creating an Access Grant Using Devices](/use-cases/granting-access/creating-an-access-grant-using-devices).
2. **Multiple devices and spaces.** Pass several `device_ids` in one call to grant access to a set of locks at once. To manage groups of access points by name—for example, everything a guest in Unit 101 needs—organize them into [spaces](/use-cases/granting-access/creating-an-access-grant-using-spaces) and grant access by `space_id`.
3. **Access control systems.** Connect an ACS, such as Salto, Visionline, or Brivo, and grant access to entrances with `acs_entrance_ids`. This path can involve additional setup, such as licenses, on-premises connections through Seam Bridge, mobile key configuration, and [reservations](/use-cases/granting-access/reservation-access-grants) for offline-override systems. See [Creating an Access Grant Using Entrances](/use-cases/granting-access/creating-an-access-grant-using-entrances).

***

## Access Grant Characteristics

An Access Grant includes the following characteristics:

<table>
  <thead>
    <tr>
      <th width="148.39999389648438">Characteristic</th>
      <th>Creation Parameter</th>
      <th>Description</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>Who</td>

      <td>
        <code>user\_identity\_id</code> or <code>user\_identity</code>
      </td>

      <td>
        The user to whom to grant access. You can either create a user identity
        separately and specify the ID to the Access Grant or create a new user
        identity as part of the Access Grant creation action.
      </td>
    </tr>

    <tr>
      <td>Where</td>

      <td>
        <code>device\_ids</code>, <code>space\_ids</code>, or{' '}
        <code>acs\_entrance\_ids</code>
      </td>

      <td>
        The access points to which to grant access. Specify one or more devices
        (such as standalone smart locks) by ID, one or more access system
        entrances by ID, or both. Alternately, you can define{' '}
        <a href="/api/spaces/object">spaces</a> that contain
        groups of related devices and entrances and then specify one or more
        spaces by ID.
      </td>
    </tr>

    <tr>
      <td>When</td>

      <td>
        <code>starts\_at</code> and <code>ends\_at</code>
      </td>

      <td>The access schedule.</td>
    </tr>

    <tr>
      <td>How</td>

      <td>
        <code>requested\_access\_methods</code> and <code>mode</code>
      </td>

      <td>
        The access methods that you want to grant for the user. In each{' '}
        <code>requested\_access\_method</code>, specify the desired{' '}
        <code>mode</code> of access, such as a PIN code, key card, or mobile key
        (with an{' '}
        <a href="/capability-guides/instant-keys/index">Instant Key</a>
        ).
      </td>
    </tr>
  </tbody>
</table>

***

## Access Grant Process

The Access Grant process consists of the following steps:

<table>
  <thead>
    <tr>
      <th width="198.800048828125">Step</th>
      <th>Description</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        <ol>
          <li>Connect your devices or access system to Seam.</li>
        </ol>
      </td>

      <td>
        To connect your devices or access system to Seam, we recommend embedding
        a{' '}

        <a href="/core-concepts/connect-webviews/index">
          Connect Webview
        </a>

        {' '}

        in your application. The Connect Webview flow guides the property
        manager through each step of the connection process.

        <br />

        For standalone smart locks, this is all the setup you need.

        <br />

        For on-premises access systems, use Seam Bridge to connect the access
        system securely to Seam. For details, see{' '}

        <a href="/low-level-apis/access-systems/connect-an-acs-to-seam/index">
          Connect an Access System to Seam
        </a>

        .
      </td>
    </tr>

    <tr>
      <td>
        <ol start="2">
          <li>(Access systems only) Set up your site.</li>
        </ol>
      </td>

      <td>
        If you are granting access to access system entrances, confirm hardware
        capabilities and make sure that you have the required licenses. For
        example, if you plan to use mobile keys or Instant Keys, your lock
        hardware must support Bluetooth Low Energy (BLE) keys. Also, to use
        mobile keys with your access system, you may need to purchase licenses
        or subscriptions to activate certain software features. These
        requirements vary by access system. For details, see{' '}

        <a href="/capability-guides/instant-keys/setting-up-your-site-for-instant-keys">
          Setting Up Your Site for Instant Keys
        </a>

        {' '}

        and the{' '}

        <a href="/device-and-system-integration-guides#access-control-systems">
          system integration guide
        </a>

        {' '}

        for your access system.
      </td>
    </tr>

    <tr>
      <td>
        <ol start="3">
          <li>
            (Optional) Set up spaces to organize access points into logical
            groups.
          </li>
        </ol>
      </td>

      <td>
        You can use spaces to create groups of devices and entrances for
        efficiency. For example, a user staying in Room 101 may need access to
        the Room 101 door, the main entrance door, and the nearest elevator. You
        could create a space that includes these access points and then use this
        space when creating an Access Grant.

        <br />

        For details, see{' '}
        <a href="/api/spaces/object">spaces</a>.
      </td>
    </tr>

    <tr>
      <td>
        <ol start="4">
          <li>Create a user identity.</li>
        </ol>
      </td>

      <td>
        User identities represent your users—the people to whom you want to
        grant access. You can create a user identity before creating an Access
        Grant, or you can create a user identity as part of creating the Access
        Grant.

        <br />

        See{' '}

        <a href="../../capability-guides/mobile-access/managing-mobile-app-user-accounts-with-user-identities#what-is-a-user-identity">
          Managing Mobile App User Accounts with User Identities
        </a>

        .
      </td>
    </tr>

    <tr>
      <td>
        <ol start="5">
          <li>Create an Access Grant.</li>
        </ol>
      </td>

      <td>
        When you create an Access Grant, you specify the user identity to whom
        you want to grant access, the access schedule, the set of devices,
        entrances, or spaces, and one or more access methods that you want to
        request.

        <br />

        See{' '}

        <a href="/use-cases/granting-access/creating-an-access-grant-using-devices">
          Creating an Access Grant Using Devices
        </a>

        ,{' '}

        <a href="/use-cases/granting-access/creating-an-access-grant-using-spaces">
          Creating an Access Grant Using Spaces
        </a>

        , and{' '}

        <a href="/use-cases/granting-access/creating-an-access-grant-using-entrances">
          Creating an Access Grant Using Entrances
        </a>

        .<br />
        You can poll for access method status changes or watch for Access Grant
        and access method lifecycle events that alert you to next steps, such as
        how and when to deliver each created access method to your user.
      </td>
    </tr>

    <tr>
      <td>
        <ol start="6">
          <li>Deliver the access method to the user.</li>
        </ol>
      </td>

      <td>
        <p>
          Once Seam alerts you that your access methods are ready, deliver them
          to your user. Delivery steps depend on the mode of access, such as PIN
          code, plastic key card, or mobile key.
        </p>

        <ul>
          <li>
            If you have created an Access Grant that includes a{' '}
            <code>code</code> access method, retrieve the access method to get
            the PIN code and share it with your user.
          </li>

          <li>
            If you have created an Access Grant that includes a{' '}
            <code>card</code> access method, you may need to encode the card
            using the Seam encoders API.
          </li>

          <li>
            If you have created an Access Grant that includes a mobile key, you
            can use the Seam mobile SDKs to develop your mobile app that
            delivers these mobile keys to your users.
          </li>

          <li>
            Each mobile key also includes an Instant Key URL. To share this
            Instant Key with your user, send it through text or email or embed
            it in your own app.
          </li>
        </ul>

        <p>
          See{' '}
          <a href="/use-cases/granting-access/delivering-access-methods">Delivering Access Methods</a>.
        </p>
      </td>
    </tr>
  </tbody>
</table>

***

## Which API Should I Use to Grant Access?

**Use Access Grants.** The lower-level APIs remain available for a small set of specific scenarios:

| Scenario                                                     | API to use                                                                          |
| ------------------------------------------------------------ | ----------------------------------------------------------------------------------- |
| Grant a person access to one or more smart locks             | Access Grants (`device_ids`)                                                        |
| Grant a person access to ACS entrances                       | Access Grants (`acs_entrance_ids`)                                                  |
| Grant a person access to a group of access points            | Access Grants + [spaces](/api/spaces/object) (`space_ids`)                          |
| Issue a mobile key or Instant Key                            | Access Grants (`mode: "mobile_key"`)                                                |
| Set a PIN with a specific custom code value on a single lock | [Access Codes API](../../low-level-apis/smart-locks/access-codes/index) (low-level) |
| Manage offline or backup PIN code pools on a single lock     | [Access Codes API](../../low-level-apis/smart-locks/access-codes/index) (low-level) |
| Directly manage ACS users, credentials, and access groups    | [ACS API](../../low-level-apis/access-systems/index) (low-level)                    |
| Lock or unlock a door remotely                               | [Smart Locks API](../../low-level-apis/smart-locks/index) (not a granting workflow) |

<Warning>
  The low-level [Access
  Codes](../../low-level-apis/smart-locks/access-codes/index) and
  [ACS](../../low-level-apis/access-systems/index) granting workflows are
  no longer recommended for granting access. For new development, use Access
  Grants—they cover the same providers through one consistent, future-proof
  interface.
</Warning>

***

## Using Reservations

Some access control systems (such as Dormakaba Ambiance, Dormakaba Community, Visionline, Salto Space, and Vostio) rely on offline override behavior for guest and resident credentials.

When issuing Access Grants for these systems, you’ll need to use reservations to ensure credentials override and join correctly.

👉 [Learn how to use reservations with Access Grants →](/use-cases/granting-access/reservation-access-grants)

***

## Get Started

To create your first Access Grant, see the [Access Grant Quick Start](/use-cases/granting-access/access-grant-quick-start). Then, learn more in the following topics:

* [Creating an Access Grant Using Devices](/use-cases/granting-access/creating-an-access-grant-using-devices)
* [Creating an Access Grant Using Spaces](/use-cases/granting-access/creating-an-access-grant-using-spaces)
* [Creating an Access Grant Using Entrances](/use-cases/granting-access/creating-an-access-grant-using-entrances)
* [Delivering Access Methods](/use-cases/granting-access/delivering-access-methods)
* [Access Grants API Reference](/api/access_grants/object)
* [Access Methods API Reference](/api/access_methods/object)
