License and troubleshooting
SmartDecision needs a license key to run. The key is checked on your server only. The app never contacts us, so it works without internet access.
Entering a key
Your license key is in your welcome email. It is one long line that starts with SD1.. The same key
also downloads SmartDecision and its updates.
- On first start, SmartDecision shows only a screen to add the key. An admin pastes it there. Other members are asked to get an admin to add it.
- Later, an admin replaces it in Settings → License → Replace license key.
- On the server, if you installed with
--license=KEY, the key is set asSMARTDECISION_LICENSEin~/.smartdecision/.env. It then overrides the key in the app, and Settings shows that it is set on the server. To change it, edit.envand restart:
cd ~/.smartdecision
sudo docker compose up -d An admin can also remove the key in Settings. Without a key, SmartDecision shows only the key screen and the Resolve API stops answering. Adding a key restores everything at once.
No key yet? Request a trial, which is a license key with an end date, or see Pricing.
Limits
A key can limit the number of users and decisions. Settings → License shows your limits and your usage.
- Users count active members plus pending invitations.
- Limits only stop you adding users and decisions. Nothing that exists is ever blocked by a limit.
- At a limit you see "Your <plan> license allows 10 users. Contact us to raise the limit." (or decisions). Email support to change your plan.
Renewing
When you renew, you get a new key with a later end date. An admin adds it in Settings → License → Replace license key. A new key restores everything at once, whatever stage the old one had reached. There is no restart.
Every member sees a notice in the 30 days before the license expires.
Expiry stages
An expired license doesn't stop SmartDecision at once. It steps down in stages, counted in observed days: days on which SmartDecision was running and saw a new calendar day (UTC). Days while the server is off don't count. Moving the server clock doesn't change the count.
| Stage | When | The app | Resolve API |
|---|---|---|---|
| Active | Until the end date | Everything works. A notice shows in the last 30 days. | Works |
| Grace | Observed days 1 to 14 after expiry | Everything works. A banner counts down. | Works, with the SmartDecision-License header |
| Read-only | Observed days 15 to 30 | You can read, but not change. See Read-only. | Works, with the header |
| Cutoff | Observed day 31 on | Still read-only. | 402 License expired |
Trial keys can set shorter stages, so that read-only and cutoff come a few days after the trial ends. The banners always show the days left for your key.
The Resolve API reports the stage in the SmartDecision-License response header. See
License header.
What works in read-only
From the read-only stage on, and also after cutoff, you can still:
- open and read everything: projects, decisions, tests, members and the activity log,
- run decision tests,
- remove members, revoke invitations and revoke secret keys, so you can always take access away,
- update your own account,
- add, replace or remove the license key.
Creating or changing projects, decisions, tests, invitations and secret keys is refused until a new key is added. The Resolve API keeps answering until cutoff.
Messages and banners
In the app, a refused action shows the message from the server. Here is what each one means.
| You see | It means | What to do |
|---|---|---|
| "The license expires on <date>, in N days." | The license is active and ends within 30 days. | Renew, and add the new key when it arrives. |
| "The license expired on <date>. Editing stops in N days and decisions stop resolving in M days." | Grace stage. Everything still works. | Renew and add the new key before editing stops. |
| "The license has expired, so this workspace is read-only. Decisions stop resolving in N days." | Read-only stage. The Resolve API still answers. | Renew and add the new key before decisions stop resolving. |
| "The license has expired, so this workspace is read-only and decisions no longer resolve." | Cutoff. The Resolve API answers 402 License expired. | Renew and add the new key. Everything comes back at once. |
| "This workspace needs a license key. An admin can add one." | No key is installed. | An admin adds the key from your welcome email. |
| "The installed license key is not valid. An admin can replace it." | The stored key failed its check. | An admin pastes the key again from the welcome email. |
| "That key is not valid. Check that it was copied completely." | The key you pasted is incomplete, changed, or not a SmartDecision key. | Copy the whole key again. Spaces and line breaks from pasting are fine. |
| "The license is set on the server with SMARTDECISION_LICENSE and is not valid." | The key in ~/.smartdecision/.env is wrong. | Fix it in .env, then run sudo docker compose up -d there. |
| "Your <plan> license allows N users." (or decisions) | You reached a limit of your key. | Remove unused members or invitations, or contact us to raise the limit. |
| "The server clock moved ..." or "The server clock ... is behind the last time SmartDecision saw" | Shown to admins after the server's clock changed. The expiry count is not affected. | Check the server's time settings. Nothing to do in SmartDecision. |
If the end date was wrong, or you need more time, the only fix is a new key with a later end date. Email support.
Troubleshooting
AI is unavailable
Describe a policy is turned off when SmartDecision can't reach the AI. SmartDecision checks this by
calling LLM_URL/models. Common causes:
- You installed without AI. Run the installer again with
--llm=builtinor--llm=external. -
The built-in AI container is not running. Check with
sudo docker compose psin~/.smartdecision, and read its output withsudo docker compose logs llm. - The server has less memory than the built-in AI needs. See Requirements.
-
Your own AI server is unreachable from the container, or its key is wrong. Use
host.docker.internalinstead oflocalhostfor a server on the same host. Change the settings in.envand runsudo docker compose up -d.
Resolve requests fail
400 Invalid Client Secret: send the key itself inAuthorization, withoutBearer. Check that it wasn't revoked.404 Decision not found: check the id, and that a project-scoped key belongs to the decision's project.403 Inactive decision: set the decision to active in its details.402: see Expiry stages.
The full list is in Errors.
Lost admin password
On the server, open a new shell and run:
smartdecision admin cpass The app doesn't open
- Check that the containers are running:
sudo docker compose psin~/.smartdecision. - Check that your firewall allows port 8080.
- Read the app's log in
~/.smartdecision/all.log.
Lost license key
The download portal at get.smartdecision.io can resend it.
Contact support
Email support@smartdecision.io for help with installing,
upgrading, your license, or a bug. Tell us what you were doing, the exact message you saw, and include the
relevant lines from ~/.smartdecision/all.log.
For prices and plans, see Pricing. To try SmartDecision, request a trial.