Seerr webhook

Seerr tells JellyPass when a requested title becomes available. That webhook is what makes a title private to the requester's household.

The requester's Seerr account must be imported from or linked to Jellyfin; a local-only Seerr account has no Jellyfin user to grant. Jellyseerr works too: it uses the same webhook agent and API.

Set it up

In Seerr, Settings → Notifications → Webhook:

  1. Enable the webhook agent.
  2. Select only Request Available.
  3. Webhook URL: http://jellypass:8787/webhooks/seerr on a shared Docker network, or JellyPass's address as Seerr reaches it.
  4. Authorization header: Bearer your WEBHOOK_TOKEN. This is the recommended way to send the token.
  5. JSON payload: paste the template below, in Seerr's own form, and save. Don't write it into Seerr's settings.json by hand: Seerr stores it in its own encoding.

Deprecated: putting the token in the URL as ?token=your WEBHOOK_TOKEN still works in JellyPass 3.x but will be removed in 4.0.0. A token in a URL can end up in logs; if you use it, move it to the Authorization header.

{
  "notificationType": "{{notification_type}}",
  "event": "{{event}}",
  "media": {
    "jellyfinMediaId": "{{media_jellyfinMediaId}}",
    "mediaType": "{{media_type}}"
  },
  "request": {
    "id": "{{request_id}}",
    "requestedBy": {
      "jellyfinUserId": "{{requestedBy_jellyfinUserId}}",
      "username": "{{requestedBy_username}}"
    }
  }
}

With SEERR_URL and SEERR_API_KEY set, JellyPass can look the request up itself, so this smaller payload is enough (needed for some Jellyseerr releases that have no Jellyfin ID variables):

{
  "notificationType": "{{notification_type}}",
  "request": { "id": "{{request_id}}" }
}

4K requests need Seerr configured: Seerr's template has no 4K item ID, so JellyPass asks Seerr which item to protect.

Test it

Use Seerr's Test button. A test notification gets 202 {"status":"ignored"}, which proves JellyPass is reachable and the token is right, not that the payload is. After a real title arrives, check the admin site's Grants tab, or /metrics (with ADMIN_TOKEN):

Request backfill

Some Seerr releases miss webhooks. The backfill picks up what they missed: set REQUEST_BACKFILL_SINCE to the date you start relying on JellyPass, and it pages through Seerr's requests about five seconds after startup and before each reconciliation. It grants requests that were created on or after that date, approved or completed, available in Jellyfin, and made by a Jellyfin-linked user.

REQUEST_BACKFILL_SINCE=2026-10-01

Don't set an early date: titles that were public before JellyPass managed them should stay public. The backfill never re-grants a request it or the webhook already handled, nor one an administrator revoked.

Titles you already have

Seerr does not send a webhook for titles that were available before JellyPass, manual downloads or upgrades. To make those private, select them in the admin site's Library tab and assign users or households (up to 500 at a time).