# Webhooks

Legacy webhooks send playback events from your media server to Trakt.

{% hint style="warning" %}
Webhooks are deprecated since **v0.6.3** and are not supported.

Use the Watcher instead: [Webhook or Watcher](/getting-started/first-time-setup/what-do-you-need/webhook-or-watcher.md).
{% endhint %}

{% hint style="warning" %}
Save changes often. Most settings do nothing until you click the **red floating Save button**.
{% endhint %}

### What it does (legacy)

* Receives events on these endpoints:
  * Plex: `http://<host>:8787/webhook/plextrakt?uniqueID`
  * Jellyfin: `http://<host>:8787/webhook/jellyfintrakt?uniqueID`
  * Emby: `http://<host>:8787/webhook/embytrakt?uniqueID`
* Can auto-remove **movies** from watchlists after completion (if enabled).
* Can send ratings to Trakt for **Plex only** (if enabled).

{% hint style="info" %}
Webhook endpoints are protected by a **unique URL token** (`?uniqueID`) generated by CrossWatch.

Copy the full URL from **Settings → Scrobble → Webhook**.

You can rotate (regenerate) these tokens from **Settings → Scrobble → Watcher**.
{% endhint %}

{% hint style="warning" %}
If you regenerate webhook tokens, old webhook URLs stop working.

Paste the new URLs into Plex/Emby/Jellyfin after rotating.
{% endhint %}

{% hint style="warning" %}
If you change CrossWatch from **HTTP ↔ HTTPS** (or change host/port), you must update the webhook URLs in your media server.

Plex/Jellyfin/Emby will keep calling the old URL until you change it.
{% endhint %}

### Prerequisites

* Trakt connected in [Authentication](/crosswatch/providers/authentication/auth-trackers/auth-trakt.md)
* Webhook mode enabled in **Settings → Scrobble → Webhook**

{% hint style="warning" %}
If you use webhooks over `https://...`, use a publicly trusted certificate.

Self-signed TLS certificates commonly break webhook delivery for Plex, Emby, and Jellyfin.

Use a reverse proxy with Let’s Encrypt (recommended). Keep CrossWatch on HTTP behind the proxy. See [Reverse proxies](/related-information/reverse-proxies.md).
{% endhint %}

{% hint style="info" %}
For Jellyfin/Emby, configure user filtering in the server webhook settings.
{% endhint %}

### Quick setup

{% stepper %}
{% step %}

### Enable webhook mode in CrossWatch

1. Open **Settings → Scrobble → Webhook**.
2. Enable **Webhook**.
3. Copy the endpoint URL(s) shown in the UI.
   {% endstep %}

{% step %}

### Configure your server

Pick your server below and paste the matching URL.
{% endstep %}
{% endstepper %}

### Plex webhook

* Endpoint: `http://<host>:8787/webhook/plextrakt?uniqueID`
* Configure in Plex: **Plex Account → Webhooks**
* Plex Pass is required.

### Jellyfin webhook

Requires the Jellyfin **Webhook** plugin.

* Endpoint: `http://<host>:8787/webhook/jellyfintrakt?uniqueID`
* Suggested events:
  * Playback Start
  * Playback Stop
  * Playback Progress (optional)
* Set request header: `Content-Type: application/json`

### Emby webhook

Requires the Emby **Webhook** plugin and **Emby Premiere**.

* Endpoint: `http://<host>:8787/webhook/embytrakt?uniqueID`
* Suggested events: Start, Pause, Unpause, Stop
* Set request content type: `application/json`

### Advanced (legacy)

<details>

<summary>UI fields and behavior notes</summary>

Plex-only filters:

* **Username whitelist**
* **Server UUID**

Plex-only option:

* **Enable ratings** (movies/shows/seasons/episodes)

Behavior controls:

* pause debounce
* suppress start near end
* regress clamp
* stop/pause thresholds

</details>

<details>

<summary>ID handling (legacy)</summary>

* Plex: prefers GUIDs (IMDb/TMDb/TVDb). Can fall back to title+year.
* Jellyfin/Emby: prefers `ProviderIds`. Falls back to title+year if needed.

</details>

### Summary

Legacy webhooks scrobble to Trakt only.

They’re deprecated and not maintained.

Use Watcher unless you have a hard requirement for webhooks.

### Related topics

* Use the supported path instead: [Watcher](/crosswatch/scrobble/watcher.md)
* Understand the scrobble pipeline: [Scrobble](/crosswatch/scrobble.md)
* Reverse proxy notes for `/webhook/*`: [Reverse proxies](/related-information/reverse-proxies.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/scrobble/webhooks.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.
