Implementing your Device Model & Discovery
How to structure your device schema and expose the endpoints Seam uses to list and sync a user’s locks.
A clean, predictable device model helps Seam present accurate information to end users and orchestrate smart-lock behavior across hospitality, multifamily, STR, and coworking environments. The fields listed below form the baseline for a Seam-compatible integration.
Device Object Schema
Your API should expose a device resource with a stable, predictable structure. This lets Seam identify devices, correlate events, and display meaningful details to the user.
A typical device object includes:
device_id: unique, stable identifierdevice_type: smart_lock, hub, or bridgedevice_model: hardware model identifieronline: whether your cloud can reach the devicebattery_level: percentage 0–100signal_quality: optional, recommendedlocation: latitude/longitude if availabletimezone: IANA timezone stringbridge_id: parent hub/bridge if applicablelock_state: locked, unlocked, or unknowndoor_state: open, closed, or ajar (if supported)
Device example
{
"device_id": "lock_491829",
"device_type": "smart_lock",
"device_model": "LockPro X200",
"online": true,
"battery_level": 72,
"signal_quality": -68,
"location": { "latitude": 37.7859, "longitude": -122.4011 },
"timezone": "America/Los_Angeles",
"bridge_id": "bridge_99211",
"lock_state": "locked",
"door_state": "closed",
"device_time": "2025-05-22T10:35:12Z",
"updated_at": "2025-05-22T10:35:12Z"
}Listing door locks
After a lock owner logs in through OAuth, Seam lists all locks associated with their account so the user can select which devices to connect. Your API should return a JSON list of all accessible locks.
List All Locks Example
GET https://devicecloud.example.com/locks
{
"locks": [
{
"lock_id": "3043fde0-3c6d-4913-981f-2607f05fe74e",
"name": "Office Front Door",
"model": "example_model",
"address": "123 Amy Lane, CA, 94110, United States"
},
{
"lock_id": "1c33d4cf-e178-4c06-8a9a-aadd6dc5a804",
"name": "Back Door",
"model": "example_model",
"address": "999 Louis Lane, CA, 94110, United States"
}
]
}Getting a single lock
Seam may request information about a specific lock to display full details or perform deeper synchronization.
Get a Lock Example
GET https://devicecloud.example.com/locks/<LOCK_ID>
{
"lock_id": "3043fde0-3c6d-4913-981f-2607f05fe74e",
"name": "Office Front Door",
"model": "example_model",
"address": "123 Amy Lane, CA, 94110, United States"
}Connectivity reporting
To keep device state fresh, your platform should send webhook events whenever connectivity changes.
Send an event when the device goes offline
Send another when it comes back online
Report hub or bridge status separately
Online event example
{
"event_type": "device.online",
"device_id": "lock_491829",
"timestamp": "2025-05-22T10:48:18Z"
}Offline event example
{
"event_type": "device.offline",
"device_id": "lock_491829",
"timestamp": "2025-05-22T10:45:01Z"
}Power & battery reporting
Your API should report battery percentage and emit events when power levels change.
Battery level example
{
"battery_level": 72
}Low-battery event
{
"event_type": "battery.low",
"device_id": "lock_491829",
"battery_level": 15,
"timestamp": "2025-05-22T11:02:44Z"
}Battery replaced / charged
{
"event_type": "battery.replaced",
"device_id": "lock_491829",
"battery_level": 100,
"timestamp": "2025-05-22T12:10:15Z"
}Time & timezone reporting
Accurate time lets Seam validate access-code schedules and align audit logs. Accurate timezone data is especially important during daylight-savings transitions.
Required fields
device_time: the current time reported by the devicetimezone: an IANA timezone string
Device-time example
{
"created_at": "2025-05-22T10:30:12Z",
"device_time": "2025-05-22T10:31:47Z",
"timezone": "America/Los_Angeles",
"device_model": "LockPro X200"
}Seam compares device_time with server time to detect clock drift and identify devices that may evaluate schedules incorrectly.
Guidance for manufacturers
If scheduling is evaluated on-device, the reported device time and timezone must be kept accurate and updated reliably.
Last updated
Was this helpful?

