automation tool compatibility - degoya/rDownloader GitHub Wiki

Automation tool compatibility

Sonarr, Radarr, Lidarr, Readarr and similar tools talk to download clients they already know. rDownloader answers as SABnzbd for Usenet and as qBittorrent for torrents, so it can be used as their download client without a plugin on either side. For front ends built for aria2 โ€” AriaNg, Motrix-style front ends, browser extensions and Android remotes โ€” it answers aria2's JSON-RPC as well.

No adapter can reach anything the native API does not already expose.

Setting it up

  1. Create an API token under Settings โ†’ Clients & API โ†’ API & MCP with the areas api:intake, api:queue and api:read โ€” what the adapters need, and nothing that reaches settings, stored credentials or administration. An api:* token works too. A read-only token does not work โ€” these adapters add and delete. Every accepted key shows its last use in the token list and leaves a token_used entry in the audit log, like any other token.
  2. Add a download client in your automation tool:
    • SABnzbd โ€” host and port of rDownloader, no URL base (or sabnzbd if the tool insists on one), and the token as the API key.
    • qBittorrent โ€” host and port, any username, and the token as the password.
    • aria2 โ€” see The aria2 adapter; it has to be switched on first.
  3. Create the category your tool uses โ€” tv-sonarr, movies-radarr โ€” under Settings โ†’ Storage & rules โ†’ Categories, with exactly that name.

Step 3 matters. The tool's own request to create its category is accepted without effect โ€” categories are configured here, and routing rules decide the destination โ€” so the category has to exist here for the tool to find what it queued.

The adapters can be used at the same time, from different tools, against one installation.

The SABnzbd adapter

Served at /api and /sabnzbd/api, kept strictly apart from the native /api/v1. Authenticated with apikey= in the query or an X-Api-Key header.

Failures answer HTTP 200 with {"status": false, "error": โ€ฆ}, as SABnzbd does.

Mode Status Notes
version Supported Reports a SABnzbd version whose API this subset matches
auth Supported Always apikey
get_config Supported complete_dir and the category list only
get_cats Supported * plus the configured categories
fullstatus, status Supported Reachability probe
queue Supported Packages that have not reached an end state
queue&name=delete Supported Single id or value=all; cancels and cleans up part files
queue&name=pause, name=resume Supported Applies to every download of the package
pause, resume Supported Everything not finished
history Supported Completed and failed packages, with storage โ€” also those that already left the queue, from the download history
history&name=delete Supported Comma-separated ids or all; the item leaves the tool's history, the native download history keeps it
addfile Supported Multipart NZB; queued immediately, not held for review
addurl Refused See Deliberate departures
addlocalfile Refused Answered like addurl; the message points at mode=addfile
del_files=1 Ignored See Deliberate departures
Everything else Reports failure {"status": false, "error": "not implemented: โ€ฆ"}

The qBittorrent adapter

Served at /api/v2, following qBittorrent's Web API v2. POST /api/v2/auth/login answers Ok. or Fails. and sets a SID cookie.

The cookie is a session value, not the API token, and a session ends with a restart, as in qBittorrent. An unauthenticated call answers 403, which clients read as "log in again".

Endpoint Status Notes
auth/login, auth/logout Supported Username ignored; password is the API token
app/version, app/webapiVersion Supported
app/preferences Supported save_path, plus fixed values for the temp-path, subfolder, preallocation, queueing, DHT, PeX, LSD and listen-port fields
torrents/info Supported category and filter=completed|downloading narrowing; the category is reported and matched the way qBittorrent does it
torrents/properties Supported
torrents/files Supported Resolved through the same evaluator as the interface
torrents/filePrio Partial Priority 0 deselects, anything else selects
torrents/add Supported .torrent upload and magnets; queued immediately
torrents/delete Supported deleteFiles=true does not delete finished files
torrents/pause, stop Supported A call that matched torrents but changed none reports failure; a partial one reports success and logs the rest
torrents/resume, start Supported Same
torrents/categories Supported The configured categories
torrents/createCategory, setCategory Accepted, no effect Categories are configured in rDownloader
torrents/setShareLimits Supported Mapped onto the per-torrent seeding override; -1 means "use the global setting", -2 means "no limit"
Everything else 404

