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.ioon port 443.
Activation
- The installer asks for the key at the prompt
License Key:(or takes it from--license-key=). - It validates the key with the license server before it installs anything. An invalid key stops the installation.
- It writes the key as
LICENSE_KEYinto/home/xtreamgo/.env.productionand calls the activation endpoint with the key, the server IP and the host name. On success it printsLicense: <type> (Expires: <date>). - 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_stateinside 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
| Situation | Behaviour |
|---|---|
| The license server is unreachable and the last signed answer is less than 14 days old | Nothing changes. The panel stays fully usable. The failed checks are counted in the log. |
| The last signed answer is older than 14 days | The license is marked invalid. The admin panel is locked. Subscriber delivery continues on the paths listed below. |
| The panel has never received a signed answer | The 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 data | The 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
| Action | Message |
|---|---|
| Create a backup in the panel | The license is not valid, so a backup cannot be created. Open License to see the reason. |
| Create users | The license has expired, so new users cannot be created. Renew it on the License page. |
| Create lines or devices as a reseller | The license is not valid, so new lines cannot be created. Open License to see the reason. |
| Add a server | The license check with the license server is overdue, so adding a server is paused. |
| Add a DNS provider | The license has expired, so a DNS provider cannot be added. Renew it on the License page. |
| Create activation codes | The license check has not completed yet, so activation codes cannot be created. Open License and press refresh, then try again. |
| Change cloud backup settings | The 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
- Open License in the panel and use the refresh function. The panel runs a verification at once.
- On a lock screen use Retry.
- Without the panel, wait one minute. The background check runs every minute.
Check the state from the server:
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 -20Ask the license server directly, the same way the installer does:
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 expiredand 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:
| Mode | What it does |
|---|---|
| Manual | You 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. |
| Automatic | You 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
curl -s http://127.0.0.1/api/v1/license/statusExpected 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
| Message | Meaning | Action |
|---|---|---|
License key not found | The key does not exist on the license server. | Check the key for typing errors. |
License has expired | The period is over. | Renew the license. |
License is suspended | The license was suspended by XtreamGo. | Contact XtreamGo support. |
License is bound to a different server IP | The 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 license | The 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ıyor | This 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 panel | The 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 log | LICENSE_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 license | The name in this message means the license server. The key change could not reach it. | Check outbound HTTPS and try again. |