This document explains the Seerr and Arr integration added to Jellyfin MonWUI Plugin. The feature lets Jellyfin Web users request missing movies, series, seasons, and episodes from the MonWUI interface, with optional admin approval and optional Radarr/Sonarr fallback when Seerr cannot handle the request directly.
The integration adds a request layer between Jellyfin Web, Seerr, Radarr, and Sonarr.
- Seerr-compatible request support through the plugin server endpoints.
- Radarr fallback for movie requests.
- Sonarr fallback for series, season, and episode requests.
- Admin-only settings for Seerr, Radarr, and Sonarr.
- A Jellyfin search bridge that can search Seerr/Arr when Jellyfin does not show the wanted item.
- Request buttons inside supported Jellyfin item views.
- Missing season and missing episode request controls for series pages.
- Optional confirmation before a request is sent.
- Admin approval workflow for non-admin Jellyfin users.
- Notification panel support with approve, decline, withdraw, and request status display.
- Download progress display for Arr-backed requests when queue data is available.
MonWUI injects this integration into Jellyfin Web. It works on clients that render the Jellyfin Web frontend, such as browser-based Jellyfin Web and mobile clients that embed Jellyfin Web. Native TV clients that do not load /web/index.html cannot run this UI.
Required:
- A Jellyfin administrator account for configuration.
- The MonWUI plugin installed and loaded.
- Seerr, Radarr, or Sonarr reachable from the Jellyfin server.
- API keys for the services you enable.
- TMDb provider IDs on Jellyfin items for the best request matching.
Service requirements:
| Service | Required for | Minimum configuration |
|---|---|---|
| Seerr | Main request backend, metadata proxy, Seerr search | Base URL and API key |
| Radarr | Movie fallback, Arr-only movie requests, movie search | Base URL, API key, root folder, quality profile |
| Sonarr | Series, season, and episode fallback or Arr-only requests | Base URL, API key, root folder, quality profile |
The plugin normalizes service API URLs internally. Seerr URLs are sent to /api/v1; Radarr and Sonarr URLs are sent to /api/v3. You can usually enter the normal service URL, for example http://localhost:5055, http://localhost:7878, or http://localhost:8989.
The frontend runtime has a master switch named Enable Seerr & Arr integration modules. Keep this enabled if you want the search bridge, item page buttons, missing episode tools, and notification integration to boot in Jellyfin Web.
If this master switch is disabled, the plugin cleans up the Seerr/Arr frontend bridges even if backend credentials are still saved.
Open MonWUI Settings as an administrator and select Seerr & Arr Integration.
Set:
- Enable Seerr integration: turns on Seerr as the main request backend.
- Seerr URL: the base URL of the Seerr-compatible service.
- Seerr API key: the API key from Seerr settings.
- Seerr search language: language code used for Seerr/TMDb metadata and search, such as
en,tr, oren-US. - Try to match Seerr users by Jellyfin user ID: when enabled, MonWUI calls Seerr user lookup and tries to submit the request as the matching Seerr user.
- Show the Seerr button in Jellyfin search: shows the search bridge in Jellyfin search pages.
- Show Seerr & Arr requests in the notification panel: adds active request tracking to MonWUI notifications.
- Show confirmation modal before sending requests: asks the user to confirm the request scope before submission.
Use Test Connection after saving the URL and API key. The test calls the Seerr /settings/about API through the plugin backend.
Radarr is used for movie fallback and Arr-only movie requests.
Set:
- Enable Radarr: enables movie handling through Radarr.
- Radarr URL: Radarr base URL.
- Radarr API key: API key from Radarr.
- Radarr root folder path: target root folder for added movies.
- Radarr quality profile ID: quality profile used when adding a movie.
- Search the movie immediately on fallback: starts a Radarr
MoviesSearchcommand after the movie is added or found.
Use Test Radarr Connection to load root folders and quality profiles. Choose the root folder and quality profile from the populated selectors, then save settings.
Radarr request handling:
- Existing Radarr movies are matched by TMDb ID first, then by normalized title.
- Missing movies are looked up through Radarr lookup APIs.
- New movies are added as monitored.
- If immediate search is enabled, MonWUI starts a Radarr movie search command.
Sonarr is used for series, season, and single-episode fallback or Arr-only requests.
Set:
- Enable Sonarr: enables TV handling through Sonarr.
- Sonarr URL: Sonarr base URL.
- Sonarr API key: API key from Sonarr.
- Sonarr root folder path: target root folder for added series.
- Sonarr quality profile ID: quality profile used when adding a series.
- Sonarr language profile ID: optional; mostly relevant for Sonarr v3. Use none or
0for Sonarr v4. - Use season folders in Sonarr: controls the Sonarr
seasonFoldersetting for new series. - Search the episode immediately on fallback: starts Sonarr searches after request submission.
Use Test Sonarr Connection to load root folders, quality profiles, and language profiles. Choose the required values and save settings.
Sonarr request handling:
- Existing Sonarr series are matched by TVDb ID, TMDb ID, or normalized title.
- Missing series are looked up through Sonarr lookup APIs.
- Season requests monitor the selected season or all seasons.
- Episode-only requests monitor selected episodes and can start
EpisodeSearch. - Season requests can start
SeasonSearch. - Full-series requests can start
SeriesSearch.
When a user presses Request, MonWUI builds a request payload from the Jellyfin item:
mediaType:movieortvmediaId: TMDb IDtvdbId: TVDb ID when available for TV contentseasons: selected seasons for TV requestsepisodes: selected episode numbers for episode-only requestsrequestAllSeasons: true when the full series should be requestedtitle: item titlejellyfinItemId: original Jellyfin item ID when available
Before submission, the plugin checks local Jellyfin availability. If the movie or episode is already available in Jellyfin, the request is rejected with an already-available message.
If confirmation is enabled, the user sees a confirmation modal showing the title, media type, season scope, and TMDb ID before the request is created.
Admin users submit directly to the configured backend.
Non-admin users create a pending request inside MonWUI. Administrators can approve or decline it from the MonWUI notification/request management UI.
When an administrator approves a non-admin user's Seerr-backed request, Seerr records the request under the approving administrator account instead of the original Jellyfin requester. MonWUI still keeps the original requester in its own request history and notification UI.
Request states include:
- Pending approval: waiting for administrator approval.
- Approved: accepted and submitted.
- Processing: an active Arr download is detected.
- Completed: the item is available or the request reached a completed state.
- Declined: rejected by an administrator.
- Failed: backend submission failed.
- Withdrawn: cancelled by the requester or administrator.
Non-admin users can withdraw their own pending requests. Administrators can withdraw managed requests; if a Seerr request ID exists, MonWUI also attempts to delete the request from Seerr.
The search bridge appears on Jellyfin search pages when the integration is enabled and Show the Seerr button in Jellyfin search is turned on.
It supports:
- Normal title searches.
- TMDb ID searches.
- TMDb URL-style searches.
- Local Jellyfin match hints when a TMDb ID already exists in the library.
- Seerr search when Seerr is configured.
- Arr search fallback when Seerr is not configured but Radarr or Sonarr search is configured.
For normal title queries, the Jellyfin search page exposes a Search in Seerr & Arr action.
For numeric TMDb ID queries, the bridge can show local Jellyfin matches and switch the action to a TMDb ID search.
When the bridge opens the Seerr & Arr modal, results are normalized into movie and series rows. Movie results can be sent to Seerr or Radarr. Series results can be sent to Seerr or Sonarr depending on configuration and request scope.
The item page bridge adds request controls to supported Jellyfin details pages.
Supported cases:
- Missing movie request.
- Missing series or season request.
- Missing episode request.
- Selected episode request.
- Full season request.
- Missing seasons and missing episodes on series pages.
- Missing box set item request.
The bridge uses Jellyfin provider IDs and item metadata to resolve TMDb and TVDb IDs. When an ID is missing, the UI can fall back to the Seerr & Arr search modal so the user can search manually.
MonWUI missing episode, season, and box set controls work independently from Jellyfin's native missing episode section. When using the MonWUI Seerr & Arr integration, keep Jellyfin's native Show missing episodes option disabled to avoid duplicate missing-item UI.
Season cards can show missing season state and direct season request actions.
Episode rows can show missing and requested states with per-episode request controls.
MonWUI chooses the backend in this order:
- If Seerr is configured, submit to Seerr first.
- If Seerr succeeds, the request remains a Seerr-backed request.
- If Seerr fails and Arr can handle the request, submit to Arr fallback.
- If Seerr is not configured, submit movies to Radarr when Radarr is ready.
- If Seerr is not configured, submit TV requests to Sonarr when Sonarr is ready.
- If no backend can handle the request, return a configuration error.
Arr fallback requires more than a URL and API key. For actual requests, Radarr and Sonarr must also have a root folder and quality profile saved.
When request notifications are loaded with download data enabled, MonWUI checks Arr queues and library records:
- Radarr queue and movie records are used for movie requests.
- Sonarr queue and series records are used for TV requests.
- 4K requests use the configured 4K Radarr/Sonarr queue when that connection is available.
- Active downloads display service name, download client, remaining time, item count, and progress percent when available.
Queue lookups are cached briefly to avoid excessive API calls while the notification panel is open.
The integration stores recent requests in the plugin configuration and checks duplicates before creating a new one. Duplicate requests show whether the current user or another user already requested the title.
Local Jellyfin availability is also checked. This prevents requesting content that is already available in the Jellyfin library and lets completed requests disappear from the active request list after the item becomes available.
The stored request list is capped to keep plugin configuration size under control.
| Problem | Check |
|---|---|
| The Seerr/Arr UI does not appear | Confirm Enable Seerr & Arr integration modules is enabled and hard refresh Jellyfin Web. |
| Search bridge does not appear | Confirm the Jellyfin page is a search page, the query has at least two characters, and Show the Seerr button in Jellyfin search is enabled. |
| Seerr test fails | Verify the URL, API key, and that Jellyfin server can reach the Seerr host. |
| Radarr/Sonarr test works but requests fail | Re-test the connection, select a valid root folder and quality profile, then save. |
| Sonarr language profile error | Use a valid language profile for Sonarr v3, or leave it empty/zero for Sonarr v4. |
| Request says already available | Jellyfin already has a non-virtual movie or episode matching the provider ID. |
| Request opens search instead of sending | The Jellyfin item is missing a usable TMDb ID, so manual search is required. |
| Non-admin request does not reach Seerr immediately | This is expected. Non-admin requests wait for admin approval in MonWUI notifications. |
These routes are used internally by the frontend modules.
| Route | Purpose |
|---|---|
/Plugins/MonWUI/seerr/access |
Returns user access, admin status, enabled backend flags, and safe settings. |
/Plugins/MonWUI/seerr/settings |
Admin-only Seerr settings read/write. |
/Plugins/MonWUI/seerr/test |
Admin-only Seerr connection test. |
/Plugins/MonWUI/seerr/search |
Seerr search or Arr fallback search. |
/Plugins/MonWUI/seerr/request |
Creates a MonWUI request and submits immediately when allowed. |
/Plugins/MonWUI/seerr/requests |
Lists visible active or historical requests. |
/Plugins/MonWUI/seerr/requests/{id}/approve |
Admin-only approval. |
/Plugins/MonWUI/seerr/requests/{id}/decline |
Admin-only decline. |
/Plugins/MonWUI/seerr/requests/{id}/withdraw |
Request withdrawal. |
/Plugins/MonWUI/arr/settings |
Admin-only Arr settings read/write. |
/Plugins/MonWUI/arr/sonarr/test |
Admin-only Sonarr connection test and option fetch. |
/Plugins/MonWUI/arr/radarr/test |
Admin-only Radarr connection test and option fetch. |
/Plugins/MonWUI/arr/episode |
Admin-only direct Sonarr episode request. |
/Plugins/MonWUI/arr/movie |
Admin-only direct Radarr movie request. |
- Configuration is stored in the MonWUI plugin configuration.
- API keys are only returned to admin settings calls.
- Users must have a valid Jellyfin session because frontend requests include Jellyfin user and token headers.
- Best matching depends on accurate TMDb and TVDb provider IDs in Jellyfin metadata.
- After changing settings, hard refresh Jellyfin Web if the frontend still shows old behavior.








