Skip to main content

Licenses

Base: /v1/licenses. Authenticate with an API key:
Wrong-org access returns 404 (no existence oracle).

External id

Optional external_license_id (string, max 200). Trimmed; empty → null. Unique per customer when set (409 on conflict). Returned on license payloads. Filter list with ?external_license_id= (still requires customer_id). There is no PATCH for licenses — set the id at create time.

Create license

Response is { "data": { …, "license_key": "…", "max_devices": 1, … } } — license_key is shown once.

List licenses

Returns { data: License[], meta }. Optional page / per_page (max 100); omit both for the full set.

Revoke license

Revokes the license and soft-revokes API keys / license tokens bound to it. Prerequisite: every device on the license must already be revoked (no pending or enrolled rows). Unlink devices first with POST /v1/devices/{id}/revoke. If linked devices remain, the API returns 409 conflict and includes the blocking device id(s):

List devices for a license

Returns every non-deleted device bound to the license — pending, enrolled, and revoked — unless you filter with status.
Response: { data: Device[], meta }. Revoked rows sort after active ones. Example payloads:
Requires devices.read (account API key) or a product key for that license.

Delete license

Only revoked licenses can be deleted (409 otherwise). Success: { "data": { "ok": true } }.