Guides

License

This document explains how the license is activated, how the panel behaves when it cannot reach the license server, which actions pause, how to refresh the license state and how to move the license to another server.

Before you start

  • Your license key.
  • Root access to the main server.
  • The server can reach https://api.xtreamgo.io on port 443.

Activation

  1. The installer asks for the key at the prompt License Key: (or takes it from --license-key=).
  2. It validates the key with the license server before it installs anything. An invalid key stops the installation.
  3. It writes the key as LICENSE_KEY into /home/xtreamgo/.env.production and calls the activation endpoint with the key, the server IP and the host name. On success it prints License: <type> (Expires: <date>).
  4. After the start the panel verifies the license by itself. The first verification binds the license to the public IP address of the server.

There is no separate activation step in the panel.

How verification works

  • The panel contacts the license server every minute. It sends the license key, the server IP, a hardware fingerprint and usage figures.
  • The answer is signed. The panel ignores answers without a valid signature.
  • The panel stores the last state in /app/data/.license_state inside the API data volume, so the state survives a restart.
  • The License page shows the type, the expiry date, the connection and stream limits, the last verification time and the active modules.

When the server cannot reach the license server

SituationBehaviour
The license server is unreachable and the last signed answer is less than 14 days oldNothing changes. The panel stays fully usable. The failed checks are counted in the log.
The last signed answer is older than 14 daysThe license is marked invalid. The admin panel is locked. Subscriber delivery continues on the paths listed below.
The panel has never received a signed answerThe license is marked invalid after 10 failed checks in a row, which is about 10 minutes.
The state file is missing on a panel that already holds dataThe admin panel is locked until the next successful check. Message: License state missing on initialized panel. This is expected right after a restore on a new server.

When a Telegram bot is configured, the panel sends LICENSE WARNING after 5 failed checks and LICENSE CRITICAL when it locks.

As soon as a check succeeds again, the lock is removed. No action is needed on the server.

Which actions pause

While the license is invalid

The API answers every request with HTTP 403 and "error":"license_invalid", except for the paths below.

Still available for administrators:

  • Login (/api/v1/auth/login).
  • License status (/api/v1/license/status).
  • Migration paths (/api/v1/migration...).

Still available for subscribers:

  • /player_api.php, /get.php, /xmltv.php, /portal.php.
  • /live/..., /movie/..., /series/..., /hls/..., /timeshift/..., /catchup/....
  • Everything under /stalker_portal/.
  • The same Xtream paths behind a reseller code prefix.

All other subscriber paths are blocked while the license is invalid. Blocked paths include /c/, /server/load.php, /load.php, /enigma2.php, /panel_api.php, /livehls/..., /vodhls/..., /hlsr/..., /stk/..., /catchup-segments/..., /play/... and the short stream form /<username>/<password>/<stream-id>.

Individual actions with their own check

ActionMessage
Create a backup in the panelThe license is not valid, so a backup cannot be created. Open License to see the reason.
Create usersThe license has expired, so new users cannot be created. Renew it on the License page.
Create lines or devices as a resellerThe license is not valid, so new lines cannot be created. Open License to see the reason.
Add a serverThe license check with the license server is overdue, so adding a server is paused.
Add a DNS providerThe license has expired, so a DNS provider cannot be added. Renew it on the License page.
Create activation codesThe license check has not completed yet, so activation codes cannot be created. Open License and press refresh, then try again.
Change cloud backup settingsThe license check has not completed yet, so cloud backup settings cannot be changed. Open License and press refresh, then try again.

Existing subscribers, running streams and existing lines are not changed by a lock.

How to refresh the license state

  1. Open License in the panel and use the refresh function. The panel runs a verification at once.
  2. On a lock screen use Retry.
  3. Without the panel, wait one minute. The background check runs every minute.

Check the state from the server:

bash
curl -s http://127.0.0.1/api/v1/license/status
API=$(docker ps --filter name=xtreamgo-api --format '{{.Names}}' | head -1)
docker logs "$API" 2>&1 | grep LicenseChecker | tail -20

Ask the license server directly, the same way the installer does:

