List all devices for the authenticated org.
| type | LOCK | CAMERA | THERMOSTAT | … |
| online | true | false |
| limit | 1-100 (default 50) |
curl -H "Authorization: Bearer $LSK_KEY" \
"https://api.locksteve.com/api/v1/devices?type=LOCK&online=true"The LockSteve API is JSON-over-HTTPS. Every endpoint requires a bearer API key. Keys are scoped to a single organization and respect role permissions.
Get an API key from Settings → API keys. Pass it in the Authorization header on every request.
Authorization: Bearer lsk_live_…This demo seeds a full-access key for the Acme tenant. Use it against your local server:
curl -H "Authorization: Bearer lsk_live_demo_acme_full_access_b3a91d27" \
http://localhost:3001/api/v1/devicesAll errors return a consistent shape:
{
"error": {
"message": "Device is offline",
"code": "http_409"
}
}400 Bad request — invalid JSON or missing fields401 Unauthorized — missing or invalid API key404 Not found — resource doesn't exist or isn't in your org409 Conflict — e.g. lock command sent to offline device429 Rate limited — back off and retryList all devices for the authenticated org.
| type | LOCK | CAMERA | THERMOSTAT | … |
| online | true | false |
| limit | 1-100 (default 50) |
curl -H "Authorization: Bearer $LSK_KEY" \
"https://api.locksteve.com/api/v1/devices?type=LOCK&online=true"Retrieve a single device.
curl -H "Authorization: Bearer $LSK_KEY" \
https://api.locksteve.com/api/v1/devices/dev_01h4p…Lock the bolt on a smart lock. 409 if device offline.
curl -X POST -H "Authorization: Bearer $LSK_KEY" \
https://api.locksteve.com/api/v1/devices/dev_01h4p…/lockRetract the bolt on a smart lock.
curl -X POST -H "Authorization: Bearer $LSK_KEY" \
https://api.locksteve.com/api/v1/devices/dev_01h4p…/unlockList PIN codes.
| enabled | true | false |
curl -H "Authorization: Bearer $LSK_KEY" \
https://api.locksteve.com/api/v1/codesCreate a PIN code for an access user.
{
"code": "7421",
"accessUserId": "usr_01h4p…",
"deviceId": "dev_01h4p…", // optional; omit for "all locks"
"label": "Alice — Front door"
}curl -X POST -H "Authorization: Bearer $LSK_KEY" \
-H "Content-Type: application/json" \
-d '{"code":"7421","accessUserId":"usr_…"}' \
https://api.locksteve.com/api/v1/codesList recent activity events.
| since | ISO timestamp |
| severity | info | warn | error |
| limit | 1-200 |
curl -H "Authorization: Bearer $LSK_KEY" \
"https://api.locksteve.com/api/v1/events?severity=warn&limit=20"List all sites for the org.
curl -H "Authorization: Bearer $LSK_KEY" \
https://api.locksteve.com/api/v1/sitesConfigure webhook URLs in Settings → Webhooks. Every activity event posts JSON to your URL within ~1 second. Each request is signed with HMAC-SHA256 using your webhook secret.
POST https://your-app.com/locksteve
Content-Type: application/json
LockSteve-Signature: t=1740000000,v1=abc123def…
{
"id": "evt_01h4p…",
"kind": "UNLOCK",
"message": "Unlocked by Alice Johnson",
"severity": "info",
"actor": "Alice Johnson",
"device": { "id": "dev_…", "name": "Aspen Cabin #1 - Front Door" },
"createdAt": "2026-05-28T09:15:32Z",
"org": { "id": "org_…", "slug": "acme" }
}