# Server Configuration Information

### Global properties

{% columns %}
{% column %}

* **app.name** — Sets the platform name.
  {% endcolumn %}

{% column %}

* **app.theme** — Sets the platform UI theme (`Red` or `Blue`).
  {% endcolumn %}
  {% endcolumns %}

### User properties (app.user)

{% columns %}
{% column %}

* **validation-code-hours-lifetime** — Sets the lifetime of the email validation code.
* **invitation-hours-lifetime** — Sets the lifetime of an account invitation.
* **seconds-between-validations** — Sets the delay between validation requests.
  {% endcolumn %}

{% column %}

* **profile-phone** `boolean` — Requires a phone number during registration.
* **profile-phone-default-region** — Sets the default phone region (`UA`, `FR`, `GB`).
* **email-validation-code-length** — Sets the length of the email validation code.
  {% endcolumn %}
  {% endcolumns %}

### Locale properties (app.locales)

{% columns %}
{% column %}

* **supported** — Lists the supported locales (`en`, `ru`, `uk`).
* **defaultLocale** — Sets the default locale for invitations.
* **defaultCountry** — Sets the default country when the header has no coordinates.
  {% endcolumn %}

{% column %}

* **defaultAsLanguage** — Uses the default locale as the browser language and ignores geolocation and browser language.
* **timezone** — Sets the default time zone for user creation, email dates, and PDF dates.
  {% endcolumn %}
  {% endcolumns %}

### Password policy (app.user.password-policy)

{% columns %}
{% column %}

* **min-length** — Sets the minimum password length.
* **max-length** — Sets the maximum password length.
* **uppercase** — Requires uppercase letters.
* **lowercase** — Requires lowercase letters.
* **digit** — Requires digits.
* **special-symbol** — Requires at least one special character: `! @ # $ % ^ & * ( ) _ + - = [ ] { } |`.
* **repeat-character** — Disallows repeating characters.
  {% endcolumn %}

{% column %}

* **allow-whitespace** `boolean` — Allows whitespace in passwords.
* **prevent-common-passwords** `boolean` — Blocks forbidden passwords. See the `BannedPassword` database table.
* **prevent-common-words** `boolean` — Blocks forbidden words. See the `BannedPasswordWord` database table.
* **expiration-days** — Sets the password expiration period in days.
* **notify-before-days** — Sets how many days before expiration to send a notification.
* **prevent-reuse-months** — Prevents password reuse for a set number of months.
* **prevent-reuse-count** — Prevents reuse of a recent number of passwords.
  {% endcolumn %}
  {% endcolumns %}

### Session policy (app.user.session-policy)

{% columns %}
{% column %}

* **session-hours** — Sets the session duration during the idle period.
* **single-session** `boolean` — Enforces a single session per user.
* **single-ip-session** `boolean` — Enforces a single session per IP.
* **max-login-attempts** — Sets the maximum number of login attempts before locking.
  {% endcolumn %}

{% column %}

* **max-attempts-timeout-minutes** — Sets the lock duration after multiple failed login attempts.
* **allowed-ips** `array` — Lists the allowed IP addresses.
* **blocked-ips** `array` — Lists the blocked IP addresses.
  {% endcolumn %}
  {% endcolumns %}

{% hint style="info" %}
Each property can be set via an environment variable. Replace `.` with `_` and use uppercase.
{% endhint %}

Example:

```bash
APP_NAME=DocStudio
APP_USER_PASSWORD-POLICY.UPPERCASE=2
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://support.docstudio.com/docstudio-docs/docstudio-for-developers/server-configuration/server-configuration-information.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
