Troubleshooting: Dormakaba Oracode Access Code Issues

Last updated: December 11, 2025

If you're having trouble creating or managing access codes for Dormakaba Oracode locks, this guide covers the most common issues and how to resolve them.


Error: "Invalid Time Range"

Error code: dormakaba_oracode_invalid_time_range

What This Means

Your requested access code time doesn't match any predefined user level time slot configured in your Dormakaba Oracode system.

How to Check

View your device's available time slots:

device.properties.dormakaba_oracode_metadata.predefined_time_slots

Common Causes

  1. Your time range doesn't match any available slot

  2. Timezone mismatch - Even if using the correct time slot times, they must be in the device's timezone

How to Fix

Option 1: Adjust Your Time Range

  • Modify your start/end times to match an available time slot

Option 2: Add a New User Level (Not Recommended)

Warning: Adding a new user level requires re-programming all your locks, which is a time-consuming process. Only pursue this option if you frequently need access codes outside your existing time slots.

Recommendation: Use Option 1 whenever possible to avoid the overhead of re-programming your locks.


Account-Level Issues Blocking All Codes

Sometimes problems at the account level prevent creating codes on any device.

Check Account Errors

dormakaba_sites_disconnected (in third_party_account.error_map)

  • One or more Dormakaba sites have lost connection

  • Prevents code creation on all affected devices

  • Requires reconnecting the sites in Dormakaba

Check Account Warnings

dormakaba_sites_unapproved (in third_party_account.warning_map)

  • Sites need approval on Seam's side

  • May prevent code creation until approved

  • Contact support@seam.co to resolve this issue

How to Check

Retrieve your connected account and check for errors/warnings:

// Using Seam SDK
const account = await seam.connectedAccounts.get({
  connected_account_id: "your_account_id"
});

// Check account.error_map and account.warning_map

Or view the JSON resource:

{
  "connected_account_id": "xxx",
  "error_map": {
    "dormakaba_sites_disconnected": "One or more sites are disconnected"
  },
  "warning_map": {
    "dormakaba_sites_unapproved": "Sites pending approval"
  }
}

Understanding Warning vs Error States

Access codes can be in warning or error states with different meanings:

Warning State: delay_in_setting_on_device

  • System is still trying to set the code

  • This is temporary - wait for sync to complete

  • Code will eventually succeed or fail

Error State: failed_to_set_on_device

  • System has given up trying to set the code

  • Time threshold exceeded

  • Code will not work - needs to be recreated


Dormakaba Oracode Limitations

Be aware of these system limitations when creating access codes:

Cannot Customize Codes

  • Oracode generates the code value automatically

  • You cannot specify a custom PIN

  • Codes include spaces (e.g., "6 * 901028")

One-Time-Use Not Supported

  • All codes can be used multiple times during their validity period

  • Single-use codes are not available

Maximum Duration: 31 Days

  • Access codes cannot be valid for more than 31 days

  • For longer access, create sequential codes or use permanent solutions

Offline Access Codes Cannot Be Deleted

  • Once an offline access code is created, it cannot be removed

  • The code will remain valid until its expiration time

  • Plan offline access code timing carefully before creation


Advanced Debugging

Check Access Code Status

Using Seam SDK:

const accessCode = await seam.accessCodes.get({
  access_code_id: "your_access_code_id"
});

// Check these fields:
// - accessCode.code
// - accessCode.starts_at / ends_at
// - accessCode.is_set_on_device
// - accessCode.status
// - accessCode.errors
// - accessCode.warnings

Example JSON resource:

{
  "access_code_id": "xxx",
  "code": "6 * 901028",
  "starts_at": "2025-12-15T14:00:00Z",
  "ends_at": "2025-12-16T10:00:00Z",
  "is_set_on_device": true,
  "status": "set",
  "errors": [],
  "warnings": []
}

View Available Time Slots

Using Seam SDK:

const device = await seam.devices.get({
  device_id: "your_device_id"
});

// Check predefined time slots:
// device.properties.dormakaba_oracode_metadata.predefined_time_slots

Example JSON resource:

json{
  "device_id": "a1b2c3d4-5678-90ab-cdef-1234567890ab",
  "properties": {
    "dormakaba_oracode_metadata": {
      "iana_timezone": "America/Los_Angeles",
      "predefined_time_slots": [
        {
          "name": "Guest 3:30pm-10:30am",
          "prefix": 0,
          "is_24_hour": true,
          "check_in_time": "15:30:00[America/Los_Angeles]",
          "check_out_time": "10:30:00[America/Los_Angeles]",
          "dormakaba_oracode_user_level_id": "7f3a4807-c111-483d-a9cd-a2b813865fe4"
        }
      ]
    }
  }
}

Still Having Issues?

If you've checked the items above and still need help:

Contact support with:

  • Your device ID

  • The access code ID (if applicable)

  • The specific error or warning message

  • The time range you're trying to use

  • Results from the debug queries above

Our team can investigate device-specific configuration issues and sync problems.