# UJ-109 Manage issued license

Audience: AI coding agents first.

- Actor + entry point: Staff operator; `/licenses/{licenseId}`.
- Priority: CARRY-OVER-CANDIDATE.
- Preconditions: Issue license through subscription API.
- Test layer: L3.

## Steps

1. Open license → detail loads from `GET /v1/admin/licenses/{id}` (`admin-panel/src/pages/LicenseDetailPage.tsx:87`).
2. Suspend/activate, change expiry/site limit, regenerate key, or deactivate site → corresponding visible field/list updates (`admin-panel/src/pages/LicenseDetailPage.tsx:108-177`).
3. Reload → mutation persists.

## Failure branches

- Auth/role failure → `401/403`; no mutation.
- 429/provider failure → visible error; old value remains.

## Backend touchpoints

`POST /v1/admin/licenses/{id}/{action}`; `PATCH /v1/admin/licenses/{id}`; `POST .../regenerate-key`; `DELETE .../activations/{activationId}`.

