Riven has a built-in notification service that fires on two channels: external push notifications sent via Apprise (Discord, Slack, Telegram, Ntfy, and hundreds of other services), and real-time Server-Sent Events (SSE) that the frontend and any custom client can subscribe to for live state change updates. External notifications are triggered when an item reaches theDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/rivenmedia/riven/llms.txt
Use this file to discover all available pages before exploring further.
Completed state; SSE events fire on every state transition.
Configuration Fields
Notification settings live under thenotifications key in Riven’s settings:
| Field | Type | Default | Description |
|---|---|---|---|
notifications.enabled | bool | false | Master switch for external (Apprise) notifications |
notifications.service_urls | list[string] | [] | One or more Apprise-format URLs |
notifications.on_item_type | list[string] | ["movie","show","season","episode"] | Item types that trigger an external notification |
enabled to false disables outbound Apprise calls but SSE events continue to fire regardless.
Setting Up External Notifications
- Discord
- Other Apprise Services
Discord webhooks are supported natively via Apprise. Riven automatically appends For example:Riven will automatically add
?format=markdown to any Discord URL so that bold text and links render correctly in the channel.Step 1 — Create a Discord webhook- In your Discord server, go to Server Settings → Integrations → Webhooks.
- Click New Webhook, give it a name (e.g. “Riven”), and select the target channel.
- Click Copy Webhook URL. It will look like:
https://discord.com/api/webhooks/1234567890/abcdefghijklmnopqrstuvwxyz
?format=markdown when initializing this URL — you do not need to add it yourself.Step 3 — Apply the configurationExample Configuration
Below is a minimalnotifications block you can POST to POST /api/v1/settings/set/all:
Real-Time SSE Events
In addition to push notifications, Riven exposes a Server-Sent Events stream for live state changes. Any client — the frontend, a custom dashboard, or a script — can subscribe to an event channel and receive JSON payloads in real time.Available endpoints
| Endpoint | Description |
|---|---|
GET /api/v1/stream/event_types | Returns a list of all active event channel names |
GET /api/v1/stream/{event_type} | Opens an SSE stream for the given event type |
Get all event types
Subscribe to a stream
Connect to any event type with a standard SSE client. The stream stays open and delivers JSON-encoded data as events occur:item_update event payload — fires on every item state change:
notifications event payload — fires when an item reaches Completed:
SSE streams fire regardless of whether
notifications.enabled is true or false. The enabled flag controls only outbound Apprise calls.How Notifications Are Triggered
When Riven marks an itemCompleted, the notification service:
- Logs a success message with the total duration from request to completion.
- Publishes a
notificationsSSE event so the frontend can show a popup. - If
notifications.enabledistrueand the item’s type is inon_item_type, sends an Apprise notification to every configuredservice_url.
**Inception (2010)**) which renders correctly in Discord and other services that support it.