# System Preferences

You can use **Management Dashboard** -> **Settings** -> **System Preferences** for setting up rules and configuring your tenant.

<figure><img src="https://3057647601-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbTY7EwZtYYQYC6GOcdTj%2Fuploads%2Fgit-blob-915ffd3d067e7de9bb078f18fded23e3621639f8%2Fsystem_preferences.png?alt=media" alt=""><figcaption></figcaption></figure>

### AI

<table><thead><tr><th width="230">Setting</th><th width="320">Description</th><th width="120">Possible values</th><th width="110">Default value</th></tr></thead><tbody><tr><td><code>openAiApiToken</code></td><td>To start using AI when working with Emporix, you have to use an OpenAI token to establish the connection between the two systems. To configure the connection you either need an active account on <a href="https://platform.openai.com/">OpenAI Platform</a>, or you can use a token provided directly by Emporix.<br><br>If you have your own OpenAI account, add the API token (API Key) from it as an Open AI API token. When the token is configured, you can start using AI.<br>If you don't provide your own OpenAI token, the Emporix one is used with the following limits: 3 mln input tokens and 1 mln output tokens. If you reach the limit, you have to provide your own OpenAI token to use the feature again.<br><br>Emporix uses the gpt-4o-mini model by default.<br>If you want to use your own OpenAI account with a different AI model please contact us at support@emporix.com to negotiate the model and usage.<br>To check the available AI models, see the <a href="https://platform.openai.com/docs/models/embeddings">OpenAI - Models</a> documentation.</td><td></td><td></td></tr></tbody></table>

### Coupons

<table><thead><tr><th width="230">Setting</th><th width="320">Description</th><th width="120">Possible values</th><th width="110">Default value</th></tr></thead><tbody><tr><td><code>maxNumberOfCouponsPerCart</code></td><td>Set a rule for the number of coupons that can be used per cart. You can configure the maximum number of coupons with the value field. If the field is empty, the default value is 1 which means only 1 coupon can be added to the cart.</td><td>any number</td><td>1</td></tr><tr><td><code>couponPermanentDelete</code></td><td>Set your preferences for deleting coupons. If you don't set the property or set it to false, the delete operation only flags a coupon as deleted. You can't create or import a coupon with the same ID (code).<br><br>If you want the behavior to remove a coupon permanently from the database, set the property to true. It is then possible to create or import a coupon with the same ID (code).</td><td>true/false</td><td>false</td></tr><tr><td><code>enableCouponCodeCaseSensitivity</code></td><td>Decide if your coupon codes should be saved both in lower and upper case or not. If you set the preference to <code>true</code>, the coupons can be saved in both formats. By default, the coupon code is saved in upper case only.</td><td>true/false</td><td>false</td></tr></tbody></table>

### Approvals

<table><thead><tr><th width="230">Setting</th><th width="320">Description</th><th width="120">Possible values</th><th width="110">Default value</th></tr></thead><tbody><tr><td><code>approval.default_expiryDays</code></td><td>Set the expiry date for an approval. If the property is empty, the default value is used.</td><td>any number</td><td>10</td></tr><tr><td><code>signUp.enableAccountCreationEmailConfirmation</code></td><td>Enable email notifications about new accounts as by default, the newly created customers do not receive any welcome emails after their accounts are created. To enable the welcome emails, set the value to true.</td><td>true/false</td><td>false</td></tr><tr><td><code>customer.passwordreset.redirecturl</code></td><td>Register the URL of the page for resetting the password of the customer.</td><td></td><td></td></tr></tbody></table>

### Cart