bash
curl -s -X POST https://api.xtreamgo.io/api/v1/cms/verify \
  -H 'Content-Type: application/json' \
  -d '{"license_key":"<your-key>","server_ip":"checking"}'

The answer contains "valid":true or a message with the reason.

Expiry and renewal

  • The panel shows a banner with the remaining days before the expiry date.
  • The License page has a renewal request. The request goes to XtreamGo support and is approved by a person.
  • The website states that licenses do not renew automatically. Order the same package again before the end of the period.
  • After the expiry date the license server answers License has expired and the admin panel locks as described above.

Changing the license key

The License page has a function to enter a new key. The panel verifies the new key with the license server and switches to it.

The new key applies to the running API at once. It is not written into /home/xtreamgo/.env.production. Edit the line LICENSE_KEY= in that file by hand right after you change the key in the panel. Otherwise the API starts with the old key after a restart or an update.

Moving the license to a new server

The license is bound to one server IP. A second server with the same key is rejected with License is bound to a different server IP.

The customer dashboard on the XtreamGo website has a function to change the server. It has two modes:

ModeWhat it does
ManualYou install the panel on the new server and move your data yourself. The function tests an SSH login to the new server and then binds the license to the new IP.
AutomaticYou enter the SSH details of the old and the new server. The function tests both logins, makes a database backup on the old server, transfers it, restores it on the new server, checks the table count and then binds the license to the new IP.

Points to know:

  • Both modes ask for the root SSH password of the new server. It is stored encrypted for the license and used for later updates. See Updates and rollback.
  • The automatic mode moves the database. Media files, certificates and load balancers are not moved. See Backup and restore for the remaining steps.
  • Install the panel on the new server first, then start the move.
  • If the license is locked to hardware, the new server is rejected with Hardware fingerprint mismatch. License is locked to a different hardware. Ask XtreamGo support to reset the fingerprint.
  • If you cannot use the dashboard function, ask XtreamGo support to move the license.

A server that keeps its IP address and hardware does not need a move. Reinstalling the operating system on the same server changes the hardware fingerprint input (/etc/machine-id). On a license with hardware lock, ask XtreamGo support for a fingerprint reset before the reinstall.

How to check it worked

bash
curl -s http://127.0.0.1/api/v1/license/status

Expected fields: "licensed":true, your license_type, the expires_at date, days_remaining, and a last_check time within the last two minutes.

If something goes wrong

MessageMeaningAction
License key not foundThe key does not exist on the license server.Check the key for typing errors.
License has expiredThe period is over.Renew the license.
License is suspendedThe license was suspended by XtreamGo.Contact XtreamGo support.
License is bound to a different server IPThe key is in use on another IP, or the public IP of your server changed.Move the license as described above.
Hardware fingerprint required for this licenseThe license is locked to hardware and the request carried no fingerprint. This appears in the installer on a reinstall.Ask XtreamGo support to reset the fingerprint, then retry.
Hardware fingerprint mismatch. License is locked to a different hardware.The hardware differs from the registered one.Ask XtreamGo support to reset the fingerprint.
CMS response signature invalid (security)The name in this message means the license server. Its answer failed the signature check.Check that nothing intercepts HTTPS to api.xtreamgo.io. Contact XtreamGo support.
CMS sunucusuna ulaşılamıyorThis message is shown in Turkish. It means "the license server cannot be reached". The offline window of 14 days has passed.Restore outbound HTTPS to api.xtreamgo.io. The lock clears on the next successful check.
License state missing on initialized panelThe stored state is missing or does not match this server.Wait for the next successful check. If it does not clear, check the connection to the license server.
[LicenseChecker] FATAL CONFIG: client panel with no LICENSE_KEY in the API logLICENSE_KEY is empty in the container.Check the line LICENSE_KEY= in /home/xtreamgo/.env.production. A restart does not load a changed line. Before the first panel update, run xtreamgo update api to recreate the API container with the file. After the first update that command is refused, because the API then runs in a container that Docker Compose does not manage. Contact XtreamGo support in that case.
Cannot reach CMS server to verify licenseThe name in this message means the license server. The key change could not reach it.Check outbound HTTPS and try again.

Back to documentation