The Panel shows "License Required" on the dashboard, or write operations (creating accounts, issuing certificates, etc.) return a 403 with "error": "license_required". The Agent is running and reachable, but it is refusing to carry out write operations due to a license problem.
The Agent validates the license at startup and periodically thereafter. Reads (viewing account lists, status checks) are always permitted. Only writes are blocked.
Step 1: Check License Status
Query the Agent's license status endpoint directly:
curl http://127.0.0.1:7443/license/status
The response tells you exactly what the Agent knows:
{
"valid": false,
"tier": "starter",
"expires_at": "2026-03-01T00:00:00Z",
"reason": "expired"
}
Common reason values: expired, server_ip_mismatch, not_found, verification_failed.
Step 2: Check the License Cache
The Agent caches the last successful license verification:
cat /etc/opterius/license-cache.json
This shows the last known-good state. If the cache is stale or empty, the Agent could not reach opterius.com for re-verification.
Common Causes and Fixes
License expired. The most common cause. Renew at opterius.com. After payment processes, restart the Agent to trigger an immediate re-check:
systemctl restart opterius-agent
Server IP changed. Licenses are tied to a server IP. If your server's IP changed (VPS migration, IP reassignment), the Agent will report server_ip_mismatch. Fix: log in to opterius.com → Dashboard → Licenses, find your license, and click Move to update the registered IP to the new one. Then restart the Agent.
Agent cannot reach opterius.com. The Agent verifies licenses by calling https://opterius.com/api/license/verify. If outbound HTTPS is blocked, verification fails. Test:
curl https://opterius.com/api/license/verify
If this times out or is refused, your server's firewall is blocking outbound port 443. Allow it:
# ufw
ufw allow out 443/tcp
# iptables
iptables -I OUTPUT -p tcp --dport 443 -j ACCEPT
Many cloud providers (Linode, AWS, etc.) also have external firewall rules (security groups / firewall rules in the control panel) separate from the OS firewall — check those too.
Free plan account limit. If you are on the Free plan and have 5 accounts, creating a 6th will return 403 with account_limit_reached (not license_required). Upgrade your plan or delete an unused account.
Force Re-Verification
Restarting the Agent triggers an immediate license check on startup — it does not wait for the next scheduled verification interval:
systemctl restart opterius-agent
journalctl -u opterius-agent -n 20
The logs will confirm whether the license check passed or failed and why.