Integrations
Sync watched marks from Jellyfin.
Finish a movie or an episode in Jellyfin and biinge marks it watched. Mark it unplayed and biinge takes the mark away. Sync runs one way, from Jellyfin to biinge. It only touches titles that are already in your library. Setup takes a token from the app and one webhook destination on the Jellyfin server.
Before you start
- Jellyfin 12 with the Webhook plugin from the Jellyfin plugin catalog
- Admin rights on that Jellyfin server. Only an admin can add a webhook destination
- Movies and episodes scraped by Jellyfin's built-in TMDB providers. That is where the ids come from. A library scraped only from local NFO files may lack them
- A biinge server the Jellyfin server can reach over HTTPS
- 1
Generate a token in the app
Open Profile, then Integrations, then Jellyfin, and tap Generate token. The app shows the token once, with a copy button. Copy it now. It is not shown again.
This is a Jellyfin token, not the app's access or refresh token. It can add and remove watched marks in your library, so treat it as a password. Generate a new one to replace it, or revoke it from the same screen.
- 2
Add a webhook destination in Jellyfin
In the Jellyfin dashboard open Plugins, then Webhook, and add a Generic Destination with these values.
Webhook Name: biinge Webhook Url: http://localhost:8080/api/v1/webhooks/jellyfin Notification Type: User Data Saved User Filter: <your Jellyfin user> Item Type: Movies, Episodes Send All Properties: onSet the User Filter to your own Jellyfin user. Every event that carries the token lands on the biinge account that owns it. Without the filter, plays by other people on the server would too.
- 3
Add the request header
In the same destination, add one Request Header. Paste the token from step 1 after
Bearer, with a single space between them.Key: Authorization Value: Bearer <the token from the app>The token is the only thing biinge checks. Anyone who has it can add and remove watched marks in your library until you revoke it.
- 4
Watch something
Save the destination, then finish a movie or an episode in Jellyfin. Marking it played from the Jellyfin UI works too, and marking it unplayed takes the mark away. The change shows up in biinge on the next refresh.
What a play does
Jellyfin never adds a title. Marking played adds a watched mark and marking unplayed takes it away. Nothing else in Jellyfin changes a mark, a library scan and a plugin import included.
| You finish | In biinge |
|---|---|
| Finish or mark played a movie you want to watch or are watching | Moves to watched |
| Finish or mark played an episode of a show you want to watch or are watching | Marks the episode. The show becomes watching, or watched once every season is done |
| Mark played a movie or an episode you have already watched | Nothing changes |
| Mark played an episode of a show you have already watched | Nothing changes |
| Mark unplayed a watched movie | Moves back to want to watch |
| Mark unplayed a watched episode | Unmarks the episode. The show follows, the same as unmarking in the app |
| Mark unplayed a movie or an episode you have not watched | Nothing changes |
| Anything on a title that is not in your library | Nothing changes |
When a mark does not show up
- Check the Webhook plugin log on the Jellyfin server. It records every delivery and the status the API answered with
-
401means the token is missing, wrong or revoked. Generate a new one and update the header -
422means biinge could not resolve the title. The movie has no TMDB id, the episode has no TVDB or IMDb id, or TMDB does not know that id. Refresh the item's metadata in Jellyfin -
502means TMDB did not answer. The plugin does not retry, so mark the title in the app -
503means biinge's database was unreachable. The plugin does not retry, so mark the title in the app - A movie or a show that is not in your library is ignored on purpose. Add it in the app first
- Every accepted event is kept on the server with what biinge did about it. The API reference lists the fields the endpoint reads