> ## Documentation Index
> Fetch the complete documentation index at: https://docs.seam.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Unmanaged Access Codes

> Learn how the unmanaged_access_code object represents an existing smart lock PIN code that Seam tracks but does not manage until you convert it.

## The unmanaged\_access\_code Object

Represents an [unmanaged smart lock access code](https://docs.seam.co/low-level-apis/smart-locks/access-codes/migrating-existing-access-codes).

An access code is a code used for a keypad or pinpad device. Unlike physical keys, which can easily be lost or duplicated, PIN codes can be customized, tracked, and altered on the fly.

When you create an access code on a device in Seam, it is created as a managed access code. Access codes that exist on a device that were not created through Seam are considered unmanaged codes. We strictly limit the operations that can be performed on unmanaged codes.

Prior to using Seam to manage your devices, you may have used another lock management system to manage the access codes on your devices. Where possible, we help you keep any existing access codes on devices and transition those codes to ones managed by your Seam workspace.

Not all providers support unmanaged access codes. The following providers do not support unmanaged access codes:

* [Kwikset](https://docs.seam.co/device-and-system-integration-guides/kwikset-locks)

<ResponseExample>
  ```json Unmanaged Access Code theme={null}
  {
    "access_code_id": "88fa1812-bef8-4108-9fb4-4855376c3edf",
    "code": "1234",
    "created_at": "2025-06-16T16:54:17.946283Z",
    "device_id": "b3439f17-7273-46f3-9e20-9a283d9cb5b4",
    "ends_at": "2025-06-23T16:54:17.946261Z",
    "errors": [],
    "is_managed": false,
    "name": "My Unmanaged Access Code",
    "starts_at": "2025-06-21T16:54:17.946261Z",
    "status": "set",
    "type": "time_bound",
    "warnings": [],
    "workspace_id": "750fc0bc-4450-4356-8d9f-18c6a3a6b2c7"
  }
  ```
</ResponseExample>

***

## Properties

<ResponseField name="access_code_id" type="String (UUID)">
  Unique identifier for the access code.
</ResponseField>

<ResponseField name="cannot_be_managed" type="Boolean">
  Indicates that Seam cannot convert this unmanaged access code to a managed access code. Some providers do not support management of unmanaged access codes through API integrations.
</ResponseField>

<ResponseField name="cannot_delete_unmanaged_access_code" type="Boolean">
  Indicates that Seam cannot delete this unmanaged access code through the provider. If this access code needs to be deleted, it will only be possible from the manufacturer app.
</ResponseField>

<ResponseField name="code" type="String">
  Code used for access. Typically, a numeric or alphanumeric string.
</ResponseField>

<ResponseField name="created_at" type="String (ISO 8601)">
  Date and time at which the access code was created.
</ResponseField>

<ResponseField name="device_id" type="String (UUID)">
  Unique identifier for the device associated with the access code.
</ResponseField>

<ResponseField name="dormakaba_oracode_metadata" type="Object">
  Metadata for a dormakaba Oracode unmanaged access code. Only present for unmanaged access codes from dormakaba Oracode devices.

  <Expandable title="properties">
    <ResponseField name="is_cancellable" type="Boolean">
      Indicates whether the stay can be cancelled via the Dormakaba Oracode API.
    </ResponseField>

    <ResponseField name="is_early_checkin_able" type="Boolean">
      Indicates whether early check-in is available for this stay.
    </ResponseField>

    <ResponseField name="is_extendable" type="Boolean">
      Indicates whether the stay can be extended via the Dormakaba Oracode API.
    </ResponseField>

    <ResponseField name="is_overridable" type="Boolean">
      Indicates whether the access code can be overridden. When false, the maximum number of overrides has been reached.
    </ResponseField>

    <ResponseField name="site_name" type="String">
      Dormakaba Oracode site name associated with this access code.
    </ResponseField>

    <ResponseField name="stay_id" type="number">
      Dormakaba Oracode stay ID associated with this access code.
    </ResponseField>

    <ResponseField name="user_level_id" type="String">
      Dormakaba Oracode user level ID associated with this access code.
    </ResponseField>

    <ResponseField name="user_level_name" type="String">
      Dormakaba Oracode user level name associated with this access code.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="ends_at" type="String (ISO 8601)">
  Date and time after which the time-bound access code becomes inactive.
</ResponseField>

<ResponseField name="errors" type="Array">
  Errors associated with the [access code](https://docs.seam.co/low-level-apis/smart-locks/access-codes).
</ResponseField>

<ResponseField name="is_managed" type="Boolean">
  Indicates that Seam does not manage the access code.
</ResponseField>

<ResponseField name="name" type="String">
  Name of the access code. Enables administrators and users to identify the access code easily, especially when there are numerous access codes. Note that the name provided on Seam is used to identify the code on Seam and is not necessarily the name that will appear in the lock provider's app or on the device. This is because lock providers may have constraints on names, such as length, uniqueness, or characters that can be used. In addition, some lock providers may break down names into components such as `first_name` and `last_name`. To provide a consistent experience, Seam identifies the code on Seam by its name but may modify the name that appears on the lock provider's app or on the device. For example, Seam may add additional characters or truncate the name to meet provider constraints. To help your users identify codes set by Seam, Seam provides the name exactly as it appears on the lock provider's app or on the device as a separate property called `appearance`. This is an object with a `name` property and, optionally, `first_name` and `last_name` properties (for providers that break down a name into components).
</ResponseField>

<ResponseField name="starts_at" type="String (ISO 8601)">
  Date and time at which the time-bound access code becomes active.
</ResponseField>

<ResponseField name="status" type="Enum (String)">
  Current status of the access code within the operational lifecycle. `set` indicates that the code is active and operational. `unset` indicates that the code exists on the provider but is not usable on the device.
</ResponseField>

<ResponseField name="type" type="Enum (String)">
  Type of the access code. `ongoing` access codes are active continuously until deactivated manually. `time_bound` access codes have a specific duration.
</ResponseField>

<ResponseField name="warnings" type="Array">
  Warnings associated with the [access code](https://docs.seam.co/low-level-apis/smart-locks/access-codes).
</ResponseField>

<ResponseField name="workspace_id" type="String (UUID)">
  Unique identifier for the Seam workspace associated with the access code.
</ResponseField>
