Licensing and clock behaviour

Understand on-premises licence files, licence states and their effect on API write permissions.

Last updated:

On this pageInstallation modesOn-premises licence file workflowStates and write permissionAPI checksClock and usage records

Installation modes

GIS_MOD=dedicated is on-premises operation with an installation licence. GIS_MOD=saas is centrally managed operation for organisation access and allowances. An unset value defaults to dedicated.

manage.py kurulum-kimligi prepares the installation identity and sets its mode from the environment if the database mode is empty. Later runs do not change an assigned mode. Writes are blocked when the environment mode and stored installation mode differ. Run the API service and administration commands with the same environment settings.

On-premises licence file workflow

  1. Complete the schema and installation identity steps in Installation.
  2. Generate a request file:

bash python3 manage.py talep-uret talep.sosotalep

  1. Apply the licence file issued for this installation:

bash python3 manage.py lisans-yukle lisans.sosolisans

  1. Check the result:

bash python3 manage.py lisans-kontrol

Applying the file verifies its signature, format, installation identity, mode and relevant date fields. A file issued for another installation cannot be used. Editing the file manually does not create new rights or extend its duration.

Multiple licence records may be stored. Among records that have started and can be reverified, the latest start date is selected; ties use the newest record order. Loading a future-dated file does not activate it immediately. Do not assume an old file automatically extends an expired newer licence.

States and write permission

Technical state Write behaviour
lisanssiz No active file, or its start time has not arrived; data writes are disabled.
gecerli Writes are allowed subject to role, module and quota rules.
uyari Renewal period; writes continue.
ek_sure Writes continue until the grace-period end specified in the file.
salt_okunur Licence and grace period have ended; data writes are disabled.
guncelleme_disi Application build date exceeds updates_until; writes are disabled.
acil Writes are allowed until the valid emergency extension expires.

Warning and grace-period durations come from the licence file; do not assume a fixed renewal calendar. Expired update rights take precedence over an emergency extension; the extension does not override that state.

manage.py lisans-kontrol performs a read-only evaluation. --derleme AAAA-AA-GG supplies the application date to evaluate and --simdi ZAMAN the instant to evaluate. These options do not change the running application's clock or licence.

Exit code Meaning
0 Writes enabled. The managed installation-level state in SaaS also returns this code.
1 Writes disabled.
2 Outside update entitlement.
3 Environment and stored installation modes do not match.

An installation-level 0 in SaaS does not mean every organisation has access. Organisation expiry, enforced read-only state and suspension are evaluated separately.

API checks

The server decides whether data may be written in addition to checking roles. An enabled interface button is not proof of permission. A read-only rejection usually returns 403 with kod: "lisans_salt_okunur". The licence rejection envelope contains detail, kod and alan; alan may be null.

Viewing, searching and permitted output endpoints remain available in read-only mode. Project name, description and archived fields, and authorised user administration, are evaluated separately. Project coordinate-system, module and other data settings are not covered by this metadata exception. Organisation suspension may also block sign-in and administration.

The following endpoints are registered only in dedicated mode and require a super administrator session. They return 404 in SaaS because they are not registered there.

Method and endpoint Function
GET /api/lisans Reads the current installation licence state and usage.
GET /api/lisans/talep Downloads the request file.
GET /api/lisans/kullanim-raporu?ay=AAAA-AA Downloads a monthly report from recorded measurements.
POST /api/lisans/dosya Uploads a licence through the multipart file field.
POST /api/lisans/saat-duzeltme Uploads a signed clock-correction file through file.
POST /api/lisans/acil-kod Applies the emergency code supplied in the JSON kod field.

Licence and clock-correction files accept up to 64 KiB. Renewal and clock-correction endpoints remain available to authorised administrators in read-only mode. Use Authentication and Error codes together.

Clock and usage records

Licence decisions use database system time and persistent clock observations. Moving the system clock backwards does not restart the entitlement period; previously observed time affects the decision. Browser time is not the source for licence decisions.

Apply a signed correction file with:

python3 manage.py saat-duzelt saat.sososaat

System time must lie within the interval accepted by the file. If the clock epoch changes during a transaction, the server retries the decision; if unresolved, it may return 503 with saat_donem. Do not treat that response as success.

kullanim-kaydet stores the day's first measurement; repeated calls do not produce another measurement for the same day. Monthly reports include only recorded days. telemetri-gonder does not install a scheduler; your operations process determines execution frequency. Submission failure does not alter licence decisions; disabled submission makes no network request. This usage submission is separate from project-event webhooks.