> ## Documentation Index
> Fetch the complete documentation index at: https://docs.technified.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Configuration

> Every option in the integration config, explained.

The configuration sits in the `CONFIG` table at the top of the plugin file the [installer snippet](/roblox-integration/installation) created.

## Full config

```lua theme={null}
local CONFIG = {
    -- API connection
    API_KEY            = "technified_...",
    GUILD_ID           = "1234567890123456789",
    BASE_URL           = "https://api.technified.xyz/api/v1",
    REQUEST_TIMEOUT    = 10,

    -- Features
    SYNC_PERMISSIONS   = true,
    SYNC_BANS          = true,
    SYNC_MUTES         = true,
    SYNC_SHIELD        = false,
    BIDIRECTIONAL_SYNC = true,
    LOG_ACTIONS        = true,
    TRACK_SESSIONS     = true,
    SESSION_MIN_LEVEL  = 100,

    -- Debug
    DEBUG              = false,
}
```

## API connection

| Option            | Description                                                                  |
| ----------------- | ---------------------------------------------------------------------------- |
| `API_KEY`         | Your Technified API key, from Settings > API Keys                            |
| `GUILD_ID`        | Your Discord server ID                                                       |
| `BASE_URL`        | The API endpoint, usually left as is                                         |
| `REQUEST_TIMEOUT` | How long to wait for API responses, in seconds. Raise it on slow connections |

## Feature toggles

| Option               | Default | What it does                                                                             |
| -------------------- | ------- | ---------------------------------------------------------------------------------------- |
| `SYNC_PERMISSIONS`   | `true`  | Maps Technified staff levels to ranks in your admin system on join, cached for 5 minutes |
| `SYNC_BANS`          | `true`  | Kicks banned players on join and loads the ban list on server start                      |
| `SYNC_MUTES`         | `true`  | Applies mutes on join and loads the mute list on server start                            |
| `SYNC_SHIELD`        | `false` | Kicks players on the Technified Shield flagged list                                      |
| `BIDIRECTIONAL_SYNC` | `true`  | Syncs in-game bans and mutes back to Technified, with echo prevention                    |
| `LOG_ACTIONS`        | `true`  | Logs moderation and admin commands to Technified                                         |
| `TRACK_SESSIONS`     | `true`  | Tracks staff play sessions for Staff Activity                                            |
| `SESSION_MIN_LEVEL`  | `100`   | Minimum rank level to track sessions for                                                 |
| `DEBUG`              | `false` | Verbose logging for troubleshooting, leave off in production                             |

<Note>
  `SYNC_SHIELD` is off by default. Enable it only if you want to participate in the global flagged-users system. See [Technified Shield](/shield/overview).
</Note>

<Warning>
  With `DEBUG = false` the plugin prints nothing at all, including errors. Turn it on while troubleshooting, then turn it back off.
</Warning>

## Permission mapping

Staff configured in the dashboard receive the matching rank on join. The plugin uses the real role name from your dashboard where one is configured, and only falls back to the generic rank names below when there is none.

<Tabs>
  <Tab title="Adonis">
    | Technified level | Adonis level | Fallback rank |
    | ---------------- | ------------ | ------------- |
    | 10+              | 900          | Creators      |
    | 7 to 9           | 300          | HeadAdmins    |
    | 5 to 6           | 200          | Admins        |
    | 3 to 4           | 150          | Moderators    |
    | 1 to 2           | 100          | Moderators    |
    | 0                | 0            | Players       |

    Ranks the plugin created itself are kept in sync. If a rank of the same name already exists in your Adonis config, its level is left alone and a warning is logged instead.
  </Tab>

  <Tab title="Guardsman">
    | Technified level | Guardsman position | Fallback role |
    | ---------------- | ------------------ | ------------- |
    | 10+              | 999                | Owner         |
    | 7 to 9           | 300                | Admin         |
    | 5 to 6           | 200                | Admin         |
    | 3 to 4           | 150                | Moderator     |
    | 1 to 2           | 100                | Moderator     |
    | 0                | 0                  | Guest         |

    Position 100 is Guardsman's lowest command level, so anyone at Technified level 1 or above can run commands. Roles the plugin created itself are kept in sync. If a role of the same name already exists in your Guardsman config, its position is left alone and a warning is logged instead.
  </Tab>
</Tabs>

<Note>
  If the API is unreachable, existing ranks are left untouched. Staff are only demoted when the API explicitly answers that they are no longer staff, so an outage will not strip your team's permissions.
</Note>

## Example setups

<Tabs>
  <Tab title="Full integration">
    All features on, the default.

    ```lua theme={null}
    SYNC_PERMISSIONS   = true,
    SYNC_BANS          = true,
    SYNC_MUTES         = true,
    SYNC_SHIELD        = false,
    BIDIRECTIONAL_SYNC = true,
    LOG_ACTIONS        = true,
    TRACK_SESSIONS     = true,
    SESSION_MIN_LEVEL  = 100,
    DEBUG              = false,
    ```
  </Tab>

  <Tab title="Read-only">
    Receive data from the dashboard, but do not sync back.

    ```lua theme={null}
    SYNC_PERMISSIONS   = true,
    SYNC_BANS          = true,
    SYNC_MUTES         = true,
    BIDIRECTIONAL_SYNC = false,  -- off
    LOG_ACTIONS        = false,  -- off
    TRACK_SESSIONS     = true,
    SESSION_MIN_LEVEL  = 100,
    ```
  </Tab>

  <Tab title="Bans only">
    Sync bans and nothing else.

    ```lua theme={null}
    SYNC_PERMISSIONS   = false,
    SYNC_BANS          = true,
    SYNC_MUTES         = false,
    BIDIRECTIONAL_SYNC = true,
    LOG_ACTIONS        = false,
    TRACK_SESSIONS     = false,
    SESSION_MIN_LEVEL  = 100,
    ```
  </Tab>

  <Tab title="Senior staff only">
    Track sessions for Admins and above.

    ```lua theme={null}
    SESSION_MIN_LEVEL = 200,
    ```
  </Tab>
</Tabs>
