# Remote configuration

The remote configuration stores configurations that affect only the fulfillmenttools apps and clients, such as Backoffice or the Operations app. These configurations don't change behavior in the backend.

The remote configuration is a key-value store. It allows for storing different values and value types, each identified by a unique `key`. Each entry can also include a specific `scope` that restricts its availability to certain user groups or clients. This ensures that configurations are only available in the intended context.

{% hint style="warning" %}
**Attention**: This filter is not an authorization. Every user can call every remote configuration.
{% endhint %}

## Available remote configurations

### Web clients

{% tabs %}
{% tab title="Backoffice" %}
Group: `BACKOFFICE`

| Key                                  | Type      | Example | Effect                                                                                                                                                                                                            |
| ------------------------------------ | --------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `INBOUND_VIEW_ENABLED`               | `BOOLEAN` | `true`  | Makes the inbound view visible in the facility view.                                                                                                                                                              |
| `SENTRY_ENABLED`                     | `BOOLEAN` | `true`  | If set to `false`, the system stops tracking errors in `pre` and `prd` tenants. By default, error and analytics data are tracked on all tenants.                                                                  |
| `CHANNEL_ALLOCATION_VIEW_ENABLED`    | `BOOLEAN` | `true`  | Makes the channel inventory tab visible in the stock overview.                                                                                                                                                    |
| `STORAGE_LOCATION_VIEW_ENABLED`      | `BOOLEAN` | `true`  | Makes the storage location view visible in the facility view.                                                                                                                                                     |
| `STOCK_MODIFICATION_ENABLED`         | `BOOLEAN` | `true`  | Allows adding products and stock at a location and changing stock in the storage location view. It also allows changing stock on the stock information card and storage location card in the listing detail view. |
| `PROCESS_DETAILS_EDIT_ORDER_ENABLED` | `BOOLEAN` | `true`  | Allows editing orders in the order view.                                                                                                                                                                          |
| `SERVICE_VIEW_ENABLED`               | `BOOLEAN` | `true`  | Makes the service tab visible in the task overview. The `custom-service` feature must also be active.                                                                                                             |
| `SERVICE_JOBS_ENABLED`               | `BOOLEAN` | `true`  | Makes the service tab visible. The `custom-service` feature must also be active.                                                                                                                                  |
| {% endtab %}                         |           |         |                                                                                                                                                                                                                   |

{% tab title="Operations web app" %}
Group: `OPERATIONS_WEB_APP`

<table><thead><tr><th>Key</th><th>Type</th><th>Example</th><th>Effect</th></tr></thead><tbody><tr><td><code>SERVICE_VIEW_ENABLED</code></td><td><code>BOOLEAN</code></td><td><code>true</code></td><td>Makes the service tab visible in the task overview. The <code>custom-service</code> feature must also be active.</td></tr><tr><td><code>SERVICE_JOBS_ENABLED</code></td><td><code>BOOLEAN</code></td><td><code>true</code></td><td>Makes the service tab visible. The <code>custom-service</code> feature must also be active.</td></tr><tr><td><code>SHORTPICK_REASON_MANDATORY</code></td><td><code>BOOLEAN</code></td><td><code>true</code></td><td>If set to <code>true</code>, a single order pick can only be completed if a short-pick reason has been selected for each short-picked item.</td></tr><tr><td><code>NEW_PRINT_OVERVIEW_ENABLED</code></td><td><code>BOOLEAN</code></td><td><code>true</code></td><td>Uses the new print overview.</td></tr><tr><td><code>NEW_PACKING_ENABLED</code></td><td><code>BOOLEAN</code></td><td><code>true</code></td><td>Uses the new packing process.</td></tr><tr><td><code>SINGLE_PACKING_ENABLED</code></td><td><code>BOOLEAN</code></td><td><code>true</code></td><td>Enables a simplified packing process that does not allow packing multiple packages, as only one packing target container is created.</td></tr><tr><td><code>PREFILL_AMOUNT_HANDLER</code></td><td><code>JSON</code></td><td><code>{"packing": "true"}</code></td><td>Within the new packing view, the item count in the amount handler is prefilled (e.g., <code>5/5</code>) and does not need to be selected by the user. By default, the value is not prefilled (e.g., <code>0/5</code>).</td></tr><tr><td><code>OPERATIONS_POLLING_INTERVALS</code></td><td><code>JSON</code></td><td><pre><code>{
  "pickingOverview": 30000,
  "packingOverview": 30000,
  "restowOverview": 30000,
  "linkedServiceJobsOverview": 30000,
  "serviceJobsOverview": 30000,
  "handoverOverview": 30000
}
</code></pre></td><td>Defines custom polling intervals in milliseconds. The client defaults any value below 5000 to 5 seconds. If a specific view's interval is not defined, the system uses its default value. Only specify the keys for the intervals to be changed.</td></tr></tbody></table>
{% endtab %}
{% endtabs %}

