Licenses
Base:/v1/licenses. Authenticate with an API key:
Wrong-org access returns
404 (no existence oracle).
External id
Optionalexternal_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
{ data: License[], meta }. Optional page / per_page (max 100); omit both for the full set.
Revoke license
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:
devices.read (account API key) or a product key for that license.
Delete license
409 otherwise). Success: { "data": { "ok": true } }.
