SABnzbd API compatibility¶
InfiniDysk implements the SABnzbd-compatible operations used by Sonarr, Radarr, and similar download clients. It is not a complete replacement for SABnzbd's administrative API.
Supported operations¶
version,status,fullstatus,get_config, andget_catsserver_statsandwarningssince 1.1.0addfileandaddurlqueuelisting andqueue&name=delete,queue&name=pause,queue&name=resume,queue&name=priority,queue&name=move, andqueue&name=change_catsince 1.1.0switchfor placing one queued job at another job's position or an absolute queue index since 1.2.0pause/resume(alsoqueue&name=pause/queue&name=resume) andspeedlimitsince 0.9.0change_catfor per-job category changes on queued items since 1.1.0retryfor failed history re-queue (single or bulk) since 0.9.0historylisting andhistory&name=delete
Queue and history filters accept both cat and category. The default category sentinel returned by get_cats is *.
Queue and history search since 1.2.0¶
Queue and history listing accept a literal, case-insensitive search term over
both the job name and NZB filename. Search is not regular-expression syntax.
They also accept one cat/category and one status; comma-separated filter
lists are not supported. Queue statuses are Downloading, Queued, and
Paused; history statuses are Completed and Failed. History additionally
accepts failed_only=1 as shorthand for status=Failed.
The admin UI uses InfiniDysk-specific sort and dir=asc|desc parameters for
display-only ordering. Queue supports name, category, status, and size;
history also supports completed. Text sorting is case-insensitive. Unknown
sort values retain the endpoint's normal order. Queue display sorting never
changes download priority or physical queue order.
Pause, resume, and speed limit since 0.9.0¶
mode=pause / mode=resume stop and restart new queue dequeues. Workers already downloading finish naturally unless a per-job pause cancels them. WebDAV mounts keep serving — pause does not interrupt playback. Queue JSON reports paused accurately. Items added with SAB priority -2 (Paused) are skipped until their priority changes; queue slots report status: Paused for those jobs.
Per-job pause and resume accept UUID(s) via value (comma-separated or repeated) or a JSON body {"nzo_ids":["…"]} on mode=pause, mode=resume, and the queue&name=pause / queue&name=resume aliases. Without ids, pause/resume applies to the whole queue coordinator (legacy global behavior).
mode=queue&name=priority sets priority for one or more jobs. Pass the SAB priority code as value2 (or priority): -2 Paused, -1 Low, 0 Normal, 1 High, 2 Force. Paused uses the same per-job pause path as queue&name=pause.
mode=switch&value=<nzo_id>&value2=<nzo_id-or-index> moves one queued job to the
target's original position and returns {"result":{"position":N,"priority":P}}.
Moving across priority bands adopts the target priority. Moving a paused job into
a non-paused band resumes it by clearing its scheduled retry delay. The
InfiniDysk-specific queue&name=move&value2=0|top bulk action remains the
shortcut for move-to-top.
mode=change_cat sets category for queued jobs (not actively downloading). Pass cat / category plus job id(s) in value or nzo_ids. Categories must match configured API categories.
mode=retry re-queues failed history items. Accepts a single value id or multiple ids (comma-separated / repeated value, or nzo_ids JSON). Bulk retry returns nzo_ids for successes and a failed array with per-item errors when some items cannot be retried. History bulk actions in the admin UI do not change category on retry (category is copied from the history row).
mode=speedlimit is accepted and stored and reflected in queue JSON (speedlimit / speedlimit_abs). Byte-accurate download throttling is not enforced yet — that work is tracked in #375.
Queue JSON reports live throughput for in-progress jobs since 1.1.0: per-slot timeleft (H:MM:SS, or D:HH:MM:SS past 24h), plus queue-level timeleft, kbpersec (KB/s), and speed (human units such as 1.3 M). Queued and paused slots report 0:00:00. status / fullstatus include paused, speedlimit, and speedlimit_abs; live speed stays on mode=queue.
Intentional differences¶
- Job identifiers are UUIDs rather than
SABnzbd_nzo_*strings. Treat them as opaque values. - Responses are JSON. The
output=xmloption is not implemented. - Queue and history roots contain the fields needed by supported download clients rather than every SABnzbd UI field.
- History has no separate archive tier.
history&name=deletepermanently removes matching history rows. - Ignore SAB history limit can ignore a client's
limit; InfiniDysk still enforces a server-side maximum page size. - Authentication failures use HTTP error status codes instead of always returning HTTP 200 with an error body.
- Active queue workers stay pinned at the front and are never preempted. A switch targeting that pinned prefix lands at the first waiting job; active sources cannot be moved. Negative queue indexes are rejected.
server_statsaggregates provider bandwidth from retainedProviderHourlyrollups (plus folded lifetime totals for all-time bytes). The per-serverdailymap and article counters are bounded by the hourly retention window — pruned buckets are not reconstructed.warningsreturns recent Warning-and-above log entries from the in-memory buffer.name=clearis accepted for SAB client compatibility but does not clear the buffer (support packs rely on it). Use Settings → Support to collect the full warning log.
addurl and private / LAN hosts since 0.8.0¶
mode=addurl fetches the NZB from the URL the download client supplies. Before each hop (including redirects), InfiniDysk rejects destinations that resolve to a non-public IP — an SSRF guard that also blocks Docker DNS / RFC1918 indexers unless allowlisted.
Allow destinations under Settings → SABnzbd → Trusted local hosts (api.addurl-trusted-hosts):
| Entry | Meaning |
|---|---|
prowlarr / hydra.lan |
Hostname match (case-insensitive) |
192.168.1.50 |
Exact IP |
192.168.1.0/24 / fd00::/8 |
CIDR for resolved addresses |
* |
Trust any non-public address (disables the guard) |
Only list hosts you control. Prefer mode=addfile when the client can upload the NZB itself.
The same allowlist can be set with TRUSTED_INTERNAL_HOSTS when the UI setting is empty — Environment variables.
Delete behavior¶
Queue delete accepts UUID(s), repeated value parameters, value=all, or value=all with cat / category to clear only that category. SAB del_files=1 has no extra effect (no incomplete-download directory).
History delete accepts UUIDs, value=all, or value=failed. The admin UI can delete mounted content for completed jobs with InfiniDysk-specific del_completed_files=1 — download clients should not send this after importing a symlink/STRM, or playback sources disappear. The history UI also offers Clear failed and Clear all actions that call history&name=delete with value=failed or value=all.
A History row vanishing after a successful Arr import is expected SAB-client cleanup, not a missing mount. Typical triggers: the Arr's Remove Completed download-client option, InfiniDysk Automatic Queue Management rules (those send removeFromClient=true, independent of Remove Completed), or a WebDAV DELETE of a /completed-symlinks/<category>/<release> folder. Those paths remove the history row and clear HistoryItemId; the WebDAV files stay.