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

# Convert an Unmanaged Access Code

> Converts an [unmanaged access code](/low-level-apis/smart-locks/access-codes/migrating-existing-access-codes) to an [access code managed through Seam](/low-level-apis/smart-locks/access-codes).

An unmanaged access code has a limited set of operations that you can perform on it. Once you convert an unmanaged access code to a managed access code, the full set of access code operations and lifecycle events becomes available for it.

Note that not all device providers support converting an unmanaged access code to a managed access code.



## OpenAPI

````yaml /openapi.json patch /access_codes/unmanaged/convert_to_managed
openapi: 3.0.0
info:
  description: >-
    Programmable API to control locks, thermostats, noise sensors, cameras,
    access control systems, and other IoT devices.


    Prefer the official Seam SDKs over hand-written HTTP calls: they handle

    authentication, request serialization, pagination, and error handling for

    you. The official SDKs are listed in this document under

    `info.x-seam-sdks`.


    If you call the HTTP API directly, your query parameters must be

    serialized compatibly with the Seam API. There is no universal convention

    for serializing arrays, booleans, or nested objects in a query string, so

    use @seamapi/url-search-params-serializer, the language specific serializer
    module provided by each Seam SDK, or follow its specification:

    https://github.com/seamapi/url-search-params-serializer
  title: Seam Connect
  version: 1.0.0
  x-seam-query-serializer:
    description: >-
      Reference implementation and specification for query parameter
      serialization compatible with the Seam API.
    url: https://github.com/seamapi/url-search-params-serializer
  x-seam-sdks:
    - language: javascript
      url: https://github.com/seamapi/javascript
    - language: python
      url: https://github.com/seamapi/python
    - language: ruby
      url: https://github.com/seamapi/ruby
    - language: php
      url: https://github.com/seamapi/php
    - language: csharp
      url: https://github.com/seamapi/csharp
servers:
  - url: https://connect.getseam.com
security: []
tags:
  - description: access_codes
    name: /access_codes
  - description: acs
    name: /acs
  - description: action_attempts
    name: /action_attempts
  - description: client_sessions
    name: /client_sessions
  - description: connected_accounts
    name: /connected_accounts
  - description: connect_webviews
    name: /connect_webviews
  - description: devices
    name: /devices
  - description: events
    name: /events
  - description: health
    name: /health
  - description: locks
    name: /locks
  - description: networks
    name: /networks
  - description: noise_sensors
    name: /noise_sensors
  - description: phones
    name: /phones
  - description: thermostats
    name: /thermostats
  - description: user_identities
    name: /user_identities
  - description: webhooks
    name: /webhooks
  - description: workspaces
    name: /workspaces
paths:
  /access_codes/unmanaged/convert_to_managed:
    patch:
      tags:
        - /access_codes
      summary: Convert an Unmanaged Access Code
      description: >-
        Converts an [unmanaged access
        code](/low-level-apis/smart-locks/access-codes/migrating-existing-access-codes)
        to an [access code managed through
        Seam](/low-level-apis/smart-locks/access-codes).


        An unmanaged access code has a limited set of operations that you can
        perform on it. Once you convert an unmanaged access code to a managed
        access code, the full set of access code operations and lifecycle events
        becomes available for it.


        Note that not all device providers support converting an unmanaged
        access code to a managed access code.
      operationId: accessCodesUnmanagedConvertToManagedPatch
      requestBody:
        content:
          application/json:
            schema:
              properties:
                access_code_id:
                  description: >-
                    ID of the unmanaged access code that you want to convert to
                    a managed access code.
                  format: uuid
                  type: string
                allow_external_modification:
                  description: >-
                    Indicates whether [external
                    modification](/low-level-apis/smart-locks/access-codes#external-modification)
                    of the access code is allowed.
                  type: boolean
                force:
                  description: >-
                    Indicates whether to force the access code conversion. To
                    switch management of an access code from one Seam workspace
                    to another, set `force` to `true`.
                  type: boolean
                is_external_modification_allowed:
                  description: >-
                    Indicates whether [external
                    modification](/low-level-apis/smart-locks/access-codes#external-modification)
                    of the access code is allowed.
                  type: boolean
              required:
                - access_code_id
              type: object
      responses:
        '200':
          content:
            application/json:
              schema:
                properties: {}
                type: object
          description: OK
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
      security:
        - client_session: []
        - client_session_with_customer: []
        - pat_with_workspace: []
        - console_session_with_workspace: []
        - api_key: []
      x-codeSamples:
        - lang: javascript
          label: Seam SDK
          source: |-
            await seam.accessCodes.unmanaged.convertToManaged({
              access_code_id: "9ef2af02-e335-4b49-bd51-00e851a83ef6",
              is_external_modification_allowed: true,
              force: true,
            });

            /*
            // void
            */
        - lang: bash
          label: cURL
          source: >-
            curl --include --request POST
            "https://connect.getseam.com/access_codes/unmanaged/convert_to_managed"
            \
              --header "Authorization: Bearer $SEAM_API_KEY" \
              --json @- <<EOF
            {
              "access_code_id": "9ef2af02-e335-4b49-bd51-00e851a83ef6",
              "is_external_modification_allowed": true,
              "force": true
            }

            EOF


            # Response:

            # {}
        - lang: python
          label: Seam SDK
          source: |-
            seam.access_codes.unmanaged.convert_to_managed(
                access_code_id="9ef2af02-e335-4b49-bd51-00e851a83ef6",
                is_external_modification_allowed=true,
                force=true,
            )

            # None
        - lang: ruby
          label: Seam SDK
          source: |-
            seam.access_codes.unmanaged.convert_to_managed(
              access_code_id: "9ef2af02-e335-4b49-bd51-00e851a83ef6",
              is_external_modification_allowed: true,
              force: true,
            )

            # => nil
        - lang: php
          label: Seam SDK
          source: |-
            $seam->access_codes->unmanaged->convert_to_managed(
                access_code_id: "9ef2af02-e335-4b49-bd51-00e851a83ef6",
                is_external_modification_allowed: true,
                force: true,
            );
        - lang: bash
          label: Seam CLI
          source: >-
            seam access-codes unmanaged convert-to-managed --access_code_id
            "9ef2af02-e335-4b49-bd51-00e851a83ef6"
            --is_external_modification_allowed true --force true


            # {}
components:
  securitySchemes:
    client_session:
      bearerFormat: Client Session Token
      scheme: bearer
      type: http
    client_session_with_customer:
      bearerFormat: Customer Client Session Token
      scheme: bearer
      type: http
    pat_with_workspace:
      bearerFormat: API Token
      scheme: bearer
      type: http
    console_session_with_workspace:
      bearerFormat: Console Session Token
      scheme: bearer
      type: http
    api_key:
      bearerFormat: API Key
      scheme: bearer
      type: http

````