### Mobile clients

{% hint style="info" %}
Some mobile configurations are only available from a specific app version onwards. Check the **Availability** column for version requirements.
{% endhint %}

{% tabs %}
{% tab title="Store Operations app" %}
Group: `OPERATIONS_MOBILE`

| Key                                       | Type      | Example             | Availability               | Effect                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| ----------------------------------------- | --------- | ------------------- | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `SHORTPICK_REASON_MANDATORY`              | `BOOLEAN` | `true`              | v4+                        | If set to `true`, a single order pick can only be completed if a short-pick reason has been selected for each short-picked item.                                                                                                                                                                                                                                                                                                                                                                                                               |
| `MOBILE_POLLING_INTERVAL_RESTOW`          | `INTEGER` | `60`                | v4+                        | Configures the update interval in seconds for open restow items while the screen is active. The minimum value is 5. Values less than 5 are ignored. The default is `60`.                                                                                                                                                                                                                                                                                                                                                                       |
| `PICKING_SCANNING_RULE`                   | `STRING`  | `ARTICLE`           | v4+                        | Value can be one of `ARTICLE` (default), `LOCATION`, `ARTICLE_LOCATION`, or `LOCATION_ARTICLE`. When the value is `ARTICLE`, only the article's barcode can be scanned during picking. For `LOCATION`, only the code of the storage location in which the item is placed can be scanned. For `ARTICLE_LOCATION`, a scan is successful only if the article's code is scanned first, followed by the location's code. For `LOCATION_ARTICLE`, a scan is successful only if the location's code is scanned first, followed by the article's code. |
| `PICKING_SCANNING_TYPE`                   | `STRING`  | `SCAN_NOT_REQUIRED` | v4+                        | Value can be one of `SCAN_NOT_REQUIRED` (default), `MUST_SCAN_FIRST` or `MUST_SCAN_EACH`. When value is `SCAN_NOT_REQUIRED` then scanning is optional during picking. For `MUST_SCAN_FIRST` a line item needs to be successfully scanned at least one time — afterwards, the item count can be increased via the number input field without needing to scan the item again. For `MUST_SCAN_EACH` every single item needs to be scanned during picking.                                                                                         |
| `ENABLE_EAN_CHECK_DIGIT_CALCULATION`      | `BOOLEAN` | `true`              | **DEPRECATED** — before v5 | Enables the app to automatically calculate the check digit for EAN-8 and EAN-13 barcodes if the scanning device doesn't send the complete code. For camera scans or devices that send the complete code, this setting has no effect.                                                                                                                                                                                                                                                                                                           |
| `POLLING_INTERVAL_PICKING_STATUS_UPDATES` | `INTEGER` | `5`                 | v4+                        | Defaults to 5 seconds if not configured. Defines custom polling intervals in seconds for status updates while processing PickJobs.                                                                                                                                                                                                                                                                                                                                                                                                             |
| `PACKING_ITEMS_AUTO_INCREMENT`            | `BOOLEAN` | `FALSE`             | v4+                        | Defaults to false if not configured. Controls if the Item Selection Screen in the App Packing Process will count up all items to the maximum value automatically.                                                                                                                                                                                                                                                                                                                                                                              |
| `PACKING_CONTAINER_TYPE_SCAN`             | `BOOLEAN` | `FALSE`             | v4+                        | Defaults to false if not configured. Controls if the Container-Type Selection in the App Packing Process will show a screen to scan (camera or laser scanner) a container. Otherwise the app defaults to showing a manual-selection-only screen.                                                                                                                                                                                                                                                                                               |
| `MOBILE_POLLING_INTERVAL_PARCEL_LABEL`    | `INTEGER` | `10`                | v4+                        | Defaults to 10 seconds if not configured. Defines custom polling intervals in seconds for parcel label creation in the app's packing and printing process.                                                                                                                                                                                                                                                                                                                                                                                     |
| `POLLING_INTERVAL_ORDER`                  | `INTEGER` | `10`                | v4+                        | Defaults to 10 seconds if not configured. Defines custom polling intervals in seconds for refreshing the orders.                                                                                                                                                                                                                                                                                                                                                                                                                               |
| `ORDER_SWAP_FILTER_SEQUENCE`              | `BOOLEAN` | `FALSE`             | v4+                        | Defaults to `false` if not configured. If set to `true`, the status and type filter sequence will be swapped in the order overview screen.                                                                                                                                                                                                                                                                                                                                                                                                     |
| `HOME_COMPLETED_AS_TASKS`                 | `BOOLEAN` | `TRUE`              | v4+                        | Defaults to `true` if not configured. Defines whether the Home screen widget data for "Completed Facility/User" is shown as tasks or orders.                                                                                                                                                                                                                                                                                                                                                                                                   |
| {% endtab %}                              |           |                     |                            |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |

