Skip to content

Instances & per-user defaults

Implementation contracts and behavior for instances & per-user defaults.

The instance registry supports sixteen service types: radarr, sonarr, chaptarr, lidarr, sabnzbd, qbittorrent, nzbget, transmission, deluge, rutorrent, tautulli, tracearr, jellyfin, emby, audiobookshelf, plex. qBittorrent takes either its WebUI username and password or, on 5.2 and newer, an api_key generated under Options > WebUI (sent as a Bearer token, no login call); a row holds one shape or the other, a create or update carrying one clears the stored other, and the admin list reports has_api_key for qBittorrent rows so the editor opens on the right shape without the key ever being served. Deluge takes only its web UI password (there is no username), and its stored URL is the web UI address (http://deluge:8112 by default) to which Cantinarr appends /json. ruTorrent takes an optional HTTP Basic username and password (only when the web server asks for them), and its stored URL is the ruTorrent address (http://rutorrent:8080, or the path ruTorrent is served under) to which Cantinarr appends /plugins/httprpc/action.php: reads go to rTorrent as XML-RPC through that plugin, and start, pause, remove, and remove-with-data go as ruTorrent’s own commands, because rTorrent refuses the raw start and stop calls from the untrusted connection the plugin forwards; remove-with-data runs through ruTorrent’s erasedata plugin (it ships with ruTorrent) and needs a ruTorrent that has been opened at least once, since that is when it learns rTorrent’s command names: until then Cantinarr says so and keeps the torrent. Tautulli and Tracearr are watch-history providers behind one handler (internal/watchhistory): admin-only, one global default, never grantable; Tracearr authenticates with the bearer key its Settings > General issues and is proved by its /api/v1/public/health call. Radarr, Sonarr, Chaptarr, and Lidarr use explicit assignments for requester access and support global routing defaults. Jellyfin, Emby, and Plex remain granted per user, without global defaults or arr routing/proxy access, but a granted user’s /api/config does list the instance (id, type, name) so the app can offer the access guide. Stored URLs must be absolute http/https with no credentials, query, or fragment, and every create/update (plus the dry-run POST /api/instances/test) proves reachability with a live connection check from the server: the only host that ever dials these URLs. Clients never receive them (/api/config omits the URL field), so cluster-internal names like http://radarr:7878 are fully supported and the arrs need no exposure beyond the server’s network. https instances need a certificate the server container trusts: add an internal CA to the image trust store, or use plain http on a trusted network: a self-signed cert otherwise fails the connection check with an x509 error. At most one instance per service type is the global default (enforced in the store: setting a new default clears the old one). Administrators can save a routing preference for each user among that user’s assigned instances. /api/config returns all explicit assignments to regular users, marks their effective default, and sets each automation service flag false without an assignment.

View the maintained source for this page.