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:
- Enable the webhook agent.
- Select only Request Available.
- Webhook URL:
http://jellypass:8787/webhooks/seerron a shared Docker network, or JellyPass's address as Seerr reaches it. - Authorization header:
Bearer your WEBHOOK_TOKEN. This is the recommended way to send the token. - JSON payload: paste the template below, in Seerr's own form, and save. Don't write it into Seerr's
settings.jsonby 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):
jfa_last_webhook_received_timestamp_seconds: when the last accepted webhook arrived.jfa_webhooks_total{result="invalid"}: webhooks whose payload was malformed; re-save the payload in Seerr's form.jfa_webhooks_total{result="error"}: valid webhooks JellyPass could not apply; the reason is logged.
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).