# Profiles

Provider **profiles** let one CrossWatch (CW) install connect to **multiple accounts and/or servers** for the same provider.

In the UI, CrossWatch calls these **Profiles**.

In config and API payloads, you will still see **instance** in key names. Example: `instances`, `source_instance`, `provider_instance`.

{% hint style="info" %}
Recommended: start with one profile `default` first.

Add profiles only when the base setup works.
{% endhint %}

Common uses:

* Two Plex servers (home + remote).
* Two Plex users (yours + partner’s).
* Two Trakt users (yours + partner’s).
* Separate Jellyfin servers (anime vs family).
* Multiple users/accounts/servers for the same provider.

### Terms

* **Provider**: `PLEX`, `TRAKT`, `SIMKL`, `JELLYFIN`, `EMBY`, `MDBLIST`, …
* **Profile**: one complete, independent configuration for a provider.
  * Separate tokens, URLs, user IDs, and settings.
* **Default profile**: the built-in profile id named `default`.

### Where profiles matter

Profiles show up in three places:

1. **Settings → Authentication**\
   Credentials, server settings, and whitelisting are saved per profile.

<figure><img src="https://565675962-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3rh5THg1PdhVsBt3GALo%2Fuploads%2FvohhicisupsnKbQUR5Fz%2Fimage.png?alt=media&#x26;token=3fd20500-6e40-413b-920b-d21d82994eb6" alt=""><figcaption></figcaption></figure>

2. **Pairs**\
   Each side of a pair can point at a specific profile.

<figure><img src="https://565675962-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3rh5THg1PdhVsBt3GALo%2Fuploads%2FWDGK3TNY4RHjwIWqCmwJ%2Fimage.png?alt=media&#x26;token=1eeb296d-fafa-4089-9804-0ac23b4b375b" alt=""><figcaption></figcaption></figure>

3. **Watcher (routes mode)**\
   Routes choose a provider profile (event source) and a sink profile (event target).

<figure><img src="https://565675962-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3rh5THg1PdhVsBt3GALo%2Fuploads%2FrU4kirMF3Je3lQkOOXgY%2Fimage.png?alt=media&#x26;token=c6c330bd-113e-4b30-8627-04d8bc59d88b" alt=""><figcaption></figcaption></figure>

### Create a profile (UI)

{% stepper %}
{% step %}

### Open Authentication

Go to **Settings → Authentication**.
{% endstep %}

{% step %}

### Add a profile

Open a provider.

Click **Profile**.

That creates a new profile.

CrossWatch picks the next available profile ID automatically.
{% endstep %}

{% step %}

### Connect and save

Connect that profile.

Fill in required fields.

Click **Save**.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
Profiles are meant to be independent.

If a provider needs a token, URL, or user ID, set it per profile.

That includes library whitelisting.\
\
Want a second user on the same provider (example: Plex)?

You still need a separate profile and a full connect + settings + save flow.

There’s no shortcut. It is what it is.
{% endhint %}

{% hint style="warning" %}
Profiles can get complicated fast.

Every profile can be referenced by **Pairs** and **Watcher routes**.

If you delete a profile, also delete or update anything that points at it.

Otherwise runs will fail, or sync the wrong account/server.
{% endhint %}

### Profile IDs

* `default` is reserved.
* Non-default profiles use `PROVIDER-P##`.
  * Examples: `PLEX-P01`, `TRAKT-P01`, `SIMKL-P02`.
* The UI **Profile** button creates the **next free** `PROVIDER-P##`.
  * Example: if `PLEX-P01` exists, the next one is `PLEX-P02`.

### Power users

| Topic                        | Notes                                        |
| ---------------------------- | -------------------------------------------- |
| `config.json` examples below | Optional. Most users should use the UI.      |
| Best fit                     | Power users, API users, and troubleshooting. |

Each provider can include an `instances` map.

```json
{
  "plex": {
    "account_token": "...",
    "server_url": "http://plex.local:32400",
    "instances": {
      "PLEX-P01": {
        "account_token": "...",
        "server_url": "https://remote-plex.example"
      }
    }
  }
}
```

Pairs can set:

* `source_instance` (defaults to `default`)
* `target_instance` (defaults to `default`)

```json
{
  "pairs": [
    {
      "enabled": true,
      "source": "PLEX",
      "source_instance": "PLEX-P01",
      "target": "TRAKT",
      "target_instance": "TRAKT-P01",
      "mode": "one-way",
      "features": { "watchlist": true, "ratings": false, "history": true, "playlists": false }
    }
  ]
}
```

In routes mode, each route is:

`provider(profile) → sink(profile)`

```json
{
  "scrobble": {
    "watch": {
      "routes": [
        {
          "id": "R1",
          "enabled": true,
          "provider": "plex",
          "provider_instance": "default",
          "sink": "trakt",
          "sink_instance": "TRAKT-P01",
          "filters": {}
        }
      ]
    }
  }
}
```

### Related

* Connect providers: [Authentication](https://wiki.crosswatch.app/crosswatch/providers/authentication)
* Configure sync pairs: [Configure Pairs](https://wiki.crosswatch.app/crosswatch/configure-pairs)
* Configure scrobbling: [Watcher](https://wiki.crosswatch.app/crosswatch/scrobble/watcher)
