---
title: "Backend User Configuration"
manual: "Interest"
version: "4.1"
source: "Configuration/UserTS/Index.rst"
rendered: "2026-09-18T11:09:59+00:00"
---

# Backend User Configuration {#userts}

## Access privileges and page mounts {#userts-access-mounts}

### REST API {#userts-access-mounts-rest}

The REST API's write permissions are drawn from the authenticated backend user.
You can configure the user in the TYPO3 backend as any other user. We recommend
using a non-admin user with permissions limited to exactly the tables,
page mounts, and file storage that are required.

Authenticating admin users is also possible and slightly more performant.
However, it also comes with potential security risks.

### CLI commands {#userts-access-mounts-cli}

The write permissions of the CLI commands is drawn from the default `_cli_`
backend user.

## UserTS Configuration {#userts-conf}

Since calls to the Interest extension are not happening within a page scope,
extension-specific configurations are made using TypoScript in UserTS. Many
properties support `stdWrap`, so it is possible to configure
advanced data transformations.

### Accessing metadata {#userts-accessing-metadata}

Both the CLI commands and REST endpoints support sending metadata alongside with
the record data. The metadata is common to the command or request, and it can
e.g. be used to set storage PID dependent on a criteria.

Here's an example using market metadata to configure the PID:

```typoscript
tx_interest.persistence {
  storagePid {
    cObject = CASE
    cObject {
      key.data = field : metaData | market

      Denmark = TEXT
      Denmark.value =

      Norway = TEXT
      Norway.value = 1814

      Sweden = TEXT
      Sweden.value =
    }
  }
```

### UserTS properties {#userts-properties}

UserTS configuration properties are set within `tx_interest` in the UserTS field
of a backend user or backend user group, or within a .userts file.

-   **persistence.hashedSubfolders**

    -   *Required:* false
    -   *Type:* int
    -   *Default:*

    The number of layers of subfolders to create within
    `fileUploadFolderPath`. Each folder is named using characters
    from a hash of the file name.

    If the file name is `image.jpg` and `hashedSubfolders = 3`,
    the file will be saved in `0/d/5/image.jpg` within
    `fileUploadFolderPath`.

-   **persistence.fileUploadFolderPath**

    -   *Required:* true
    -   *Type:* string (combined storage identifier)
    -   *Default:* `1:tx_interest`

    The location where uploaded files will be stored.

-   **persistence.storagePid**

    -   *Required:* false
    -   *Type:* int | stdWrap
    -   *Default:*

    Where new records will be stored. Can also be supplied in the record data
    by setting the `pid` field.

-   **relationOverrides.\[table\].\[field\]**

    -   *Required:* false
    -   *Type:* bool | stdWrap

    If a field *is* or *isn't* wrongly a relation, this is your friend. Override
    whatever is in the TCA and whatever the extension itself thinks. Play God.

-   **relationTypeOverride.\[table\].\[field\]**

    -   *Required:* false
    -   *Type:* string | stdWrap

    Override the TCA type of the field. E.g.: change "text" to "inline". The
    incoming value is always set to the field's current type.

-   **isSingleRelationOverrides.\[table\].\[field\]**

    -   *Required:* false
    -   *Type:* string | stdWrap

    Override whether a field supports 1:n or m:n relations. Should be set to
    true (1) if it is a 1:n relation and false (0) if it is a m:n relation.
