Media Requests (Radarr / Sonarr Integration) โ
TL;DR โ
Hub's media request system lets users request movies and TV shows through a Jellyseerr-class UI. When an admin approves a request, the hub automatically adds the title to Radarr (movies) or Sonarr (series) for download and import into the library.
1. Overview โ
The request system bridges three components:
User submits request
โ
โผ
Hub stores request (status: pending)
โ
Admin approves โโโโ or โโโโ Admin denies
โ โ
โผ โผ
Radarr/Sonarr API Hub marks rejected
called with TMDB id (user notified)
โ
โผ
Hub marks approved
(user notified)
โ
โผ
Arr imports title โ library
โ
โผ
Hub marks available
(user notified)Request statuses โ
| Status | Meaning |
|---|---|
pending | Submitted, awaiting admin review |
approved | Approved and sent to Radarr/Sonarr |
available | Arr has imported the title to the library |
rejected | Denied by an admin (with optional reason) |
2. Configuration โ
Environment variables โ
Radarr and Sonarr are configured via environment variables on the Hub. See Hub environment variables for the full list.
| Variable | Required | Default | Description |
|---|---|---|---|
HUB_RADARR_URL | Yes | http://localhost:7878 | Radarr instance base URL |
HUB_RADARR_API_KEY | Yes | โ | Radarr API key |
HUB_RADARR_ENABLED | No | 0 | Set to 1 to enable Radarr integration |
HUB_SONARR_URL | Yes | http://localhost:8989 | Sonarr instance base URL |
HUB_SONARR_API_KEY | Yes | โ | Sonarr API key |
HUB_SONARR_ENABLED | No | 0 | Set to 1 to enable Sonarr integration |
Prerequisite: Radarr or Sonarr must be running and reachable from the Hub host. The Hub uses the Arr API (v3) to add titles and query quality profiles and root folders.
Generating API keys โ
Radarr:
- Log into Radarr โ Settings โ General
- Under Security, copy the API Key
Sonarr:
- Log into Sonarr โ Settings โ General
- Under Security, copy the API Key
Quick-start Docker Compose snippet โ
services:
hub:
environment:
HUB_RADARR_URL: "http://radarr:7878"
HUB_RADARR_API_KEY: "your-radarr-api-key"
HUB_RADARR_ENABLED: "1"
HUB_SONARR_URL: "http://sonarr:8989"
HUB_SONARR_API_KEY: "your-sonarr-api-key"
HUB_SONARR_ENABLED: "1"3. How Media Requests Work โ
3.1 User submits a request โ
A logged-in user sends POST /api/v1/me/requests with:
{
"type": "movie",
"tmdb_id": 550,
"title": "Fight Club",
"poster_url": "https://image.tmdb.org/t/p/w500/..."
}Or for a series:
{
"type": "series",
"tmdb_id": 1396,
"title": "Breaking Bad",
"poster_url": "https://image.tmdb.org/t/p/w500/...",
"season": 1,
"episode": 1
}The hub stores the request with status pending and returns the created request object. The user receives a confirmation notification.
3.2 Admin reviews the queue โ
Admins view all pending requests at GET /api/v1/admin/requests (or filter by ?status=pending).
Each request shows:
- The requesting user's ID
- Media type (
movieorseries) - TMDB ID and title
- Poster URL
- Submitted timestamp
3.3 Admin approves or denies โ
Approve โ POST /api/v1/admin/requests/{id}/approve
The hub calls the appropriate Arr API:
- Movie โ
POST /api/v3/movieon Radarr with the TMDB ID - Series โ
POST /api/v3/serieson Sonarr with the TMDB ID
Both use the first available quality profile and the existing root folder from the Arr instance. The request status transitions to approved.
Deny โ POST /api/v1/admin/requests/{id}/deny
{
"reason": "Content policy violation"
}The request status transitions to rejected with the optional reason stored. The requesting user receives a rejection notification.
3.4 Arr imports the title โ
Radarr or Sonarr downloads and imports the media. When the hub is notified (or polls) that the title is in the library, the request status transitions to available. The user receives an availability notification.
4. Admin Review โ
Request approval is performed by admins through the /api/v1/admin/requests endpoints (see ยง3.2โยง3.3 above) and the legacy server-rendered /admin/requests page. The Hub's Vue admin console (/app/admin/*) does not include a Media Requests page โ its pages are Hub Dashboard, Users, Logs, Settings, and Audit Logs. Use the API (or the legacy /admin/requests page) to:
- List and filter requests by status (
pending,approved,available,rejected) - Approve or deny a request
- View per-request history (submitted, approved/denied timestamp, admin who took action)
The ยง5 curl recipes below are the supported way to drive request review from the command line.
5. CLI Management โ
Hub administrators can also manage requests via the API using curl or any HTTP client:
# List all pending requests
curl -H "Authorization: Bearer <admin-token>" \
https://hub.example.com/api/v1/admin/requests?status=pending
# Approve a request
curl -X POST -H "Authorization: Bearer <admin-token>" \
-H "Content-Type: application/json" \
-d '{"reason":""}' \
https://hub.example.com/api/v1/admin/requests/<request-id>/approve
# Deny a request
curl -X POST -H "Authorization: Bearer <admin-token>" \
-H "Content-Type: application/json" \
-d '{"reason":"Quality or rights issue"}' \
https://hub.example.com/api/v1/admin/requests/<request-id>/deny6. What Can Go Wrong โ
Radarr/Sonarr not reachable โ
Symptom: Admin approves a request but it returns HTTP 500 approve_failed.
Diagnosis:
# Test Radarr connectivity from the Hub host
curl -s -o /dev/null -w "%{http_code}" http://localhost:7878/api/v3/qualityprofile
# Test Sonarr connectivity
curl -s -o /dev/null -w "%{http_code}" http://localhost:8989/api/v3/qualityprofileFix: Verify the HUB_RADARR_URL / HUB_SONARR_URL is correct, the Arr instance is running, and the Hub host can reach it over HTTP/HTTPS.
Wrong API key โ
Symptom: Approve returns approve_failed with no Arr error logged.
Diagnosis:
# Verify API key is correct โ this should return quality profiles
curl -H "X-Api-Key: your-api-key" \
http://localhost:7878/api/v3/qualityprofileFix: Update HUB_RADARR_API_KEY or HUB_SONARR_API_KEY and restart the Hub.
No quality profiles or root folder in Arr โ
Symptom: Approve succeeds in the hub but the title never appears in the library.
Fix: Log into Radarr or Sonarr, create at least one quality profile (e.g., "HD-1080p") and set a root folder (e.g., /movies). The hub uses the first available profile and root folder automatically.
TMDB ID not found in Arr โ
Symptom: Approve returns an Arr API error about missing metadata.
Diagnosis: Some titles may not exist in Radarr/Sonarr's search index (rare, usually TMDB ID drift).
Fix: Verify the correct TMDB ID using The Movie Database or The TV DB, then resubmit the request.
7. Next Steps โ
- API Reference: Media Requests โ full endpoint and response shapes
- What is the Hub โ overview of hub features and access management
- Shared Libraries with Friends โ share libraries after requests are fulfilled