Skip to content

Sonarr

Settings that live only in the app

Notification connections are stored in Sonarr's database, not in Git. chaski Download (id 4) fires on Import Complete only, so a season pack sends one push rather than one per episode; Sonarr (v4 and v5) sends that event with eventType: "Download". It was switched from On Import and On Upgrade on 2026-09-29, after a bulk add of 175 series sent 1,689 pushes in a day and spent the Pushover account's monthly quota.

Read or change connections through the API from inside the pod, where the key and port are environment variables. The response includes each webhook URL, so project it down to names and triggers before it reaches a terminal:

kubectl -n media exec deploy/sonarr -c app -- sh -c \
  'curl -s -H "X-Api-Key: $SONARR__AUTH__APIKEY" "http://localhost:$SONARR__SERVER__PORT/api/v3/notification"' \
  | jq -r '.[] | "\(.id) \(.name) " + ([to_entries[] | select((.key | startswith("on")) and .value == true) | .key] | join(","))'

RADARR__* works the same way in Radarr.

v5 upgrade

Moving from v4 to v5 migrates sonarr.db one way (schema 217 to 236), so reverting the image tag does not bring v4 back; a VolSync restore of the config volume taken before the upgrade does. The first v5 start runs those migrations before /ping answers, which is why the HelmRelease carries a startup probe with a 30-minute budget.

v5 rewrites AuthenticationMethod values None and Basic to Forms and, when the database has no user, creates one with a password written once to the log. The HelmRelease pins SONARR__AUTH__METHOD: Forms, and the ExternalSecret supplies SONARR__AUTH__INITIALUSERNAME and SONARR__AUTH__INITIALPASSWORD from the sonarr item's login fields, which v5 reads only when no user exists.