Seerr / Overseerr¶
Integrate with Seerr (or Overseerr) to make deletion decisions based on user requests. Deleterr supports two capabilities:
- Exclude or target media based on whether it was requested through Seerr
- Mark deleted media in Seerr so users can request it again
Overseerr Compatibility
Deleterr works with both Seerr and Overseerr -- they share the same API. The overseerr config key is still accepted for backward compatibility but seerr is now the recommended key.
Prerequisites¶
- A running Seerr (or Overseerr) instance
- API key from Seerr Settings > General
Setup¶
1. Add global Seerr connection¶
2. Add Seerr exclusions to your library¶
Modes¶
Exclude Mode (default)¶
Protects requested media from deletion. Use this when you want to keep content that users asked for.
Use case: "Don't delete movies that someone specifically requested."
Include-Only Mode¶
Only deletes media that was requested through Seerr. Everything else is skipped.
Use case: "Only clean up content that came in through Seerr -- leave manually added content alone."
Filtering Options¶
Filter by User¶
Only consider requests from specific users (matched by username, email, or Plex username):
Filter by Request Status¶
Only consider requests with specific statuses (pending, approved, declined):
Include Pending Requests¶
Control whether pending (not yet approved) requests count:
Minimum Request Age¶
Only consider requests older than a certain number of days. This gives users a window to watch before the protection expires:
exclude:
seerr:
mode: "exclude"
min_request_age_days: 30 # Requests older than 30 days can be deleted
Protect Unwatched Requesters¶
Protect content that hasn't been watched by the person who requested it. This combines Overseerr request data with Tautulli per-user watch history -- if the requester hasn't watched the content yet, it's protected from deletion.
exclude:
overseerr:
protect_unwatched_requesters:
enabled: true
min_request_age_days: 90 # Grace period: always protect requests younger than 90 days
max_protection_days: 365 # Expiry: allow deletion after 1 year regardless
user_mapping: # Optional: map Overseerr users to Tautulli users
overseerr_user: tautulli_user
How it works:
- When Deleterr considers deleting an item, it checks if the item was requested via Overseerr
- If it was, it looks up the requester's Tautulli watch history
- If the requester hasn't watched the content, the item is protected from deletion
- If the requester has watched it, normal deletion rules apply
User matching: Deleterr automatically matches Overseerr users to Tautulli users via their Plex username. If your usernames differ between systems, use user_mapping to define the mapping manually.
Grace period: min_request_age_days always protects requests younger than this, regardless of watch status. This gives users time before the watch-check even kicks in.
Expiry: max_protection_days sets a hard limit. After this many days, the item can be deleted regardless of whether the requester watched it.
| Option | Default | Description |
|---|---|---|
enabled | true | Enable/disable the feature |
min_request_age_days | 0 | Grace period: always protect requests younger than this |
max_protection_days | none | Hard limit: allow deletion after this many days regardless |
user_mapping | {} | Manual Overseerr-to-Tautulli username mapping |
Post-Deletion: Update Status¶
When update_status is enabled, Deleterr marks deleted media in Seerr so it can be requested again:
Without this, deleted media still shows as "available" in Seerr and users can't re-request it.
Full Example¶
seerr:
url: "http://localhost:5055"
api_key: "YOUR_SEERR_API_KEY"
libraries:
- name: "Movies"
radarr: "Radarr"
action_mode: "delete"
last_watched_threshold: 90
added_at_threshold: 180
max_actions_per_run: 20
exclude:
seerr:
mode: "exclude"
include_pending: true
request_status: ["approved", "pending"]
update_status: true
- name: "TV Shows"
sonarr: "Sonarr"
series_type: "standard"
action_mode: "delete"
last_watched_threshold: 90
added_at_threshold: 180
max_actions_per_run: 20
exclude:
seerr:
mode: "exclude"
users: ["admin"]
min_request_age_days: 60
update_status: true
Migrating from overseerr config key¶
If you're upgrading from a version that used the overseerr config key, your existing config will continue to work. Deleterr automatically migrates overseerr to seerr at startup with a deprecation notice. To silence the notice, rename your config keys:
# Before (still works, but deprecated)
overseerr:
url: "http://localhost:5055"
api_key: "YOUR_API_KEY"
# After (recommended)
seerr:
url: "http://localhost:5055"
api_key: "YOUR_API_KEY"
The same applies to library-level exclusions: rename exclude.overseerr to exclude.seerr.
Configuration Reference¶
| Option | Default | Description |
|---|---|---|
mode | "exclude" | exclude protects requested items; include_only deletes only requested items |
users | [] | Filter by username, email, or Plex username. Empty = all users |
include_pending | true | Whether pending requests count |
request_status | [] | Filter by status: pending, approved, declined. Empty = all |
min_request_age_days | 0 | Only consider requests older than this many days |
update_status | false | Mark deleted media in Seerr so it can be re-requested |
See Configuration Reference for the full field reference.