Overview

Licensing

This page explains licensing from the end user's perspective: what is needed, how to obtain the license, and how to apply it.

How to obtain a license

Review plans, included features per tier (Base / Pro / Enterprise) and purchase on the public site:

After purchase you will receive an email with license-payload + license-signature to install as described in the "End User Procedure" below.

How It Works

  • The license is valid only if:
  • correct signature.
  • machineFingerprint of the current server is present in the machineFingerprints list of the signed payload.
  • If the license is not valid, data reading (getFlatRecordData) is limited to a maximum of 20 records. Additionally, the host hook customizeSelect is bypassed (not invoked).

Where to Find the machineFingerprint

Backend endpoint:

  • GET /api/Meta/FirstRunStatus
  • in the payload you will find machineFingerprint.

Note: the local file installation.id is no longer used by licensing.

End User Procedure

1. Retrieve machineFingerprint from your host.

2. Send the value to the vendor/licensor.

3. Receive the license values:

  • license-payload
  • license-signature
  • license-public-key-pem (if required by your installation)

4. Enter the values in the appsettings.{Environment}.json file of the running host, AppSettings section.

5. Restart the backend.

6. Verify license status from API:

  • GET /api/Meta/LicenseStatus
  • expected: licenseValid = true.

Multi-Machine License

A single license can authorize multiple machines by including multiple values in machineFingerprints.

Quick Troubleshooting

  • licenseReason = invalid_signature:
  • payload/signature are not consistent with each other or the public key is different.
  • licenseReason = machine_fingerprint_not_authorized:
  • the current machine's fingerprint is not present in the received license.
  • licenseReason = machine_fingerprint_missing:
  • the runtime cannot calculate the local fingerprint.
  • licenseReason = license_expired:
  • the license has expired, request renewal.

Screenshot

licensing / LicenseStatus API response (licenseValid=true, tier=developer)
licensing / LicenseStatus API response (licenseValid=true, tier=developer)