Skip to content

Configuration

Everything narratorr-requests connects to — narratorr itself and your notifiers — is configured on the admin Settings page, not in environment variables. The page has a left-nav with four sections: General, Narratorr, Notifications, and System. Secret values are stored encrypted at rest (the at-rest key comes from SETTINGS_KEY, or is derived from SESSION_SECRET when that’s unset).

The Narratorr connection and every notifier have a Test button that validates the current form values without saving, so you can confirm something works before committing it. Each section saves on its own — a Save button appears once you’ve changed a value.

Set the Public URL to where the app is reached (e.g. https://requests.example.com). It’s used to deep-link notifications back to the request queue / users page, so an admin can jump straight from a ping to the thing that needs action. Leave it blank and notifications simply omit the link.

This section also sets the app-wide default request quota — the rolling-window cap that applies to every user who hasn’t been given a per-user override (see Managing quotas). Two modes:

ModeEffect
No default capUnlimited requests for everyone without a per-user override.
Limit requestsA positive cap over a friendly window — day / week / month, mapped to a fixed 1 / 7 / 30-day rolling window (not a calendar period).

There’s no DEFAULT_REQUEST_QUOTA environment variable — this lives entirely in Settings so it can change without a redeploy.

The lifeline — required for search and requests to work. Two fields:

FieldNotes
Server URLnarratorr’s full base URL, including scheme and port (e.g. http://narratorr:3000). Add a subpath if narratorr sits behind a reverse-proxy (e.g. http://host:3000/lib).
API keyFrom narratorr → Settings → API. Masked once saved; leave blank to keep the current key.
  1. Enter the Server URL and API key.
  2. Click Test — it validates the current values (using the stored key if you left the API key blank). Fix anything until it passes.
  3. Save.

On the Notifications section you add any number of notifiers — there’s no fixed set of channels. Click Add Notifier, pick a type, choose the events it fires on, and fill in its fields. Each saved notifier has its own Test (sends a real sample) and Delete. There’s no enable/disable toggle — a notifier is live by existing; delete it to stop it.

Every notifier is admin-facing — notifications go to you, the admin, never the requester — and fires only on the events you select:

EventFires when
New requestA user requested a book and it’s awaiting your review.
New signupA new user signed up and is awaiting approval.
Request failedAn approved request couldn’t be acquired — so you can step in (manual search, deny, refund).
TypeKey fields
ntfyServer URL (defaults to https://ntfy.sh), topic, optional access token, optional priority.
Email (SMTP)Host / port, an implicit-TLS toggle (465 vs STARTTLS on 587), optional username / password, a From address, and the admin recipient.
DiscordA Discord webhook URL (optionally include the cover image).
SlackA Slack incoming-webhook URL.
TelegramBot token + chat ID.
PushoverApp token + user key.
GotifyServer URL + app token.
WebhookA generic JSON POST to any URL — the escape hatch for anything not listed.

Every secret — the narratorr API key and all notifier credentials (tokens, keys, and capability webhook URLs) — is never returned to the browser. A saved secret shows masked (•••••••• (unchanged), or a host-only hint for a capability URL). On save:

  • Leave a secret blank → the stored value is kept.
  • Type a new value → it replaces the stored one.
  • Clear it → it’s removed.

The Test button follows the same rule, so testing an existing connector with the secret left blank uses the stored secret — you don’t have to re-enter it just to test.

A read-only section for a quick server/environment snapshot — no configuration here:

FieldShows
VersionThe running narratorr-requests version.
BuiltThe image build timestamp.
Node.jsThe Node.js runtime version.
OSThe host/container OS.
Database SizeThe SQLite database file size.
narratorrThe connected narratorr’s version + reachability, sourced from narratorr’s own /api/v1/system — at a glance, without leaving Settings.