<table><thead><tr><th width="230">Setting</th><th width="320">Description</th><th width="120">Possible values</th><th width="110">Default value</th></tr></thead><tbody><tr><td><code>cartItemValidationSkipEffectiveAmount</code></td><td><p>With default setup, during adding an item to cart, it is mandatory to provide values to the following price fields:</p><ul><li>priceID</li><li>effectiveAmount</li><li>originalAmount</li><li>currency</li></ul><p><br>You can set the effectiveAmount as optional, if you don't need it during this operation in your use case.<br>If you set the value to true, a value of effectiveAmount property is not required to add an item to a cart.<br><br>For more information about adding items to cart, see <a href="https://app.gitbook.com/s/d4POTWomuSS7d3dnh4Dg/api-guides/checkout/cart">API Reference</a>.</p></td><td>true/false</td><td>false</td></tr><tr><td><code>cartItemValidationSkipOriginalAmount</code></td><td><p>With default setup, during adding an item to cart, it is mandatory to provide values to the following price fields:</p><ul><li>priceID</li><li>effectiveAmount</li><li>originalAmount</li><li>currency</li></ul><p><br>You can set the originalAmount as optional, if you don't need it during this operation in your use case. If you set the value to true, a value of originalAmount property is not required to add an item to a cart.<br><br>For more information about adding items to cart, see <a href="https://app.gitbook.com/s/d4POTWomuSS7d3dnh4Dg/api-guides/checkout/cart">API Reference</a>.</p></td><td>true/false</td><td>false</td></tr><tr><td><code>cartItemValidationSkipCurrency</code></td><td><p>With default setup, during adding an item to cart, it is mandatory to provide values to the following price fields:</p><ul><li>priceID</li><li>effectiveAmount</li><li>originalAmount</li><li>currency</li></ul><p><br>You can set the currency as optional, if you don't need it during this operation in your use case. If you set the value to true, a value of currency property is not required to add an item to a cart.<br><br>For more information about adding items to cart, see <a href="https://app.gitbook.com/s/d4POTWomuSS7d3dnh4Dg/api-guides/checkout/cart">API Reference</a>.</p></td><td>true/false</td><td>false</td></tr><tr><td><code>cartItemValidationSkipExistingItemsValidationOnAddToCart</code></td><td>Enable skipping validation for items that already exist in the cart when a new item is added. This setting improves performance for carts with multiple items.<br><br>For more information about adding items to cart, see <a href="https://app.gitbook.com/s/d4POTWomuSS7d3dnh4Dg/api-guides/checkout/cart">API Reference</a>.</td><td>true/false</td><td>false</td></tr><tr><td><code>enableExternalPrices</code></td><td>Enable the external sourcing of prices or products at a cart level. By setting the setting to true, you can use a dedicated application for complex price calculation or product management to communicate with the Cart Service and overwrite the pricing information for a specific cart. For more information about external pricing and products, see the <a href="../../extensibility-and-integrations/extensibility-cases/external-pricing-and-products">External Pricing and Products</a> documentation.</td><td>true/false</td><td>false</td></tr><tr><td><code>populateProductDetailsOnAddToCart</code></td><td>Decide if products details should be automatically populated upon adding to cart operations. When set to true, the system displays the details.</td><td>true/false</td><td>false</td></tr><tr><td><code>enableLegalEntityAddressFallbackInCart</code></td><td>Enable fallback to legal entity address in cart when no address is provided in the request.</td><td>true/false</td><td>false</td></tr><tr><td><code>allowAnonymousCheckoutWithExistingCustomerEmail</code></td><td>Allow anonymous checkout when the customer provides an email that already exists in the system. When set to true, checkout can proceed with an existing customer email without requiring the user to log in.</td><td>true/false</td><td>false</td></tr></tbody></table>

### Products

<table><thead><tr><th width="230">Setting</th><th width="320">Description</th><th width="120">Possible values</th><th width="110">Default value</th></tr></thead><tbody><tr><td><code>enableProductCategoryAssignmentValidation</code></td><td>Validate that a product exists before it can be assigned to a category. When enabled, the system checks product existence during category assignment.</td><td>true/false</td><td>false</td></tr><tr><td><code>allowToSkipRelatedProductsValidation</code></td><td>Allow skipping validation of related products. When set to true, related products validation can be bypassed where applicable.</td><td>true/false</td><td>false</td></tr></tbody></table>

### Index