{% tab title="Operations app" %}
Group: `OPERATIONS_ANDROID`

| Key                                    | Type      | Example             | Availability                 | Effect                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| -------------------------------------- | --------- | ------------------- | ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `android_native_printing_enabled`      | `BOOLEAN` | `true`              | **DEPRECATED** — before v164 | Allows selecting the native Android printing interface when printing documents.                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| `android_zebra_printing_enabled`       | `BOOLEAN` | `true`              | **DEPRECATED** — before v164 | Allows selecting Zebra printers directly from the network when printing documents.                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| `android_use_new_load_units`           | `BOOLEAN` | `true`              | **DEPRECATED** — before v165 | Enables the selection of load units during the picking process.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| `android_calc_ean_check_digit`         | `BOOLEAN` | `true`              | v157+                        | Enables the app to automatically calculate the check digit for EAN-8 and EAN-13 barcodes if the scanning device doesn't send the complete code. For camera scans or devices that send the complete code, this setting has no effect.                                                                                                                                                                                                                                                                                                           |
| `android_use_picking_focus`            | `BOOLEAN` | `true`              | v157+                        | If `true`, the user can only scan the item that's currently in focus during the picking process. If `false`, the user can scan any item in the list. The default value is `true`. This setting requires `android_use_new_picking` to be enabled and has no effect for pick jobs that require scanning a storage location or have barcode validation disabled.                                                                                                                                                                                  |
| `SHORTPICK_REASON_MANDATORY`           | `BOOLEAN` | `true`              | v157+                        | If set to `true`, a single order pick can only be completed if a short-pick reason has been selected for each short-picked item.                                                                                                                                                                                                                                                                                                                                                                                                               |
| `MOBILE_POLLING_INTERVAL_RESTOW`       | `INTEGER` | `60`                | v154+                        | Configures the update interval in seconds for open restow items while the screen is active. The minimum value is 5. Values less than 5 are ignored. The default is `60`.                                                                                                                                                                                                                                                                                                                                                                       |
| `PICKING_SCANNING_RULE`                | `STRING`  | `ARTICLE`           | v165+                        | Value can be one of `ARTICLE` (default), `LOCATION`, `ARTICLE_LOCATION`, or `LOCATION_ARTICLE`. When the value is `ARTICLE`, only the article's barcode can be scanned during picking. For `LOCATION`, only the code of the storage location in which the item is placed can be scanned. For `ARTICLE_LOCATION`, a scan is successful only if the article's code is scanned first, followed by the location's code. For `LOCATION_ARTICLE`, a scan is successful only if the location's code is scanned first, followed by the article's code. |
| `PICKING_SCANNING_TYPE`                | `STRING`  | `SCAN_NOT_REQUIRED` | v165+                        | Value can be one of `SCAN_NOT_REQUIRED` (default), `MUST_SCAN_FIRST`, or `MUST_SCAN_EACH`. When the value is `SCAN_NOT_REQUIRED`, then scanning is optional during picking. For `MUST_SCAN_FIRST`, a line item needs to be successfully scanned at least one time — afterward, the item count can be increased via the number input field without needing to scan the item again. For `MUST_SCAN_EACH`, every item must be scanned during picking.                                                                                             |
| `PACKING_ITEMS_AUTO_INCREMENT`         | `BOOLEAN` | `FALSE`             | v164+                        | Defaults to false if not configured. Controls whether the **Item Selection Screen** in the app packing process automatically counts all items up to the maximum value.                                                                                                                                                                                                                                                                                                                                                                         |
| `PACKING_CONTAINER_TYPE_SCAN`          | `BOOLEAN` | `FALSE`             | v164+                        | Defaults to false if not configured. Controls whether the Container-Type Selection in the App Packing Process will display a screen to scan a container (camera or laser scanner). Otherwise, the app defaults to showing a manual-selection-only screen.                                                                                                                                                                                                                                                                                      |
| `MOBILE_POLLING_INTERVAL_PARCEL_LABEL` | `INTEGER` | `10`                | v164+                        | Defaults to 10 seconds if not configured. Defines custom polling intervals, in seconds, for parcel label creation during the app's packing and printing process.                                                                                                                                                                                                                                                                                                                                                                               |
| {% endtab %}                           |           |                     |                              |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |

