overseerr-request-media
v1.0.0在Overseerr中按标题请求电影或剧集,可指定季数,检查可用性后转发至Sonarr或Radarr。
Installation
Overseerr Request Media Skill
Purpose
Request a movie or TV show using the user's Overseerr instance. Overseerr forwards the request to Sonarr/Radarr.
Requirements
Environment variables: - OVERSEERR_URL (example: https://overseerr.yourdomain.com) - OVERSEERR_API_KEY
Authentication header: - X-Api-Key: $OVERSEERR_API_KEY
Overseerr can detect if media is already available or already requested based on your configured Plex + Sonarr/Radarr connections.
What this skill handles
User examples: - "Request Interstellar" - "Add Interstellar to overseerr" - "Request Reacher season 2" - "Request The Office seasons 2-4"
Workflow (ALWAYS FOLLOW)
1) Parse the user's request
Extract: - Title - Optional type hint: movie or tv - Optional season request: - "season 2" - "seasons 1-3" - "season 1 and 4"
2) Search Overseerr
GET:
$OVERSEERR_URL/api/v1/search?query=
Example: curl -s -H "X-Api-Key: $OVERSEERR_API_KEY" "$OVERSEERR_URL/api/v1/search?query=interstellar"
3) Clarify if the result is ambiguous (movie vs show with same name)
If the search results include BOTH: - a movie match AND - a tv match with the same (or extremely similar) title,
THEN ask the user to choose before requesting.
Show 2-4 options max, like: - Movie: Title (Year) - TV: Title (Year)
If the user provided an obvious hint like "movie", "show", "tv", "season 2", then pick the matching type automatically.
4) Pick the best match
Rules: - Prefer exact title match - Prefer the highest popularity match when multiple results exist - Respect the user's type hint if provided (movie vs tv)
5) Check if it already exists (available or already requested)
Before creating a request: - Inspect the selected result for availability/request status info returned by Overseerr (library/availability/request indicators). - If it indicates the media is already available in the library: - Do NOT request it - Reply: "Already available ✅" - If it indicates the media is already requested (pending/processing/approved/requested): - Do NOT request it again - Reply: "Already requested ✅"
If the API response does NOT clearly indicate status: - Proceed with creating the request - If the POST fails due to duplicate/existing request, reply "Already requested ✅"
6) Create the request
POST: $OVERSEERR_URL/api/v1/request
Movie JSON:
{
"mediaType": "movie",
"mediaId":
TV JSON (full series):
{
"mediaType": "tv",
"mediaId":
TV JSON (specific seasons):
{
"mediaType": "tv",
"mediaId":
Examples:
Movie: curl -s -X POST -H "X-Api-Key: $OVERSEERR_API_KEY" -H "Content-Type: application/json" "$OVERSEERR_URL/api/v1/request" -d '{"mediaType":"movie","mediaId":157336}'
TV (full): curl -s -X POST -H "X-Api-Key: $OVERSEERR_API_KEY" -H "Content-Type: application/json" "$OVERSEERR_URL/api/v1/request" -d '{"mediaType":"tv","mediaId":71912}'
TV (season 2): curl -s -X POST -H "X-Api-Key: $OVERSEERR_API_KEY" -H "Content-Type: application/json" "$OVERSEERR_URL/api/v1/request" "$OVERSEERR_URL/api/v1/request" -d '{"mediaType":"tv","mediaId":71912,"seasons":[2]}'
7) Respond cleanly
- Confirm what was requested
- If TV request was partial, list seasons
- If already requested/available, say so
- If no results, ask for alternate spelling or more context
Output style
Short confirmations: - "✅ Requested: Interstellar (2014)" - "✅ Requested: Reacher (Season 2)" - "Already requested ✅" - "Already available ✅"
Error handling
- If search returns 0 results:
- Ask for alternate title or year
- If multiple equally good matches remain:
- Ask the user to pick from 2-4 options