> 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