automation tool compatibility - degoya/rDownloader GitHub Wiki
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.
-
Create an API token under Settings โ Clients & API โ API & MCP with the areas
api:intake,api:queueandapi:readโ what the adapters need, and nothing that reaches settings, stored credentials or administration. Anapi:*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 atoken_usedentry in the audit log, like any other token. -
Add a download client in your automation tool:
-
SABnzbd โ host and port of rDownloader, no URL base (or
sabnzbdif 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.
-
SABnzbd โ host and port of rDownloader, no URL base (or
-
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.
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: โฆ"} |
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.
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):
- Issue an API token with the areas
api:intake,api:queueandapi:read, as in Setting it up. - In AriaNg's AriaNg Settings โ RPC, enter the RPC address
http(s)://<host>:<port>/jsonrpcโ host, port8710(or your reverse proxy's), path/jsonrpcโ with the HTTP protocol and the POST method. - 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.
-
addurland non-magneturlsare 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=truedo 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.
| 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.
-
Progress reporting is a snapshot. SABnzbd's
timeleftandetaare0:00:00andunknown; qBittorrent'sdlspeedis zero and itsetais8640000("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 thecategoryfilter โ 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.
- REST API โ the native API these sit beside
- Storage, categories and rules โ creating the category
- Watched folders โ the blackhole alternative
- Usenet and NZB ยท BitTorrent