> What are the different types of licenses for SPX?
## License Types
Different versions of SPX come with different licensing methods.
- [[Documentation/Products/SPX Solo|SPX Solo]]: One-time purchase premium license
- [[Documentation/Products/SPX Production|SPX Production]] & [[Documentation/Products/SPX Broadcast|Broadcast]]: Ongoing license as subscription
---
> [!TIP] Need to purchase or renew a license? [Contact us](https://spxgraphics.com/contact).
## SPX License Server
The SPX License Server is a dedicated service for managing and enforcing product licenses within your organization's infrastructure. It handles instance activations, heartbeats, and ensures compliance with your purchased capacity.
### 1. System Identification (Host-ID)
>The License Server identifies the host machine where it is running to ensure the license is bound correctly. This identifier is referred to as the **Host-ID**.
### How Host-ID is Determined:
- **Physical Hardware**: Uses the system's unique hardware UUID.
- **Virtual Machines (VMs)**:
- On **Linux**, it attempts to read the UUID using `dmidecode` (requires `sudo` for initialization).
- On **Windows**, it uses `wmic` to retrieve the product UUID.
- If specific VM identifiers cannot be found, it falls back to the primary MAC address.
- **Prefix**: VM-based Host-IDs are prefixed with `VM-` (e.g., `VM-550e8400-e29b-41d4-a716-446655440000`).
> [!IMPORTANT] When moving the License Server to a new machine or VM, the Host-ID will change. You may need to update your license file to reflect the new Host-ID.
### 2. Configuration (`config.json`)
>The server is controlled via a [[Documentation/Server/Configurations|config.json]] file located in the application root directory. If this file is missing, the server will generate a default one upon startup.
### Configuration Parameters:
| Parameter | Type | Default | Description |
| ------------------------------ | ------- | -------------------- | -------------------------------------------------------------------------- |
| `automaticCleanup` | Boolean | `true` | Automatically remove instances that stop sending heartbeats. |
| `keepAliveTimeout` | Number | `900` | Period (in seconds) after which an inactive instance is considered "dead". |
| `general.loglevel` | String | `"info"` | Logging level (`error`, `warn`, `info`, `verbose`, `debug`). |
| `general.logfolder` | String | `"logs"` | Directory where log files are stored. |
| `general.dbfile` | String | `"spx-license-db.db" | SQLite database file for tracking active instances. |
| `notifications.enable` | Boolean | `true` | Enable internal expiration warnings. |
| `notifications.thresholdDays` | Number | `14` | Start warning X days before a product license expires. |
### 3. License Management
>Licensing information is stored in the `license/` directory.
### Essential Files:
1. **`license/license.json`**: Contains your product entitlements, expiration dates, and activation limits.
2. **`license/license-rsa256-public.pem`**: The public key used to verify the integrity and authenticity of the `license.json` file.
### How it works:
- The server validates the `license.json` using the local RSA public key on every startup.
- It checks that the `hostID` inside the license matches the current machine.
- It verifies that the number of active instances does not exceed the `maxInstances` defined for each product.
### 4. Operational Maintenance
### Network Requirements
- By default, the server listens on port **6660**.
- Product instances must be able to reach this port via TCP/HTTP for activation and heartbeat updates.
### Monitoring Instances
You can view all currently active instances by sending a GET request to:
`http://<server-ip>:6660/instances`
### Logging
Logs are automatically rotated daily.
- **Location**: `logs/` (or your configured folder).
- **Format**: `spx-license-server-YYYY-MM-DD.log`.
- **Content**: Includes application startup events, license validation results, expiration warnings, and HTTP request logs.
### Database
The server uses a local SQLite database (`spx-license-db.db`) to persist active instance data. No external database server is required.
### 5. Troubleshooting
- **Server won't start**: Ensure the `license/` folder contains both the JSON file and the `.pem` public key.
- **License data mismatch**: Check if the Host-ID displayed at startup matches the `hostID` in your `license.json`.
- **Activation failures**: Ensure firewall rules allow inbound traffic on the configured port (default 6660).
---
## Local Offline Licensing
When SPX License Server is not configured, the SPX Graphics Controller falls back to offline licensing. This method uses a license file stored directly on your machine to validate your subscription.
### 1. System Identification (Host-ID)
>The application identifies the host machine to ensure the license is bound correctly. This identifier is referred to as the **Host-ID**.
#### How Host-ID is Determined:
- **Physical Hardware**: Uses the system's unique hardware UUID.
- **Virtual Machines (VMs)**:
- On **Linux**, it attempts to read the UUID using `dmidecode` (requires `sudo` for initialization).
- On **Windows**, it uses `wmic` to retrieve the product UUID.
- If specific VM identifiers cannot be found, it falls back to the primary MAC address.
- **Prefix**: VM-based Host-IDs are prefixed with `VM-` (e.g., `VM-550e8400-e29b-41d4-a716-446655440000`).
> [!IMPORTANT] The license is bound to the Host-ID you provided when purchasing your license.
#### Where to Find Your Host-ID
Your Host-ID can be found in two locations:
1. Navigate to [http://localhost:5660/api/v1](http://localhost:5660/api/v1) — the Host-ID is displayed at the top of the page.
![[Pasted image 20260306112952.png]]
2. When starting SPX Graphics Controller without a valid license, the Host-ID is shown in the missing license notification.
![[Pasted image 20260305172931.png|434]]
### 2. License Management
>[!IMPORTANT] The license file is typically stored in the `ASSETS/json/spx-core/` directory, but this can vary. Always check the `licensePath` in `license.json`.
### Essential Files:
1. **`spx-core/license.json`**: Contains your product entitlements and expiration dates.
### How it works:
- The application validates `license.json` on every startup.
- It checks that the `hostID` inside the license matches the current machine.
### 3. Troubleshooting/Common issues
- **License data mismatch**: Check if the Host-ID displayed at startup matches the `hostID` in your `license.json`.
- **License path mismatch**: Verify that the path where you placed your license file matches the `licensePath` in your `license.json`.
- **Expiration**: Check the `expiration` found in `license.json` to ensure the license has not expired.
---
## Read Next
- [[Documentation/Products/Overview|Products Overview]] - Compare SPX product tiers
- [[Documentation/Server/Configurations|Server Configurations]] - Configuration options
- [[FAQ/Cloud Deployment|Cloud Deployment]] - Deploying SPX in the cloud
- [[FAQ/Troubleshooting|Troubleshooting]] - Common issues and solutions