Release Notes

Welcome to the Schlage Home - API developer portal. Here we will provide updates for new features released to the Schlage Home API.


    March 25th, 2025
    Schlage Home API: New Accessor Types Added
    • In order to provide better visibility of events on devices, we are introducing new accessor types. Webhook schema is now updated. Please review the updated list of Accessor Types and their meaings (includes existing types as well):

                        VirtualKey: The lock was locked or unlocked with a virtual key. 
                        1TouchLocking: The lock was locked by the exterior panel button.
                        AccessCode: The lock was locked or unlocked with an access code.
                        AutoRelock: The lock automatically locked by the AutoRelock function configured in the device settings
                        Thumbturn: The lock was locked or unlocked manually. 
                        UnlockButton: The lock was unlocked by button. 
                        LockButton: The lock was locked by button. 
                        ScheduledLock: The lock was locked on a schedule. 
                        AppleHome: The lock was locked or unlocked with Apple Home.
                        AppleHomeNFC: The lock was locked or unlocked with Apple Home NFC. 
                        AccessTypeUnavailable: You may receive webhook events for a changed lock state that do not contain information about the accessor. If a lock is unable to communicate, when it comes back online it will report its current lock state. Any reported delta may be due to multiple accesses or accesses occurring in the past, so there is not a correct physical access event to associate with this webhook. We do not include historical data in our webhooks as they're designed to provide real-time updates. Please check the device history endpoint for if you need information on historical accesses.
                  
    March 21st, 2025
    Schlage Home API: Webhook Update
    • We have added User-Agent headers to our webhooks.
    March 6th, 2025
    Schlage Home API: Bugfix
    • We have implemented a bug fix to improve the stability and reliability of our API processing. This update addresses an issue that was affecting a specific scenario in API request handling for the Commands endpoint.
    Schlage Home API: Updated Error Messages
    • We have made improvements to our API error messages to enhance clarity and reduce confusion for our integration partners. These changes are designed to provide more specific information about issues that may arise during API interactions, enabling quicker troubleshooting and resolution. Below is an example:

                    {
                      "errorCode": 2
                      "Description": "Access code ID not found on device."
                  }
                
    Schlage Home API: Added WiFi Signal Strength to GET Device endpoint
    • The GET Device and GET Device List endpoints now display the wifiRssi field. Schlage Home API documentation now updated (must be logged in to view).

                  {
                    "role": "string",
                    "id": "string",
                    "name": "string",
                    "type": "string",
                    "lockState": "Unlocked",
                    "batteryState": "Unknown",
                    "modelName": "string",
                    "serialNumber": "string",
                    "percentageBatteryLevel": 0,
                    "connected": true,
                    "lastConnectedToCloud": "string",
                    "lastUpdated": "string",
                    "created": "string",
                    "timezoneOffset": "string",
                    "firmwareVersion": "string",
                    "wifiRssi": 0,
                    "features": {
                        "vlac": true,
                        "activityAlarm": true
                    }
                }
              

    January 13th, 2025
    Schlage Home API: Webhook Schema Fix
    • Previously, the "connected" field for "DeviceConnectivityStateChanged" was type boolean. It's now updated to type string; values are "true" or "false". Schlage Home API documentation now updated (must be logged in to view).

              { ...
                "deviceConnectivityStateChanged": {
                "type": "object",
                "properties": {
                  "trigger": {
                    "const": "DeviceConnectivityStateChanged"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "connected": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "connected"
                    ]
                  }
                },
              }
            }
          

    November 25th, 2024
    Schlage Home API Feature: Added error messages to GET Command responses
    • For improved visibility, GET Command responses will now display error messages if a command has failed. GET Device Command now updated (must be logged in to view). Please also review the following error message list.

              {
                "commandId": "string",
                "deviceId": "string",
                "state": "string",
                "name": "string",
                "data": {
                    "lockState": "Unknown",
                    "error": {
                        "statusCode": 0,
                        "errorCode": 0,
                        "errorMessage": "string"
                    }
                }
            }
          

              {
                0: "Operation completed successfully",
                1: "General failure during the operation",
                2: "Access code already exists",
                3: "PIN code is out of the acceptable range",
                4: "An access code with this name already exists",
                5: "Failed to add the access code to the device",
                6: "Failed to delete the access code from the device",
                7: "Network error occurred while updating storage",
                8: "No response received while updating storage",
                9: "Update storage operation was denied",
                10: "Network error occurred while deleting storage",
                11: "No response received while deleting storage",
                12: "Delete storage operation was denied",
                13: "Lost connection while waiting for a response",
                14: "JSON assembler error occurred",
                15: "JSON parser error occurred",
                16: "Access code ID not provided",
                17: "PIN not provided",
                18: "Access code name not provided",
                19: "Schedule not provided",
                20: "Parameters provided are not valid",
                21: "User-disabled status not provided",
                22: "Activation seconds not provided",
                23: "Expiration seconds not provided",
                24: "Parameters provided are not valid",
                25: "Command type is not valid",
                26: "User not found in the device",
                27: "Duplicate access code ID found in the device",
                28: "Access code name is too long",
                29: "Access code length not provided",
                30: "Access code length is out of range",
                31: "Access code ID is not valid",
                32: "Bolt is jammed",
                33: "Schedule Locking error",
                34: "Schedule parameters are not valid",
                35: "Maximum schedule is not valid",
                36: "Cannot process multiple device commands simultaneously",
                37: "A subset of the access code is already in use",
                38: "A superset of the access code is already in use"
              }
          

    November 13th, 2024
    Schlage Home API Feature: Added "timezone offset" to GET History requests
    • GET History requests can now optionally provide timezone offsets in the response. New parameters have been added to toggle this - GET Device History now updated (must be logged in to view).

              {
                GET https://api.allegion.com/schlage-home/devices/{deviceId}/history?limit=int&deviceLocalTime=boolean
              }
          

              {
                {
                    "id": "string",
                    "timestamp": "2024-11-13T13:35:19.001-06:00",
                    "eventCode": "AccessCodeUserAdded",
                    "accessor": {
                        "id": "string",
                        "friendlyName": "string",
                        "accessType": "string"
                    }
                }
              }
          

    November 8th, 2024
    Schlage Home API Feature: Added "lockState" to DeviceUpdate events
    • DeviceUpdate events for locking or unlocking doors now includes a "lockState" field. This will display "Locked" or "Unlocked". Event Schema is updated.

              {
                {
                  "method": "POST",
                  "body": {
                    "eventId": "string",
                    "trigger": "DeviceLockStateChanged",
                    "deviceId": "string",
                    "time": "timestamp",
                    "eventType": "DeviceUpdate",
                    "data": {
                      "lockState": "Locked",
                      "accessor": {
                        "id": "string",
                        "friendlyName": "string",
                        "accessType": "AccessCode"
                      }
                    },
                    "version": "2.0"
                  }
                }
              }
          

    October 23rd, 2024
    Schlage Home API Feature: Updated format for Access Code Event webhooks
    • Access Code Event webhooks will display more information. Please sign into the Developer portal and review the updated GET Access Code API details.

              {
               {
                   "accessCodeId": "string",
                   "name": "string",
                   "code": "string",
                   "accessCodeLength": 0,
                   "readOnly": true,
                   "scheduleType": "Always",
                   "scheduleDetails": {
                       "startDateTime": "string",
                       "endDateTime": "string",
                       "schedules": [{
                           "startTime": "string",
                           "endTime": "string",
                           "activeWeekDays": ["Saturday"]
                       }]
                   }
               }
              }
          

    September 4th, 2024
    Schlage Home API Feature: "Version" field added to webhooks
    • All events will now display a new "version" field to indicate which Schlage Home version the webhook comes from. Please review the updated Schlage API documentation for more details.

              {
              "method": "POST",
                "body": {
                  "eventId": "string",
                  "trigger": "string",
                  "deviceId": "string",
                  "time": "timestamp",
                  "eventType": "string",
                  "data": {
                    "lockState": "string",
                    "accessor": {
                      "id": null,
                      "accessType": "string"
                    }
                  },
                  "version": "1.0/2.0"
                }
              }
          

    August 15th, 2024
    Schlage Home API v2 Feature: Added more details to GET Command endpoint
    • Added more details on the GET Command endpoint including: AccessCodeId and friendlyName, Lock state (for Lock and Unlock commands), Error with statusCode, errorCode and message (if exists). For reference:

              {
                {
                  "commandId": "string",
                  "deviceId": "string",
                  "state": "Successful/Pending/Failed",
                  "name": "AddAccessCode/UpdateAccessCode",
                  "data": {
                      "accessCodeId": null (if failed) OR "string",
                      "friendlyName": "string",
                      "error": null (if successful) OR {
                        "statusCode": integer,
                        "errorCode": integer,
                        "errorMessage": "string"
                      }
                  }
              }
            }
          

          {
            {
              "commandId": "string",
              "deviceId": "string",
              "state": "Successful/Pending/Failed",
              "name": "DeleteAccessCode",
              "data": {
                  "accessCodeId": null (if successful or Pending) OR "string",
                  "friendlyName": null (if successful or Pending) OR "string",
                  "error": null (if successful or Pending) OR {
                    "statusCode": integer,
                    "errorCode": integer,
                    "errorMessage": "string"
                  }
              }
            }
          }
        

      {
        {
          "commandId": "string",
          "deviceId": "string",
          "state": "Successful/Pending/Failed",
          "name": "DeleteAllAccessCodes",
          "data": {
              "deviceId": "string",
              "error": null (if successful or Pending) OR {
                "statusCode": integer,
                "errorCode": integer,
                "errorMessage": "string"
              }
          }
        }
      }  
        

            {
              {
                "commandId": "string",
                "deviceId": "string",
                "state": "Successful/Pending/Failed",
                "name": "ChangeLockState",
                "data": {
                    "lockState": "Locked/Unlocked/Unknown",
                    "error": null (if Successful or Pending) OR {
                            "statusCode": "integer", 
                            "errorCode": "integer",
                            "errorMesage": "string"
                          }
                }
            }
          }
        
    Schlage Home API v2 Feature: User's access role added to Get Device List webhook
    • When a user calls the GET Device List endpoint, they can now see which role they have for a device. See more in the API documentation.

                [{
                  "role": "string",
                  "id": "string",
                  "name": "string",
                  "type": "string",
                  "lockState": 0,
                  "batteryState": 0,
                  "modelName": "string",
                  "serialNumber": "string",
                  "percentageBatteryLevel": 0,
                  "connected": true,
                  "lastConnectedToCloud": "string",
                  "lastUpdated": "string",
                  "created": "string",
                  "timezoneOffset": "string",
                  "firmwareVersion": "string",
                  "features": {
                      "vlac": true,
                      "activityAlarm": true
                  }
              }]
            

    July 23rd, 2024
    Schlage Home API v2 Feature: "friendlyName" of accessor added to Webhooks
    • When a user locks or unlocks their device, they can now see the accessor's friendly name in the webhooks for better readability. For reference:

              {
                {
                  "method": "POST",
                  "body": {
                    "eventId": "string",
                    "trigger": "DeviceLockStateChanged",
                    "deviceId": "string",
                    "time": "string",
                    "eventType": "DeviceUpdate",
                    "data": {
                      "lockState": "Locked",
                      "accessor": {
                        "id": "string",
                        "friendlyName": "testName",
                        "accessType": "VirtualKey"
                      }
                    }
                  }
              }
            }
          

    May 8th, 2024
    Schlage Home API v2 Event Schema Update: Lock/unlock accessor
    • When a user subscribes to the event notifications, they can now see which accessor has locked or unlocked the device. These accessors include: "AccessCode", "VirtualKey", "AutoRelock", "Thumbturn", and "1TouchLocking". For more information, check out the Schlage Home API v2 Event Schema

    April 29th, 2024
    Schlage Home API v2 Feature: Webhook Signatures
    • Using RSA keypairs, integration partners can now verify the authenticity of requests. For more information, check out the repo
    April 11th, 2024
    Bugfix: Access Code Deletion Sync
    • When access codes would get out of sync, users would not be able to delete access code either from the device or cloud. By using the Access Code ID, you can now successfully Delete access codes no longer being used. For reference - Schlage Home - API

    March 1st, 2024
    New Webhook Notification for when users unlink via "Sign Out Everywhere
    • For improved visibility, integrations will be able to receive a webhook notification whenever their users toggle the "Sign Out Everywhere" option within their Reset password screen.

    Jan 31st, 2024
    ASCII Character Support and 24 character limit extension for Access Code Names
    • Access Codes originally had a limit of 12 characters, you can now add up to 24 ASCII characters as listed in this ASCII table.
    Jan 29th, 2024
    Exposing Timezone Offsets in the Access Code webhooks
    • The AccessCodeManagement webhook now exposes the timezone offset field. For reference:

                {
                  "id": "string",
                  "subject": "string",
                  "data": {
                    "identifier": null,
                    "deviceId": "string",
                    "deviceName": "string",
                    "clientName": null,
                    "eventTypeId": 0,
                    "eventType": "AccessCodeCreate",
                    "accessCode": {
                      "id": "string",
                      "name": "string",
                      "accessCode": "integer",
                      "scheduleType": "Always",
                      "activeSchedules": []
                    },
                    "timezoneOffset": "-06:00",
                    "time": "20240212T20:00"
                  },
                  "eventType": "AccessCodeManagement",
                  "dataVersion": "1.0",
                  "metadataVersion": "1",
                  "eventTime": "string",
                  "topic": "string"
                }