Automate your seedbox with your own scripts
Your seedbox runs rTorrent, and rTorrent can be driven from outside: by your own scripts and by any app that speaks its XML-RPC. Files move over SFTP. Both use the Remote Access username and password from your Settings, so there is nothing to install and nothing to request.
You need your own seedbox with Remote Access. Every current plan (Nano, Basic, Krypher, Voltrix) has it. The Free plan doesn't, and neither do a few older download-only tiers.
Tools that sign in with your website email and password, such as unofficial "SonicBit API" packages, are not supported and are blocked. The two methods on this page are the supported way to automate.
What you can automate
- Torrents, over XML-RPC: add a magnet link or a .torrent file, list what is downloading and seeding, read progress, pause, resume, remove.
- Files, over SFTP: download finished files, upload, keep a folder in sync.
Remote downloads (direct links), apps, billing and account settings stay in the dashboard.
Your connection details
Go to your avatar menu (top-right) → Settings → Seedbox and scroll to RPC. Copy the Username, the Host / URL (it looks like ftp12.sonicb.it) and the XML-RPC Path (it looks like /USER_12345).
The password is your Remote Access password, not your website password. Set or change it under Settings → Remote Access → Change password. Letters and digits only, at least 6 characters with one capital and one number.
Your scripts talk to https://HOST/USER_12345 on port 443. With the examples above that is https://ftp12.sonicb.it/USER_12345.
Torrents from Python
Python's standard library is enough. Replace the four values at the top with yours.
import xmlrpc.client
USER, PASSWORD = "your_username", "YourRemotePassword1"
HOST, PATH = "ftp12.sonicb.it", "/USER_12345"
box = xmlrpc.client.ServerProxy(f"https://{USER}:{PASSWORD}@{HOST}{PATH}")
print(box.system.client_version()) # a quick "does it work"
# Everything in one call: hash, name, bytes done, total bytes, finished (1) or not (0)
rows = box.d.multicall2(
"", "main",
"d.hash=", "d.name=", "d.completed_bytes=", "d.size_bytes=", "d.complete=",
)
for torrent_hash, name, done, size, complete in rows:
print(f"{done * 100 // max(size, 1):3d}% {name}")
# Add a magnet link. It starts right away and saves into your downloads folder.
box.load.start("", "magnet:?xt=urn:btih:REPLACE_WITH_A_REAL_HASH")
# Pause, resume, remove (the hash comes from the list above)
box.d.stop(torrent_hash)
box.d.start(torrent_hash)
box.d.erase(torrent_hash) # removes the torrent, keeps the filesd.erase takes the torrent out of the client and leaves its files in place. Delete the files in My Drive or over SFTP when you no longer need them.
The same thing with curl
Any language that can send an HTTP POST works. This asks for the list of torrent hashes:
curl -u 'your_username:YourRemotePassword1' \
-H 'Content-Type: text/xml' \
--data '<?xml version="1.0"?><methodCall><methodName>download_list</methodName></methodCall>' \
https://ftp12.sonicb.it/USER_12345Files over SFTP
Use the same username and password on port 22. Your files are in the downloads folder.
# one file, with plain sftp
sftp your_username@ftp12.sonicb.it:downloads/Some.File.mkv .
# a whole folder, with rclone
# (run "rclone config" once and add an SFTP remote named "seedbox")
rclone copy seedbox:downloads/Some.Folder ./Some.Folder --progressKeep it light
Your script shares the torrent client with the dashboard, so a heavy script slows your own seedbox.
- Ask for the whole list with one
d.multicall2call instead of one call per torrent. - Check for changes every 30 seconds or slower. Faster polling gains nothing.
- Let each call finish. Use a timeout of a minute or more, and don't hang up early and retry in a loop.
When it doesn't work
- 401 Unauthorized: wrong username or Remote Access password. Set a fresh one under Settings → Remote Access.
- 404, or a redirect to a "not found" page: the path is wrong. It must be exactly the XML-RPC Path from Settings, such as
/USER_12345. - 503 Service Unavailable: your torrent client is stopped or restarting. Restart it under Settings → Seedbox → Restart seedbox and try again in a minute.
- Moved servers recently? The Host / URL changes with your server. Copy it again from Settings.
- Using Sonarr, Radarr or Lidarr? Those have their own guide.
- Still stuck? Contact support with the exact error your script prints.

