From e3052b9b3e06de50c4971d2bc2b9add31e655750 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 18 Jul 2026 13:27:49 +0000 Subject: [PATCH 1/5] Initial plan From 79f76bb863e1f606a20ead73c95a0ec742c4d815 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 18 Jul 2026 13:31:13 +0000 Subject: [PATCH 2/5] docs: document Seerr requester in pre-deletion warnings and webhook mediaItems field (#3270) --- docs/Configuration.md | 2 +- docs/Notifications.md | 35 +++++++++++++++++++++++++++-------- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/docs/Configuration.md b/docs/Configuration.md index bd8e47b84..6d370df05 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -124,7 +124,7 @@ Use your Emby server URL directly. Maintainerr supports either entering an API k ## Seerr -Seerr configuration is required if you want to use Seerr-related rule parameters or remove Seerr requests. +Seerr configuration is required if you want to use Seerr-related rule parameters, remove Seerr requests, or see who requested media in pre-deletion notifications. | Setting | Description | | ------- | ------------------------------------------------------------- | diff --git a/docs/Notifications.md b/docs/Notifications.md index e3409a482..cb0766572 100644 --- a/docs/Notifications.md +++ b/docs/Notifications.md @@ -41,7 +41,7 @@ Maintainerr supports several notification types that you can enable for each age | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | | Media Added to Collection | Sent when media items are added to a collection | | Media Removed from Collection | Sent when media items are removed from a collection | -| Media About to be Handled | Advance warning that media will be processed/deleted in X days | +| Media About to be Handled | Advance warning that media will be processed/deleted in X days. When Seerr is configured, the message names who requested the item: *'Title' (requested by alice) will be handled in 3 days*. The lookup is best-effort — if Seerr is unreachable or the item was not requested there, the requester line is silently omitted. | | Media Handled | Confirmation that media has been processed/deleted | | Rule Handling Failed | Alert when there's an error processing rules | | Collection Handling Failed | Alert when there's an error processing collections. When Maintainerr can tie the failure to one collection, the message names that collection. | @@ -207,13 +207,32 @@ Send notifications to custom webhook endpoints. Requests are sent using the POST The webhook agent supports variable replacement in the JSON payload. You can use the following variables: -| Variable | Description | -| ----------------------- | ----------------------------------- | -| `{{notification_type}}` | The type of notification being sent | -| `{{subject}}` | The notification subject/title | -| `{{message}}` | The notification message content | -| `{{image}}` | Associated image URL (if available) | -| `{{extra}}` | Additional data fields | +| Variable | Description | +| ----------------------- | ------------------------------------------------------------------------------------------------------------------- | +| `{{notification_type}}` | The type of notification being sent | +| `{{subject}}` | The notification subject/title | +| `{{message}}` | The notification message content | +| `{{image}}` | Associated image URL (if available) | +| `{{extra}}` | Additional data fields (see below) | + +The `{{extra}}` block is also flattened into the top-level webhook payload as individual keys. The fields present depend on the notification type: + +| Extra key | Type | Description | +| ---------------- | ------ | --------------------------------------------------------------------------------------------------- | +| `collectionName` | string | Name of the collection that triggered the notification | +| `dayAmount` | number | Days until the item is handled (`null` when not applicable) | +| `mediaItems` | string | JSON-encoded array of media items. Each entry contains `mediaServerId` and, for **Media About to be Handled** notifications when Seerr is configured, a `requestedBy` array of usernames. | + +Example `mediaItems` value for a pre-deletion warning: + +```json +[ + { "mediaServerId": "abc123", "requestedBy": ["alice"] }, + { "mediaServerId": "def456" } +] +``` + +Items without a Seerr request omit the `requestedBy` key entirely. Example JSON payload: From 713ccb9cf7c6aba9eb752504f83bb7f205f02983 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 18 Jul 2026 13:32:06 +0000 Subject: [PATCH 3/5] docs: improve readability of notification type table and webhook variables section --- docs/Notifications.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/docs/Notifications.md b/docs/Notifications.md index cb0766572..076813e31 100644 --- a/docs/Notifications.md +++ b/docs/Notifications.md @@ -41,13 +41,17 @@ Maintainerr supports several notification types that you can enable for each age | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | | Media Added to Collection | Sent when media items are added to a collection | | Media Removed from Collection | Sent when media items are removed from a collection | -| Media About to be Handled | Advance warning that media will be processed/deleted in X days. When Seerr is configured, the message names who requested the item: *'Title' (requested by alice) will be handled in 3 days*. The lookup is best-effort — if Seerr is unreachable or the item was not requested there, the requester line is silently omitted. | +| Media About to be Handled | Advance warning that media will be processed/deleted in X days. When Seerr is configured, the message also names the requester (see note below). | | Media Handled | Confirmation that media has been processed/deleted | | Rule Handling Failed | Alert when there's an error processing rules | | Collection Handling Failed | Alert when there's an error processing collections. When Maintainerr can tie the failure to one collection, the message names that collection. | Infrastructure-level collection failures that happen before Maintainerr can identify a specific collection still send the generic `Collection Handling Failed` message. +:::note Seerr requester in pre-deletion warnings +When Seerr (Overseerr or Jellyseerr) is configured, the **Media About to be Handled** message includes who requested the item — for example: *'Some Title' (requested by alice) will be handled in 3 days*. The lookup is season-aware for TV content and best-effort by design: if Seerr is unreachable or the item was not requested through Seerr, the requester line is silently omitted and the warning is still sent. +::: + ## Supported Notification Agents ### Discord @@ -221,9 +225,9 @@ The `{{extra}}` block is also flattened into the top-level webhook payload as in | ---------------- | ------ | --------------------------------------------------------------------------------------------------- | | `collectionName` | string | Name of the collection that triggered the notification | | `dayAmount` | number | Days until the item is handled (`null` when not applicable) | -| `mediaItems` | string | JSON-encoded array of media items. Each entry contains `mediaServerId` and, for **Media About to be Handled** notifications when Seerr is configured, a `requestedBy` array of usernames. | +| `mediaItems` | string | JSON-encoded array of media items (see example below) | -Example `mediaItems` value for a pre-deletion warning: +Example `mediaItems` value for a **Media About to be Handled** notification when Seerr is configured: ```json [ @@ -232,7 +236,7 @@ Example `mediaItems` value for a pre-deletion warning: ] ``` -Items without a Seerr request omit the `requestedBy` key entirely. +Each entry contains `mediaServerId`. The optional `requestedBy` array lists the Seerr usernames who requested the item; it is omitted when Seerr is not configured or the item was not requested there. Example JSON payload: From 6b7ada7fbee2ee04dfe7745481c2cd4d21b9d350 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 18 Jul 2026 13:32:37 +0000 Subject: [PATCH 4/5] docs: fix trailing whitespace and clarify mediaItems type description --- docs/Notifications.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Notifications.md b/docs/Notifications.md index 076813e31..e5f738f59 100644 --- a/docs/Notifications.md +++ b/docs/Notifications.md @@ -41,7 +41,7 @@ Maintainerr supports several notification types that you can enable for each age | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | | Media Added to Collection | Sent when media items are added to a collection | | Media Removed from Collection | Sent when media items are removed from a collection | -| Media About to be Handled | Advance warning that media will be processed/deleted in X days. When Seerr is configured, the message also names the requester (see note below). | +| Media About to be Handled | Advance warning that media will be processed/deleted in X days. When Seerr is configured, the message also names the requester (see note below). | | Media Handled | Confirmation that media has been processed/deleted | | Rule Handling Failed | Alert when there's an error processing rules | | Collection Handling Failed | Alert when there's an error processing collections. When Maintainerr can tie the failure to one collection, the message names that collection. | @@ -225,7 +225,7 @@ The `{{extra}}` block is also flattened into the top-level webhook payload as in | ---------------- | ------ | --------------------------------------------------------------------------------------------------- | | `collectionName` | string | Name of the collection that triggered the notification | | `dayAmount` | number | Days until the item is handled (`null` when not applicable) | -| `mediaItems` | string | JSON-encoded array of media items (see example below) | +| `mediaItems` | string | Stringified JSON array of media items (see example below) | Example `mediaItems` value for a **Media About to be Handled** notification when Seerr is configured: From 3f955f9205de3f77f1360d1689065c999292b37c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 18 Jul 2026 14:21:35 +0000 Subject: [PATCH 5/5] docs: fix prettier formatting in Notifications.md --- docs/Notifications.md | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/docs/Notifications.md b/docs/Notifications.md index e5f738f59..ac5291982 100644 --- a/docs/Notifications.md +++ b/docs/Notifications.md @@ -37,19 +37,19 @@ Each notification agent requires the following common settings: Maintainerr supports several notification types that you can enable for each agent: -| Type | Description | -| ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | -| Media Added to Collection | Sent when media items are added to a collection | -| Media Removed from Collection | Sent when media items are removed from a collection | +| Type | Description | +| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| Media Added to Collection | Sent when media items are added to a collection | +| Media Removed from Collection | Sent when media items are removed from a collection | | Media About to be Handled | Advance warning that media will be processed/deleted in X days. When Seerr is configured, the message also names the requester (see note below). | -| Media Handled | Confirmation that media has been processed/deleted | -| Rule Handling Failed | Alert when there's an error processing rules | -| Collection Handling Failed | Alert when there's an error processing collections. When Maintainerr can tie the failure to one collection, the message names that collection. | +| Media Handled | Confirmation that media has been processed/deleted | +| Rule Handling Failed | Alert when there's an error processing rules | +| Collection Handling Failed | Alert when there's an error processing collections. When Maintainerr can tie the failure to one collection, the message names that collection. | Infrastructure-level collection failures that happen before Maintainerr can identify a specific collection still send the generic `Collection Handling Failed` message. :::note Seerr requester in pre-deletion warnings -When Seerr (Overseerr or Jellyseerr) is configured, the **Media About to be Handled** message includes who requested the item — for example: *'Some Title' (requested by alice) will be handled in 3 days*. The lookup is season-aware for TV content and best-effort by design: if Seerr is unreachable or the item was not requested through Seerr, the requester line is silently omitted and the warning is still sent. +When Seerr (Overseerr or Jellyseerr) is configured, the **Media About to be Handled** message includes who requested the item — for example: _'Some Title' (requested by alice) will be handled in 3 days_. The lookup is season-aware for TV content and best-effort by design: if Seerr is unreachable or the item was not requested through Seerr, the requester line is silently omitted and the warning is still sent. ::: ## Supported Notification Agents @@ -211,21 +211,21 @@ Send notifications to custom webhook endpoints. Requests are sent using the POST The webhook agent supports variable replacement in the JSON payload. You can use the following variables: -| Variable | Description | -| ----------------------- | ------------------------------------------------------------------------------------------------------------------- | -| `{{notification_type}}` | The type of notification being sent | -| `{{subject}}` | The notification subject/title | -| `{{message}}` | The notification message content | -| `{{image}}` | Associated image URL (if available) | -| `{{extra}}` | Additional data fields (see below) | +| Variable | Description | +| ----------------------- | ----------------------------------- | +| `{{notification_type}}` | The type of notification being sent | +| `{{subject}}` | The notification subject/title | +| `{{message}}` | The notification message content | +| `{{image}}` | Associated image URL (if available) | +| `{{extra}}` | Additional data fields (see below) | The `{{extra}}` block is also flattened into the top-level webhook payload as individual keys. The fields present depend on the notification type: -| Extra key | Type | Description | -| ---------------- | ------ | --------------------------------------------------------------------------------------------------- | -| `collectionName` | string | Name of the collection that triggered the notification | -| `dayAmount` | number | Days until the item is handled (`null` when not applicable) | -| `mediaItems` | string | Stringified JSON array of media items (see example below) | +| Extra key | Type | Description | +| ---------------- | ------ | ----------------------------------------------------------- | +| `collectionName` | string | Name of the collection that triggered the notification | +| `dayAmount` | number | Days until the item is handled (`null` when not applicable) | +| `mediaItems` | string | Stringified JSON array of media items (see example below) | Example `mediaItems` value for a **Media About to be Handled** notification when Seerr is configured: