License Status
Purpose
Every AI API Mapper installation runs under a license file issued by Coded Projects: an evaluation license, or a commercial license for your edition. The Runtime reads that file, checks it, and reports what it found. The Portal shows the result as a yellow bar at the top of every screen, including the sign-in page.
A license problem never stops the platform. A missing, invalid or expired license does not block a sign-in, a tool call or a restart: the platform keeps serving, records the condition in the audit trail, and shows the bar until the license is fixed. The license is how your entitlement is recorded, and the bar is how the platform tells you honestly where you stand.
What The Yellow Bar Means
| Message | What it means | What to do |
|---|---|---|
| No license installed. AI API Mapper is running unlicensed. Contact your administrator. | The Runtime found no license file. | Install your license file (see Installing Or Replacing A License). If you do not have one, request an evaluation license or contact Coded Projects. |
| The installed license is not valid (reason). Contact your administrator. | A file is installed, but it is not a license this Runtime accepts. The reason code says why. | Look up the reason in Reason Codes. |
| The license expired on date. Contact Coded Projects to renew. | The license was genuine and has passed its end date. | Contact Coded Projects for a renewal, then install the new file. |
| Evaluation license — not for production use. Expires on date. | An evaluation license is installed and valid. | Nothing, while you evaluate. For production use, obtain a commercial license. |
| Non-production license. Not for production use. | A commercial license issued for non-production use (staging, testing) is installed. | Nothing on a non-production installation. On a production installation, install a production license. |
| The license expires on date. | A commercial license is valid but has 30 days or fewer left. | Arrange the renewal with Coded Projects before that date. |
| (no bar) | A valid commercial license with more than 30 days left — or the Portal could not reach the Runtime. | Nothing. If the Runtime is unreachable, that shows elsewhere in the Portal and is a different problem. |
The bar updates by itself: when a license expires, or a new file is installed, the Portal shows the new state within seconds, without a sign-out or a page reload.
The License Page
Every signed-in user can open License from the bottom of the sidebar, beside the version numbers. It shows the license state, edition, validity dates and days remaining, together with how many Runtime instances are reporting their license and whether they all run the same one. It never shows whom the license was issued to.
Global administrators (sessions holding tenants:read@global, as for the Tenants screen) also see View each
instance's license. That screen lists every Runtime instance with the license it runs: the licensee, the license
number, the edition, the expiry date, the signing key, the number of Runtime instances the contract covers, and when
the instance last reported. The contract count is shown for reference only and is never enforced.
Several Runtime Instances
Each Runtime instance reads its own /license/license.json, so in a deployment with several instances they can
disagree. Usually this means one instance started without the license folder mounted, or with an old file.
- The Portal shows the worst state among the instances. If one of three instances has no license, the bar says "No license installed", even though the other two are licensed, because that one needs fixing.
- The License page says when instances disagree. On the per-instance screen, each instance that differs from the shown state is highlighted.
- Fix it by installing the same license file on every instance. Each one picks it up within a minute.
- Instances report at startup, whenever their license changes, and every five minutes. An instance that has not reported for 15 minutes (scaled down or stopped) is shown as Not reporting and no longer counts. After 7 days it disappears from the list.
- The sign-in page cannot ask the Portal and shows what one instance says. After sign-in, the bar shows the worst state across all instances.
Reason Codes
When the bar says a license is not valid, the reason in brackets is one of these.
| Reason | Meaning | What to do |
|---|---|---|
Malformed |
The file is not a license file: it is damaged, truncated, too large, or not the file you were sent. | Install the original file again, exactly as received. Do not open and re-save it in an editor that changes its content. |
UnsupportedFormat |
The file is a license in a format this Runtime version does not know. | Upgrade the Runtime to the current release. |
UnsupportedAlgorithm |
The file claims a signature type the Runtime does not accept. | Ask Coded Projects for a replacement file. |
UnknownKey |
The license was signed with a key this Runtime version does not trust. Usually the license is newer than the Runtime. | Upgrade the Runtime to the current release. If it persists on the current release, contact Coded Projects. |
BadSignature |
The signature does not match the content: the file was modified after it was issued. | Install the original, unmodified file. |
KeyIdMismatch |
The file's signing-key information was altered. | Install the original, unmodified file. |
WrongProduct |
The license was issued for a different Coded Projects product. | Check you installed the AI API Mapper license, not another product's. |
KeyNotAuthorizedForType |
The license's edition could not have been issued with the key that signed it. | Ask Coded Projects for a replacement file. |
NotYetValid |
The license is genuine but its start date is in the future. | Nothing — the bar clears by itself at the start date. If that date is wrong, contact Coded Projects. Check the host's clock is correct. |
InternalError |
The Runtime could not read or check the file — typically a permissions problem on the license folder. | Check that the file is readable by the Runtime container. If it is, contact Coded Projects support with the Runtime logs. |
Installing Or Replacing A License
The Runtime reads the license from /license/license.json inside its container. In a Docker Compose installation that
folder is a read-only bind mount of a folder on the host; the compose file names it with LICENSE_DIR:
runtime-host:
volumes:
- ${LICENSE_DIR:-./license}:/license:ro
Check the new file first, with the Runtime image you are running, so a bad file never replaces a good one:
docker run --rm -v "/path/to/folder/with/the/new/file:/license:ro" \ <registry>/codedprojects/ai-apimapper-runtime-host:<tag> --verify-license /license/license.jsonIt prints the same status the Portal would show and exits with
0for a valid license,2for an expired one, and3for a missing or invalid one. It starts nothing and needs no database.Replace the file in the license folder, keeping the name
license.json. Copy it to a temporary name first and rename it over the old one, so the Runtime never reads a half-written file.Wait up to a minute. The Runtime checks the file every 60 seconds and picks up the new one without a restart. The Portal's bar changes as soon as it does.
The file name you received (for example ACME-SpA-LIC-….license) does not matter; its content does. Rename it to
license.json.
To move from an evaluation to a commercial license, replace the evaluation file with the commercial one in the same way. Nothing else changes.
Checking The Status Directly
The same status is available without signing in:
curl https://<your-gateway>/runtime/license
{
"status": "ValidCommercial",
"reason": null,
"licenseType": "Team",
"isEvaluation": false,
"productionAllowed": true,
"validFrom": "2026-10-01T00:00:00+00:00",
"expiresAt": "2027-09-30T23:59:59+00:00",
"daysRemaining": 187,
"checkedAt": "2027-03-27T09:14:02+00:00"
}
status is one of ValidCommercial, ValidEvaluation, Missing, Invalid and Expired. The endpoint reports the
license's state only: it never shows whom the license was issued to, the license number or the licensed instance
count. For a missing or invalid license every field after reason, except checkedAt, is empty.
Monitoring
Each Runtime instance reports its own license, so an instance started without the license folder mounted shows up on its own.
- Metrics:
apimapper_runtime_license_state{status="…"}(1 for the current status) andapimapper_runtime_license_days_remaining. A useful alert is a status ofMissing,InvalidorExpired, or fewer than 30 days remaining. - Audit trail:
license.status.degradedis recorded at startup and every hour while the license is missing, invalid or expired, andlicense.status.changedwhenever the state changes. Both are platform-level entries in thelicensingcategory and reach your configured audit targets.