{% tab title="Returns app" %}
Group: `OPERATIONS_KMP`

| Key                             | Type      | Example | Availability | Effect                                                                                                                                                   |
| ------------------------------- | --------- | ------- | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `return_trigger_review_enabled` | `BOOLEAN` | `true`  | v20+         | If `true`, the user can select a checkbox for each article in an `ItemReturn` to indicate it needs further review. If `false`, the checkbox isn't shown. |
| {% endtab %}                    |           |         |              |                                                                                                                                                          |
| {% endtabs %}                   |           |         |              |                                                                                                                                                          |

## Creating a remote configuration

{% hint style="warning" %}
We recommend not storing sensitive data in the remote configuration. Any logged-in user can read and write this data, and it's not stored encrypted.
{% endhint %}

```http
POST https://{projectId}.api.fulfillmenttools.com/api/remoteconfigs
```

The following example shows the payload for creating a remote configuration.

```json
{
    "key": "SHOW_RETURN_SECTION",
    "value": false,
    "valueType": "BOOLEAN",
    "groups": [
        "FULFILLMENT_APPLICATION",
        "BACKOFFICE"
    ],
    "scopes": [
        {
            "id": "SCOPE-ID-0001",
            "facilityRefs": [
                "FACILITY-ID-001"
            ],
            "userRefs": [
                "USER-ID-001",
                "USER-ID-003"
            ]
        }
    ]
}
```

## Retrieving remote configurations

The `GET` endpoint provides filter parameters to retrieve specific configurations based on the use case. For instance, to get configurations applicable to a specific user and group, the `userId` and `groups` query parameters can be combined.

An example is retrieving all configurations for user `USER-ID-003` that belong to the `FULFILLMENT_APPLICATION` group by using the query parameters `userId=USER-ID-003` and `groups=FULFILLMENT_APPLICATION`.

```http
GET https://{projectId}.api.fulfillmenttools.com/api/remoteconfigs
```