Torrents are addressed by their BitTorrent info hash. A magnet whose metadata has not resolved yet is listed at once under the 40-character hex hash from its xt=urn:btih: parameter; a base32 or v2 btmh magnet is listed only once its metadata arrives.

The aria2 adapter

It is off by default. Switch it on under Settings โ†’ Clients & API โ†’ API & MCP, card aria2-compatible clients, with Answer aria2 JSON-RPC; while it is off, the path /jsonrpc does not exist (404). The card shows the RPC address to copy (Copy RPC address).

Setting up AriaNg (or another aria2 front end):

  1. Issue an API token with the areas api:intake, api:queue and api:read, as in Setting it up.
  2. In AriaNg's AriaNg Settings โ†’ RPC, enter the RPC address http(s)://<host>:<port>/jsonrpc โ€” host, port 8710 (or your reverse proxy's), path /jsonrpc โ€” with the HTTP protocol and the POST method.
  3. Paste the token as the secret token. A wrong, revoked or too narrow token is answered as aria2 answers a wrong secret (Unauthorized).
Method Status Notes
aria2.addUri Supported HTTP(S) and magnet links; only the first URI is taken, since aria2 reads the list as mirrors of one file. out names the file, pause adds it paused; dir is ignored โ€” the category and routing rules decide where it goes
aria2.tellStatus Supported
aria2.tellActive Supported Running, post-processing and seeding downloads
aria2.tellWaiting Supported Queued, waiting, blocked and paused
aria2.tellStopped Supported Completed, failed and cancelled
aria2.pause, forcePause, aria2.unpause Supported
aria2.remove, forceRemove Supported The download leaves the list with its part data; a finished file stays
aria2.getGlobalStat, aria2.getVersion Supported The version reported is aria2 1.37.0
system.listMethods, system.multicall Supported listMethods needs the secret too
Everything else Refused No such method

Each download has a 16-digit GID, the form aria2 uses, which stays valid across restarts. Not available: the WebSocket transport and its notifications, addTorrent, addMetalink, the option methods (getOption, changeGlobalOption โ€ฆ), removeDownloadResult and purgeDownloadResult. Upload figures are always zero.

Deliberate departures

  • addurl and non-magnet urls are refused. Fetching a URL chosen by the caller would let an API key reach whatever the service's machine can reach. Clients fall back to uploading the file, which all of them support.
  • del_files=1 / deleteFiles=true do not delete finished files. Transfers are cancelled and part files cleared; deleting completed data stays a deliberate action inside the application.
  • Categories are not created by a client; the call is acknowledged without effect.
  • No adapter appears in the OpenAPI document.

Which applications work

Application Usenet (SABnzbd) Torrents (qBittorrent)
Sonarr Contract-verified Contract-verified
Radarr Contract-verified Contract-verified
Lidarr Contract-verified Contract-verified
Readarr Contract-verified Contract-verified
Prowlarr Not applicable Not applicable

"Contract-verified" is not "tested against that application." The test suite replays the call sequence these four issue โ€” test connection, read configuration, add a release, poll for it, inspect it, remove it. It has not been run against real instances of them.

Known limits you would meet first

  • Progress reporting is a snapshot. SABnzbd's timeleft and eta are 0:00:00 and unknown; qBittorrent's dlspeed is zero and its eta is 8640000 ("infinite"). Clients display these but do not act on them.
  • Categories are matched by name. Both adapters report a job under the name of its category (* on the SABnzbd side for one without), and the qBittorrent adapter honours the category filter โ€” so the category your tool uses has to exist here under exactly that name.
  • Seed ratio and upload counters are zero on the qBittorrent side outside the seeding override. The native API is where torrent statistics live.

Related pages

โš ๏ธ **GitHub.com Fallback** โš ๏ธ