<table><thead><tr><th width="230">Setting</th><th width="320">Description</th><th width="120">Possible values</th><th width="110">Default value</th></tr></thead><tbody><tr><td><code>indexing_siteAwareFieldsStrategy</code></td><td>Choose the appropriate indexing strategy to index site-aware properties, such as price and availability.<br><br>Specifically, if you have multiple sites in the system, you can choose if you want to have a single index or create individual indices separately for each site.<br><br>MERGE strategy creates a single index with site-aware properties mapped as sitePrices and siteAvailabilities. The properties are maps where a key is a site code and a value is a price or availability object respectively.<br><br>SPLIT strategy creates separate indices for each site. This approach provides more flexibility but also may impact performance when the number of indices is high.</td><td><p>MERGE/</p><p>SPLIT</p></td><td>MERGE</td></tr></tbody></table>

### Order

<table><thead><tr><th width="230">Setting</th><th width="320">Description</th><th width="120">Possible values</th><th width="110">Default value</th></tr></thead><tbody><tr><td><code>enableOrderAddressPropagation</code></td><td>Decide whether the address provided by a customer upon submitting an order is automatically added and saved as the customer address.</td><td>true/false</td><td>true</td></tr></tbody></table>

### Customer

<table><thead><tr><th width="230">Setting</th><th width="320">Description</th><th width="120">Possible values</th><th width="110">Default value</th></tr></thead><tbody><tr><td><code>customerOnHoldOnCreation</code></td><td>Decide if newly created customers are by default initially set as on hold. This gives you an opportunity to first complete all the configuration and access rights for a new customer before manually activating their account.</td><td>true/false</td><td>false</td></tr><tr><td><code>customerActiveOnCreation</code></td><td>Decide if newly created customers are by default already set to active. When you create a new customer, you can change the setting manually according to the current needs.</td><td>true/false</td><td>true</td></tr><tr><td><code>companyContactPropagation</code></td><td>Define how company contact assignments are propagated within a company hierarchy: DOWNWARD (from parent to subsidiaries), UPWARD (from subsidiaries to parent), or DISABLED (no propagation). Propagation happens only at the moment of assignment - creating the contact in the selected company also creates corresponding contacts in related companies according to the chosen direction.</td><td><p>DOWNWARD</p><p>UPWARD</p><p>DISABLED</p></td><td>UPWARD</td></tr></tbody></table>

### Access Permissions/Restrictions

<table><thead><tr><th width="230">Setting</th><th width="320">Description</th><th width="120">Possible values</th><th width="110">Default value</th></tr></thead><tbody><tr><td><code>enableSyncBetweenRestrictionsAndSiteCodes</code></td><td>Decide if the restrictions applied on entities are identical to the sites you defined in your tenant. If this setting is set to true, the restrictions list contains the same values as the available <code>siteCodes</code>.</td><td>true/false</td><td>true</td></tr><tr><td><code>restrictions</code></td><td>A list of applied restrictions/permissions on the site-aware entities in your tenant. When the <code>enableSyncBetweenRestrictionsAndSiteCodes</code> is set to true, the list is identical with the available sites. To define custom restrictions and use them later to managing access control, disable the synchronization first.</td><td>text</td><td>empty []</td></tr></tbody></table>

### SSO Token Exchange Authentication

<table><thead><tr><th width="230">Setting</th><th width="320">Description</th><th width="120">Possible values</th><th width="110">Default value</th></tr></thead><tbody><tr><td><code>ssoCustomerAutoprovisioningDisabled</code></td><td>Customer autoprovisioning takes care of automatic creation of a customer account during the SSO token exchange authentication - if a new customer tries to log in but their account does not currently exist in the Emporix system. You can change this setting to <code>true</code> to disable autoprovisioning, if you pre-synchronize your customer databases and expect all user data to already be in the system before a first-time login. When the autoprovisioning is turned off and an unknown customer attempts to log in, the customer account is not created and the system returns a `404` error.</td><td>true/false</td><td>false</td></tr><tr><td><code>ssoCustomerIdentifierField</code></td><td>Specify if a customer is identified by either <code>EMAIL</code> or <code>SUBJECT</code> during the token exchange. Email is the standard identifier, but for the cases when a different identifier is associated with a customer account (such as user name, ID or other), the introspection endpoint returns the `sub` parameter for identifying the `subject` field.</td><td>EMAIL/SUBJECT</td><td>EMAIL</td></tr></tbody></table>
