Skip to content

Changelog

The API lives at /api/v1. Additions don't break what already works: new response fields, new endpoints and new scopes. A breaking change would go to /api/v2.

1.1.0 — November 8, 2026

  • Control lease cap: 30 minutes in a row per key and camera (lease.hold_ends_at), then a 5-minute wait (409 lease_hold_limit). Releasing from the panel blocks that key on that camera for 10 minutes (409 lease_revoked_by_user).
  • Control lease: GET/POST/DELETE /cameras/{id}/lease, control scope. While a key holds it, automations don't move or change the camera, tracking doesn't move it and no other key can either (409 camera_leased). Events camera.lease.taken and camera.lease.released.
  • Automations: GET /automations, GET /automations/{id}, POST /automations/{id}/enable|disable, POST /automations/{id}/run, GET /automations/{id}/runs/{run}. Scopes automations:read, automations:write and automations:run.
  • Actor: commands now include actor (api:<key name>, automation:<id> or user:<id>), and so do audit rows and events caused by a request made with a key.
  • New error codes: camera_leased, lease_held, kill_switch, automation_inactive, automation_capped, no_manual_trigger, not_started, automation_refused.
  • SDKs: leases (with hold), automations and verifyWebhook / verify_webhook.
  • Developer portal in Spanish and English, with a self-hosted REST reference. openapi.json?lang=en returns English summaries.

1.0.0 — November 7, 2026

  • First release: per-space keys with a role ceiling, scopes, expiry and rate limit; cameras (QR provisioning, decommissioning, credential rotation), PTZ, snapshots, recording, live video (WebRTC and HLS), talk, events, own bucket and signed webhooks.
  • TypeScript and Python SDKs.