# 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="/files/OeFUDZEgb4NyhBjSXCDk" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/ehkjmWxS43ZZA2Rur5Mm" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/1cYXEFOhCjgFFgAlI5LK" 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](/crosswatch/providers/authentication.md)
* Configure sync pairs: [Configure Pairs](/crosswatch/configure-pairs.md)
* Configure scrobbling: [Watcher](/crosswatch/scrobble/watcher.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wiki.crosswatch.app/crosswatch/profiles.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
