> For the complete documentation index, see [llms.txt](https://docs.intuneassistant.cloud/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.intuneassistant.cloud/extensions/worker/license-management.md).

# License management

## What Is This Page?

The **License Management** page lets MSP administrators generate, assign, and revoke worker licenses. A worker license is the token that authorizes a specific worker instance to authenticate with the Intune Assistant backend and execute jobs against customer tenants.

Each license is tied to a single worker. Once assigned, it cannot be reassigned to a different worker without revoking it first.

{% hint style="info" %}
**This page is only visible to MSP accounts.** If you are a direct (non-MSP) customer, your platform administrator manages worker licenses on your behalf — you do not need to interact with this page.
{% endhint %}

***

## Key Concepts

### What is a worker license?

A worker license is a cryptographic key in the format `INTUNE-{customerid}-{randompart}`. It is generated once, shown to you exactly once (copy it immediately), and then stored only as a hashed reference. When a worker registers or sends a heartbeat, it presents this key to authenticate itself.

| Term          | Meaning                                                                                          |
| ------------- | ------------------------------------------------------------------------------------------------ |
| **Generated** | License exists in the system but is not yet assigned to any worker                               |
| **Assigned**  | License is linked to a specific worker registration                                              |
| **Revoked**   | License has been permanently deactivated; the worker using it will be rejected at next heartbeat |

### License quota

Your license quota controls how many licenses you can generate. It is tied to your Intune Assistant subscription (`MaxTenants` on your customer license). The **quota bar** at the top of the page always shows:

* Total licenses included in your plan
* How many have been issued (generated)
* How many are still available to generate

{% hint style="warning" %}
Once all quota slots are used, you must either revoke an existing license or contact Intune Assistant support to increase your quota before generating a new one.
{% endhint %}

### Billing vs. deployment

Licenses are billed under your MSP account regardless of which customer tenant the worker is deployed in. This is by design — you pay for your workers centrally, and you can deploy them into any of your customer environments.

***

## Page Layout

The page has three main sections:

| Section                     | Purpose                                                                               |
| --------------------------- | ------------------------------------------------------------------------------------- |
| **Quota bar**               | Shows issued vs. total licenses at a glance; changes colour as you approach the limit |
| **Generate License button** | Opens the generation dialog                                                           |
| **License table**           | All licenses with status, assignment, and actions                                     |

***

## Quota Progress Bar

The bar at the top of the page displays `X of Y licenses used`.

| Bar colour | When shown     | What it means                            |
| ---------- | -------------- | ---------------------------------------- |
| **Blue**   | Below 80% used | Healthy — plenty of quota remaining      |
| **Amber**  | 80–99% used    | Warning — you are running low            |
| **Red**    | 100% used      | Full — no more licenses can be generated |

***

## License Table

Each row represents one license.

| Column          | Description                                                                                                                                                                             |
| --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **License Key** | The key, masked to the first 20 characters. Use the copy icon to copy the full key to the clipboard (only possible for un-revoked licenses where the key was shown at generation time). |
| **Status**      | `Active`, `Assigned`, or `Revoked` badge                                                                                                                                                |
| **Assigned To** | The worker registration ID the license is assigned to, or `—` if unassigned                                                                                                             |
| **Issued**      | Date the license was generated                                                                                                                                                          |
| **Expires**     | Expiry date if set, or `Never`                                                                                                                                                          |
| **Actions**     | **Assign** (if unassigned), **Revoke**                                                                                                                                                  |

{% hint style="info" %}
After a license is assigned via the Assign action, the "Assigned To" column shows the worker's machine name (if the worker has already registered) or the registration ID.
{% endhint %}

***

## Generating a License

{% stepper %}
{% step %}

### Click **Generate License**

Click **Generate License** at the top right of the page.
{% endstep %}

{% step %}

### Fill in the form

| Field               | Required | Description                                                                                                                    |
| ------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------ |
| **Recipient email** | Yes      | Contact email for the person responsible for this worker (used for notifications)                                              |
| **Company**         | No       | The customer company name, for reference                                                                                       |
| **Expiry date**     | No       | Set an expiry if you want the license to automatically become invalid on a specific date. Leave blank for a perpetual license. |
| **Notes**           | No       | Internal notes visible only in this management page                                                                            |
| {% endstep %}       |          |                                                                                                                                |

{% step %}

### Click **Generate**

Click **Generate**.
{% endstep %}

{% step %}

### Copy the generated key

The generated key appears in a highlighted read-only field.

{% hint style="warning" %}
**Save this key immediately.** It is shown only once and cannot be retrieved later. Copy it to a password manager or securely hand it to the person installing the worker.
{% endhint %}

Click **Copy** to copy the full key, then click **Close**.
{% endstep %}
{% endstepper %}

***

## Assigning a License to a Worker

After generating a license, you can assign it to a specific worker registration. This step is optional at generation time — you can also assign later from the table.

### From the table

{% stepper %}
{% step %}

### Find the license row

Find the license row with **Status: Active** (unassigned).
{% endstep %}

{% step %}

### Open the Assign action

Click **Assign** in the Actions column.
{% endstep %}

{% step %}

### Select the target worker

Select the target worker from the dropdown. The dropdown shows only workers that:

* Have registration status **Approved**
* Do not already have a license assigned
  {% endstep %}

{% step %}

### Confirm the assignment

Click **Assign License**.
{% endstep %}

{% step %}

### Assign license to worker

Last step is to assign the license at at worker side.
{% endstep %}
{% endstepper %}

### Cross-tenant assignment

If you are an MSP and the worker is deployed inside a customer tenant, you can still assign the license from your MSP account. The license remains billed under your MSP account; the worker validates it using the worker registration ID rather than the customer tenant ID.

***

## Revoking a License

Revoking a license permanently deactivates it. The worker using it will fail authentication at the next heartbeat and stop executing jobs.

{% stepper %}
{% step %}

### Find the license row

Find the license row in the table.
{% endstep %}

{% step %}

### Open the Revoke action

Click **Revoke** in the Actions column.
{% endstep %}

{% step %}

### Enter a revocation reason

Enter a **revocation reason** (required — this is logged in the audit trail).
{% endstep %}

{% step %}

### Confirm revocation

Click **Confirm Revoke**.

{% hint style="warning" %}
Revocation is permanent. A revoked license cannot be re-activated. You will need to generate a new license and reinstall the worker.
{% endhint %}
{% endstep %}
{% endstepper %}

***

## Worker Detail Page — License Card

On the **Worker Detail** page (`/worker/{id}`), a **License** card shows the license status for that specific worker:

| State shown             | What it means                                                                                       |
| ----------------------- | --------------------------------------------------------------------------------------------------- |
| **License assigned**    | The worker holds an active license. Shows the masked key and assignment date.                       |
| **No license assigned** | The worker is registered but does not have a license. It cannot authenticate until one is assigned. |
| **License revoked**     | The worker's license has been revoked. The worker will stop functioning.                            |

A **Generate License** button is also available directly on the worker detail page. This opens the same generation dialog pre-filtered for that worker, and after generating, immediately offers to assign it.

📸 \[Screenshot placeholder: Worker detail page showing the License card with an active license]

***

## MSP Workflow — End-to-End

Here is the complete workflow from first deployment to an operational worker.

{% stepper %}
{% step %}

### Worker is installed at customer site

The engineer installs the Intune Assistant Worker on a server in the customer tenant. The worker registers itself and appears in your Worker Overview with status **Pending**.
{% endstep %}

{% step %}

### Approve the worker

Go to **Worker > Overview**, find the new registration, and click **Approve**. Set a default sender email and recipient email for the worker (used by scheduled jobs unless overridden per-job).
{% endstep %}

{% step %}

### Generate a license

Go to **Worker > Licenses**. Click **Generate License**. Fill in the recipient email (use the customer's IT contact). Copy the generated key immediately.
{% endstep %}

{% step %}

### Assign the license

Either:

* Click **Assign** on the new license row and select the worker from the dropdown.
* Or hand the key to the engineer and have them paste it into the worker configuration. The worker will self-register the key on next startup.
  {% endstep %}

{% step %}

### Worker is operational

The worker's status changes to **Approved + Licensed**. It begins polling for jobs and executing scheduled reports.

📸 \[Screenshot placeholder: License table with one Assigned license and green quota bar]
{% endstep %}
{% endstepper %}

***

## Frequently Asked Questions

<details>

<summary>Can I move a license from one worker to another?</summary>

No. Revoke the existing license and generate a new one for the destination worker.

</details>

<details>

<summary>What happens if a license expires?</summary>

The worker will fail its next license validation check and stop accepting jobs. It will not be automatically removed from the system. Generate a new license and assign it to restore operation.

</details>

<details>

<summary>I lost the license key after generating it. What do I do?</summary>

Revoke the lost license and generate a new one. The key cannot be recovered.

</details>

<details>

<summary>A customer has set up a worker without my involvement. Who manages the license?</summary>

For MSP customers, all worker licenses are managed centrally through your MSP account. A non-MSP customer's workers are licensed by the platform administrator — the customer does not have access to the license management page.

</details>

<details>

<summary>My quota is full but I need another license. What do I do?</summary>

Revoke any unused or obsolete licenses first. If you still need more, contact Intune Assistant support to increase your quota.

</details>

***

## Related Pages

* [Worker Overview](broken://pages/56a499d8e55c9c169303c3e21c137ec164aec1ad) — view and approve registered workers
* [Worker Detail](broken://pages/1537c51b6d41fb29020c3d9fdfd36ddf460044ff) — manage a single worker, view license status
* [Customer Information](broken://pages/6aa99cd7b1c1d9b02a56dadbe25212138b4b89bf) — view your subscription tier and license quota settings


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.intuneassistant.cloud/extensions/worker/license-management.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
