WebUI API Documentation (qBittorrent v3.1.x)

Sylvain Lorinet edited this page Oct 17, 2015 · 2 revisions
Clone this wiki locally

Note

The WebUI API has been overhauled in qBittorrent v3.2.0 and its documentation is available here.

Table of Contents

  1. Authorization
  2. GET methods
    1. Shutdown qBittorrent
    2. Get torrent list
    3. Get torrent generic properties
    4. Get torrent trackers
    5. Get torrent contents
    6. Get global transfer info
    7. Get qBittorrent preferences
  3. POST methods
    1. Download torrent from URL
    2. Upload torrent from disk
    3. Add trackers to torrent
    4. Pause torrent
    5. Pause all torrents
    6. Resume torrent
    7. Resume all torrents
    8. Delete torrent
    9. Delete torrent with downloaded data
    10. Recheck torrent
    11. Increase torrent priority
    12. Decrease torrent priority
    13. Maximal torrent priority
    14. Minimal torrent priority
    15. Set file priority
    16. Get global download limit
    17. Set global download limit
    18. Get global upload limit
    19. Set global upload limit
    20. Get torrent download limit
    21. Set torrent download limit
    22. Get torrent upload limit
    23. Set torrent upload limit
    24. Set qBittorrent preferences
  4. Additional information
    1. Version 3.0.8 bugs

Authorization

Authorization requires using Authorization header inside GET/POST requests. qBittorrent uses the standard Digest Authorization type (using a MD5 hash generator).

For example on Python using requests:

import requests
from requests.auth import HTTPDigestAuth

response = requests.post('http://127.0.0.1:8080/command/download', {'urls': magnet_link}, auth=HTTPDigestAuth(username, password))
if not response.ok:
    response.raise_for_status()
response.content
  1. Digest Authorization standard

    This page describes how this auth method should ideally work. The most important thing there is response field generation. Response is generated like this: MD5 ( A1 + ':' + nonce + ':' + A2 ) where
    A1 is MD5 (username + ':' + realm + ':' + password)
    A2 is MD5 (<method type string (e.g. GET or POST)> + ':' + uri)

  2. Server Auth response

    When you fail Authorization or don't supply required header qBittorrent will send the following reply (example):

    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: Digest realm="Web UI Access", nonce="a3f396f2dcc1cafae73637e2ac321134", opaque="a3f396f2dcc1cafae73637e2ac321134", stale="false", algorithm="MD5", qop="auth"

    nonce and opaque values will be random, nevertheless it looks like matching them is not required for successful authorization - qBittorrent doesn't track user session.

  3. Client Auth request

    We will now generate our request to the server containing proper Authorization header based on the example above.

    1. User-Agent

      You can place whatever you want as user agent, it is not required anyway.
      User-Agent: Fiddler

    2. Host

      Server address or domain name.
      Host: 127.0.0.1

    3. Authorization

      This header is required.

      Authorization: Digest username="admin", realm="Web UI Access", nonce="a3f396f2dcc1cafae73637e2ac321134", uri="/", response="4067cfe4c029cd00b56076c78abd034c"
      

      All fields in this header are required. Since nonce is not tracked by qBittorrent you should MD5-generate it yourself either one-time or each time you do any request. uri is not checked, if you want to GET host/someurl and uri doesn't match this value - no problem, just remember that uri is used in response generation.

      In Short: You don't need a previous server reply in order to generate a proper request.

      You must supply Authorization header in any POST/GET request you issue.

    4. End Result

      Server reply:

      HTTP/1.1 401 Unauthorized
      WWW-Authenticate: Digest realm="Web UI Access", nonce="a3f396f2dcc1cafae73637e2ac321134", opaque="a3f396f2dcc1cafae73637e2ac321134", stale="false", algorithm="MD5", qop="auth"

      Client request:

      GET / HTTP/1.1
      User-Agent: Fiddler
      Host: 127.0.0.1
      Authorization: Digest username="admin", realm="Web UI Access", nonce="a3f396f2dcc1cafae73637e2ac321134", uri="/", response="4067cfe4c029cd00b56076c78abd034c"

GET methods

Shutdown qBittorrent

GET /command/shutdown HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string

Get torrent list

GET /json/torrents HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string

Server will return the following reply (example):

HTTP/1.1 200 OK
content-type: text/javascript
content-length: length

[{"hash":"0283b35cc14387a4f6d01de33aa012fb1b740df6","name":"Sword of the Stars II Enhanced Edition","size":"1.8 ГиБ","progress":1,"dlspeed":"0 Б/с","upspeed":"0 Б/с","priority":"*","num_seeds":"0","num_leechs":"0","ratio":"0.1","eta":"","state":"stalledUP"},{another_torrent_info}]

where

hash - torrent hash; most queries will use torrent hash as parameter
name - torrent name
size - size of files and folders in torrent selected for download; possible values:

  1. Unknown - this may happen, which means qBt couldn't determine torrent size for some reason
  2. X suffix - X B/KiB/MiB/GiB/TiB

    Proper suffix is appended automatically by qBt.

progress - float number for download completion percentage, where 1 == 100%, 0 == 0%, and, 0.58 == 58%
dlspeed and upspeed: torrent download and upload speed respectively, possible values:

  1. Unknown - qBt couldn't determine torrent speed for some reason
  2. X suffix/s - X B/KiB/MiB/GiB/TiB

priority - torrent number in priority queue; contains * if queuing is disabled or torrent is in seed mode
num_seeds and num_leechs - number of peers and lecchers
ratio - Uploaded/Downloaded ratio, rounded to first digit after comma; contains if ratio > 100
eta - contains if torrent is seeding only or eta >= 8640000 seconds; possible values:

  1. 0 - zero
  2. < 1m - less than a minute
  3. MMm - MM minutes
  4. HHh MMm - HH hours and MM minutes
  5. DDd HHh - DD days and HH hours

    DD/HH/MM values can be truncated if first digit is zero

state - torrent state, possible values:

  1. error - some error occurred, applies to paused torrents
  2. pausedUP - torrent is paused and has finished downloading
  3. pausedDL - torrent is paused and has NOT finished downloading
  4. queuedUP - queuing is enabled and torrent is queued for upload
  5. queuedDL - queuing is enabled and torrent is queued for download
  6. uploading - torrent is being seeded and data is being transfered
  7. stalledUP - torrent is being seeded, but no connection were made
  8. checkingUP - torrent has finished downloading and is being checked; this status also applies to preallocation (if enabled) and checking resume data on qBt startup
  9. checkingDL - same as checkingUP, but torrent has NOT finished downloading
  10. downloading - torrent is being downloaded and data is being transfered
  11. stalledDL - torrent is being downloaded, but no connection were made

BIG FAT WARNING: size, dlspeed, upspeed and eta suffixes (e.g. MiB, KiB/s) will depend on current language selected in qBt; these suffixes will be translated.

BIG FAT WARNING 2: Raw data this methods provides can exceed 40 KiB for ~200 torrents. Continuous polling is strongly discouraged for mobile clients.

Get torrent generic properties

Requires known torrent hash, get 'em from torrent list.

GET /json/propertiesGeneral/fae6e49afa359ab07c3ef169438ff95d870bc178 HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string

If your torrent hash is invalid server will reply with:

HTTP/1.1 200 OK
content-type: text/javascript
content-length: 0

Otherwise server will return the following reply (example):

HTTP/1.1 200 OK
content-type: text/javascript
content-length: length

{"save_path":"D:/Downloads/somefolder","creation_date":"16 ноября 2011 г. 20:52:54","piece_size":"4.0 МиБ","comment":"comment_string_if_any","total_wasted":"0 Б","total_uploaded":"41.9 ГиБ (0 Б за эту сессию)","total_downloaded":"261.2 МиБ (0 Б за эту сессию)","up_limit":"","dl_limit":"","time_elapsed":"53д 0ч (Раздается 0)","nb_connections":"0 (100 макс)","share_ratio":""}

where

path - path where torrent contents are saved, separated by slashes
creation_date - (translated string) date when torrent was added
piece_size - (translated string) torrent piece size
comment - torrent comment
total_wasted - (translated string) amount of data 'wasted'
total_uploaded and total_downloaded - (translated string) amounts of data uploaded and downloaded, value in parentheses count current session data only
up_limit and dl_limit - (translated string) upload and download speed limits for current torrent
time_elapsed - (translated string) total time active; value in parentheses represents current seeding time
nb_connections - (translated string) number of connections, value in parentheses represents maximum number of connections per torrent set in preferences
share_ratio - (translated string) UL/DL ratio; contains for ratios > 100

Get torrent trackers

Requires known torrent hash, get 'em from torrent list.

GET http://127.0.0.1/json/propertiesTrackers/fae6e49afa359ab07c3ef169438ff95d870bc178 HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string

If your torrent hash is invalid server will reply with:

HTTP/1.1 200 OK
content-type: text/javascript
content-length: 2

[]

Otherwise server will return the following reply (example):

HTTP/1.1 200 OK
content-type: text/javascript
content-length: length

[{"url":"http://someaddress/announce","status":"Работает","num_peers":"1","msg":""},{"url":"http://retracker.local/announce","status":"Не соединился","num_peers":"0","msg":""}]

where

url - tracker url
status - (translated string) tracker status; possible values:

  1. Working - tracker has been contacted and is working
  2. Updating... - tracker is currently being updated
  3. Not working - tracker has been contacted, but it is not working (or doesn't send proper replies)
  4. Not contacted yet - tracker has not been contacted yet

num_peers - number of peers for current torrent eported by tracker
msg - tracker message (there is no way of knowing what this message is - it's up to tracker admins)

Get torrent contents

Requires known torrent hash, get 'em from torrent list.

GET http://127.0.0.1/json/propertiesFiles/fae6e49afa359ab07c3ef169438ff95d870bc178 HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string

If your torrent hash is invalid server will reply with:

HTTP/1.1 200 OK
content-type: text/javascript
content-length: 0

Otherwise server will return the following reply (example):

HTTP/1.1 200 OK
content-type: text/javascript
content-length: length

[{"name":"Isekai no Seikishi Monogatari 01.mka","size":"70.4 МиБ","progress":0,"priority":0,"is_seed":true},{"name":"Isekai no Seikishi Monogatari 02.mka","size":"62.4 МиБ","progress":0,"priority":0}]

where

name - file name
size - (translated string) file size
progress - float value, indicating file progress; 0 == 0% and 1 == 100%
priority - file priority, possible values:

  1. 0 - do not download
  2. 1 - normal priority
  3. 2 - high priority
  4. 7 - maximal priority

is_seed - only present for the first file in torrent; true if torrent is in seed mode

Get global transfer info

This method returns info you usually see in qBt status bar.

GET http://127.0.0.1/json/transferInfo HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string

Server reply (example):

HTTP/1.1 200 OK
content-type: text/javascript
content-length: length

{"dl_info":"Приём: 0 Б/с - Передано: 0 Б","up_info":"Отдача: 209.9 КиБ/с - Передано: 7.2 ГиБ"}

where

dl_info - (translated string) contains current global downalod speed and global amount of data downaloded during this session
up_info - (translated string) contains current global upload speed and global amount of data uploaded during this session

Get qBittorrent preferences

GET http://127.0.0.1/json/preferences HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string

Server reply; contents may vary depending on which settings are present in qBittorrent.ini (example):

HTTP/1.1 200 OK
content-type: text/javascript
content-length: length

{"locale":"ru_RU","save_path":"C:/Users/Dayman/Downloads","temp_path_enabled":false,"temp_path":"C:/Users/Dayman/Documents/Downloads/temp","scan_dirs":["D:/Browser Downloads"],"download_in_scan_dirs":[false],"export_dir_enabled":false,"export_dir":"","mail_notification_enabled":false,"mail_notification_email":"","mail_notification_smtp":"smtp.changeme.com","mail_notification_ssl_enabled":false,"mail_notification_auth_enabled":false,"mail_notification_username":"","mail_notification_password":"","autorun_enabled":false,"autorun_program":"","preallocate_all":false,"queueing_enabled":true,"max_active_downloads":2,"max_active_torrents":200,"max_active_uploads":200,"dont_count_slow_torrents":false,"incomplete_files_ext":false,"listen_port":31498,"upnp":false,"dl_limit":3072,"up_limit":3072,"max_connec":500,"max_connec_per_torrent":100,"max_uploads_per_torrent":15,"enable_utp":true,"limit_utp_rate":false,"limit_tcp_overhead":true,"alt_dl_limit":1024,"alt_up_limit":2048,"scheduler_enabled":false,"schedule_from_hour":8,"schedule_from_min":0,"schedule_to_hour":20,"schedule_to_min":0,"scheduler_days":0,"dht":true,"dhtSameAsBT":true,"dht_port":6881,"pex":true,"lsd":true,"encryption":0,"anonymous_mode":false,"proxy_type":-1,"proxy_ip":"0.0.0.0","proxy_port":8080,"proxy_peer_connections":false,"proxy_auth_enabled":false,"proxy_username":"","proxy_password":"","ip_filter_enabled":false,"ip_filter_path":null,"web_ui_port":80,"web_ui_username":"admin","web_ui_password":"8888efb275743684292cff99f57867a9","bypass_local_auth":false,"use_https":false,"ssl_key":"","ssl_cert":"","dyndns_enabled":false,"dyndns_service":0,"dyndns_username":"","dyndns_password":"","dyndns_domain":"changeme.dyndns.org"}

where

locale - currently selected language (e.g. en_GB for english)
save_path - default save path for torrents, separated by slashes
temp_path_enabled - true if folder for incomplete torrents is enabled
temp_path - path for incomplete torrents, separated by slashes
scan_dirs - list of watch folders to add torrent automatically; slashes are used as path separators; list entries are separated by commas
download_in_scan_dirs - true if torrents should be downloaded to watch folder; list entries are separated by commas
export_dir_enabled - true if .torrent file should be copied to export directory upon adding
export_dir - path to directory to copy .torrent files if export_dir_enabled is enabled; path is separated by slashes
mail_notification_enabled - true if e-mail notification should be enabled
mail_notification_email - e-mail to send notifications to
mail_notification_smtp - smtp server for e-mail notifications
mail_notification_ssl_enabled - true if smtp server requires SSL connection
mail_notification_auth_enabled - true if smtp server requires authentication
mail_notification_username - username for smtp authentication
mail_notification_password - password for smtp authentication
autorun_enabled - true if external program should be run after torrent has finished downloading
autorun_program - program path/name/arguments to run if autorun_enabled is enabled; path is separated by slashes; you can use %f and %n arguments, which will be expanded by qBittorent as path_to_torrent_file and torrent_name (from the GUI; not the .torrent file name) respectively
preallocate_all - true if file preallocation should take place, otherwise sparse files are used
queueing_enabled - true if torrent queuing is enabled
max_active_downloads - maximum number of active simultaneous downloads
max_active_torrents - maximum number of active simultaneous downloads and uploads
max_active_uploads - maximum number of active simultaneous uploads
dont_count_slow_torrents - if true torrents w/o any activity (stalled ones) will not be counted towards max_active_* limits; see dont_count_slow_torrents for more information
incomplete_files_ext - if true .!qB extension will be appended to incomplete files
listen_port - port for incoming connections
upnp - true if UPnP/NAT-PMP is enabled
dl_limit - global download speed limit in KiB/s; -1 means no limit is applied
up_limit - global upload speed limit in KiB/s; -1 means no limit is applied
max_connec - maximum global number of simultaneous connections
max_connec_per_torrent - maximum number of simultaneous connections per torrent
max_uploads_per_torrent - maximum number of upload slots per torrent
enable_utp - true if uTP protocol should be enabled; this option is only available in qBittorent built against libtorrent version 0.16.X and higher
limit_utp_rate - true if [du]l_limit should be applied to uTP connections; this option is only available in qBittorent built against libtorrent version 0.16.X and higher
limit_tcp_overhead - true if [du]l_limit should be applied to estimated TCP overhead (service data: e.g. packet headers)
alt_dl_limit - alternative global download speed limit in KiB/s
alt_up_limit - alternative global upload speed limit in KiB/s
scheduler_enabled - true if alternative limits should be applied according to schedule
schedule_from_hour - scheduler starting hour
schedule_from_min - scheduler starting minute
schedule_to_hour - scheduler ending hour
schedule_to_min - scheduler ending minute
scheduler_days - scheduler days; possible values:

  1. 0 - every day
  2. 1 - every weekday
  3. 2 - every weekend
  4. 3 - every Monday
  5. 4 - every Tuesday
  6. 5 - every Wednesday
  7. 6 - every Thursday
  8. 7 - every Friday
  9. 8 - every Saturday
  10. 9 - every Sunday

dht - true if DHT is enabled
dhtSameAsBT - true if DHT port should match TCP port
dht_port - DHT port if dhtSameAsBT is false
pex - true if PeX is enabled
lsd - true if LSD is eanbled
encryption - possible values:

  1. 0 - prefer encryption
  2. 1 - force encryption on
  3. 2 - force encryption off

    First options allows you to use both encrypted and unencrypted connections (this is the default); other options are mutually exclusive: e.g. by forcing encryption on you won't be able to use unencrypted connections and vice versa.

anonymous_mode - if true anonymous mode will be enabled; read more here; this option is only available in qBittorent built against libtorrent version 0.16.X and higher
proxy_type - possible values:

  1. -1 - proxy is disabled
  2. 1 - HTTP proxy without authentication
  3. 2 - SOCKS5 proxy without authentication
  4. 3 - HTTP proxy with authentication
  5. 4 - SOCKS5 proxy with authentication
  6. 5 - SOCKS4 proxy without authentication

proxy_ip - proxy IP address or domain name
proxy_port - proxy port
proxy_peer_connections - true if peer and web seed connections should be proxified; this option will have any effect only in qBittorent built against libtorrent version 0.16.X and higher
proxy_auth_enabled - true proxy requires authentication; doesn't apply to SOCKS4 proxies
proxy_username - username for proxy authentication
proxy_password - password for proxy authentication
ip_filter_enabled - true if external IP filter should be enabled
ip_filter_path - path to IP filter file (.dat, .p2p, .p2b files are supported); path is separated by slashes
web_ui_port - WebUI port
web_ui_username - WebUI username
web_ui_password - MD5 hash of WebUI password; hash is generated from the following string: username:Web UI Access:plain_text_web_ui_password
bypass_local_auth - true if auithetication challenge for loopback address (127.0.0.1) should be disabled
use_https - true if WebUI HTTPS access is eanbled
ssl_key - SSL keyfile contents (this is a not a path)
ssl_cert - SSL certificate contents (this is a not a path)
dyndns_enabled - true if server DNS should be updated dynamically
dyndns_service - possible values:

  1. 0 - use DyDNS
  2. 1 - use NOIP

dyndns_username - username for DDNS service
dyndns_password - password for DDNS service
dyndns_domain - your DDNS domain name

POST methods

Please adjust you auth string aacordingly for POST methods.

Download torrent from URL

This method can add torrents from urls and magnet links. BC links are also supported.

POST http://127.0.0.1/command/download HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string
Content-Type: application/x-www-form-urlencoded
Content-Length: length

urls=http://www.nyaa.eu/?page=download%26tid=305093%0Ahttp://www.nyaa.eu/?page=download%26tid=305255%0Amagnet:?xt=urn:btih:4c284ebef5bf0d967e2e174cfe825d9fb40ae5e1%26dn=QBittorrent+2.8.4+Win7+Vista+64+working+version%26tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80%26tr=udp%3A%2F%2Ftracker.publicbt.com%3A80%26tr=udp%3A%2F%2Ftracker.istole.it%3A6969%26tr=udp%3A%2F%2Ftracker.ccc.de%3A80

Please note that:

  1. Content-Type: application/x-www-form-urlencoded is required
  2. urls contains a list of links; links are separated with %0A (LF newline)
  3. http://, https://, magnet: and bc://bt/ links are supported
  4. Links' contents must be escaped, e.g. & becomes %26 (don't know about other characters but ampersand MUST be escaped)

No matter if successful or not server will return the following reply:

HTTP/1.1 200 OK

Upload torrent from disk

POST http://127.0.0.1/command/upload HTTP/1.1
Content-Type: multipart/form-data; boundary=-------------------------acebdf13572468
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string
Content-Length: length

---------------------------acebdf13572468
Content-Disposition: form-data; name="torrents"; filename="8f18036b7a205c9347cb84a253975e12f7adddf2.torrent"
Content-Type: application/x-bittorrent

file_binary_data_goes_here
---------------------------acebdf13572468
Content-Disposition: form-data; name="torrents"; filename="UFS.torrent"
Content-Type: application/x-bittorrent

file_binary_data_goes_here
---------------------------acebdf13572468--

The above example will add two torrent files. file_binary_data_goes_here represents raw data of torrent file (basically a byte array).

No matter if successful or not server will return the following reply:

HTTP/1.1 200 OK
content-type: text/html
content-length: 64

<script type="text/javascript">window.parent.hideAll();</script>HTTP/1.1 200 OK
content-type: text/html
content-length: 64

<script type="text/javascript">window.parent.hideAll();</script>

Add trackers to torrent

Requires known torrent hash, get 'em from torrent list.

POST http://127.0.0.1/command/addTrackers HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string
Content-Type: application/x-www-form-urlencoded
Content-Length: length

hash=fae6e49afa359ab07c3ef169438ff95d870bc178&urls=http://192.168.0.1/announce%0Audp://192.168.0.1:3333/dummyAnnounce

This adds two trackers to torrent with hash fae6e49afa359ab07c3ef169438ff95d870bc178. Note %0A (aka LF newline) between trackers. Ampersand in tracker urls MUST be escaped.

No matter if successful or not server will return the following reply:

HTTP/1.1 200 OK

Pause torrent

Requires known torrent hash, get 'em from torrent list.

POST http://127.0.0.1/command/pause HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string
Content-Type: application/x-www-form-urlencoded
Content-Length: length

hash=fae6e49afa359ab07c3ef169438ff95d870bc178

No matter if successful or not server will return the following reply:

HTTP/1.1 200 OK

Pause all torrents

POST http://127.0.0.1/command/pauseall HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string
Content-Length: 0

No matter if successful or not server will return the following reply:

HTTP/1.1 200 OK

Resume torrent

Requires known torrent hash, get 'em from torrent list.

POST http://127.0.0.1/command/resume HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string
Content-Type: application/x-www-form-urlencoded
Content-Length: length

hash=fae6e49afa359ab07c3ef169438ff95d870bc178

No matter if successful or not server will return the following reply:

HTTP/1.1 200 OK

Resume all torrents

POST http://127.0.0.1/command/resumeall HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string
Content-Length: 0

No matter if successful or not server will return the following reply:

HTTP/1.1 200 OK

Delete torrent

Requires known torrent hash, get 'em from torrent list.

POST http://127.0.0.1/command/delete HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string
Content-Type: application/x-www-form-urlencoded
Content-Length: length

hashes=fae6e49afa359ab07c3ef169438ff95d870bc178

hashes can contain multiple hashes separated by |

No matter if successful or not server will return the following reply:

HTTP/1.1 200 OK

Delete torrent with downloaded data

Requires known torrent hash, get 'em from torrent list.

POST http://127.0.0.1/command/deletePerm HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string
Content-Type: application/x-www-form-urlencoded
Content-Length: length

hashes=fae6e49afa359ab07c3ef169438ff95d870bc178

hashes can contain multiple hashes separated by |

No matter if successful or not server will return the following reply:

HTTP/1.1 200 OK

Recheck torrent

Requires known torrent hash, get 'em from torrent list.

POST http://127.0.0.1/command/recheck HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string
Content-Type: application/x-www-form-urlencoded
Content-Length: length

hash=fae6e49afa359ab07c3ef169438ff95d870bc178

No matter if successful or not server will return the following reply:

HTTP/1.1 200 OK

Increase torrent priority

Requires known torrent hash, get 'em from torrent list.

POST http://127.0.0.1/command/increasePrio HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string
Content-Type: application/x-www-form-urlencoded
Content-Length: length

hashes=fae6e49afa359ab07c3ef169438ff95d870bc178

hashes can contain multiple hashes separated by |

No matter if successful or not server will return the following reply:

HTTP/1.1 200 OK

Decrease torrent priority

Requires known torrent hash, get 'em from torrent list.

POST http://127.0.0.1/command/decreasePrio HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string
Content-Type: application/x-www-form-urlencoded
Content-Length: length

hashes=fae6e49afa359ab07c3ef169438ff95d870bc178

hashes can contain multiple hashes separated by |

No matter if successful or not server will return the following reply:

HTTP/1.1 200 OK

Maximal torrent priority

Requires known torrent hash, get 'em from torrent list.

POST http://127.0.0.1/command/topPrio HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string
Content-Type: application/x-www-form-urlencoded
Content-Length: length

hashes=fae6e49afa359ab07c3ef169438ff95d870bc178

hashes can contain multiple hashes separated by |

No matter if successful or not server will return the following reply:

HTTP/1.1 200 OK

Minimal torrent priority

Requires known torrent hash, get 'em from torrent list.

POST http://127.0.0.1/command/bottomPrio HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string
Content-Type: application/x-www-form-urlencoded
Content-Length: length

hashes=fae6e49afa359ab07c3ef169438ff95d870bc178

hashes can contain multiple hashes separated by |

No matter if successful or not server will return the following reply:

HTTP/1.1 200 OK

Set file priority

Requires known torrent hash, get 'em from torrent list.

POST http://127.0.0.1/command/setFilePrio HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string
Content-Type: application/x-www-form-urlencoded
Content-Length: length

hash=fae6e49afa359ab07c3ef169438ff95d870bc178&id=0&priority=7

Please consult torrent contents API for possible priority values. id values coresspond to contents returned by torrent contents API, e.g. id=0 for first file, id=1 for second file, etc.

No matter if successful or not server will return the following reply:

HTTP/1.1 200 OK

Get global download limit

POST http://127.0.0.1/command/getGlobalDlLimit HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string
Content-Length: 0

Server reply (example):

HTTP/1.1 200 OK
content-type: text/html
content-length: length

3145728

3145728 is the value of current global download speed limit in bytes; this value will be zero if no limit is applied.

Set global download limit

POST http://127.0.0.1/command/setGlobalDlLimit HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string
Content-Type: application/x-www-form-urlencoded
Content-Length: length

limit=4194304

limit is global download speed limit you want to set in bytes.

No matter if successful or not server will return the following reply:

HTTP/1.1 200 OK

Get global upload limit

POST http://127.0.0.1/command/getGlobalUpLimit HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string
Content-Length: 0

Server reply (example):

HTTP/1.1 200 OK
content-type: text/html
content-length: length

3145728

3145728 is the value of current global upload speed limit in bytes; this value will be zero if no limit is applied.

Set global upload limit

POST http://127.0.0.1/command/setGlobalUpLimit HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string
Content-Type: application/x-www-form-urlencoded
Content-Length: length

limit=4194304

limit is global upload speed limit you want to set in bytes.

No matter if successful or not server will return the following reply:

HTTP/1.1 200 OK

Get torrent download limit

Requires known torrent hash, get 'em from torrent list.

POST http://127.0.0.1/command/getTorrentDlLimit HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string
Content-Type: application/x-www-form-urlencoded
Content-Length: length

hash=fae6e49afa359ab07c3ef169438ff95d870bc178

Server reply (example):

HTTP/1.1 200 OK
content-type: text/html
content-length: length

338944

338944 is the value of current torrent download speed limit in bytes; this value will be zero if no limit is applied.

Set torrent download limit

Requires known torrent hash, get 'em from torrent list.

POST http://127.0.0.1/command/setTorrentDlLimit HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string
Content-Type: application/x-www-form-urlencoded
Content-Length: length

hash=fae6e49afa359ab07c3ef169438ff95d870bc178&limit=131072

limit is torrent download speed limit you want to set in bytes.

No matter if successful or not server will return the following reply:

HTTP/1.1 200 OK

Get torrent upload limit

Requires known torrent hash, get 'em from torrent list.

POST http://127.0.0.1/command/getTorrentUpLimit HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string
Content-Type: application/x-www-form-urlencoded
Content-Length: length

hash=fae6e49afa359ab07c3ef169438ff95d870bc178

Server reply (example):

HTTP/1.1 200 OK
content-type: text/html
content-length: length

338944

338944 is the value of current torrent upload speed limit in bytes; this value will be zero if no limit is applied.

Set torrent upload limit

Requires known torrent hash, get 'em from torrent list.

POST http://127.0.0.1/command/setTorrentUpLimit HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string
Content-Type: application/x-www-form-urlencoded
Content-Length: length

hash=fae6e49afa359ab07c3ef169438ff95d870bc178&limit=131072

limit is torrent download speed limit you want to set in bytes.

No matter if successful or not server will return the following reply:

HTTP/1.1 200 OK

Set qBittorrent preferences

POST http://127.0.0.1/command/setPreferences HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1
Authorization: your_auth_string
Content-Type: application/x-www-form-urlencoded
Content-Length: length

json={"save_path":"C:/Users/Dayman/Downloads","queueing_enabled":false,"scan_dirs":["C:/Games","D:/Downloads"],"download_in_scan_dirs":[false,true]}

No matter if successful or not server will return the following reply:

HTTP/1.1 200 OK
  1. There is no need to pass all possible preferences' token:value pairs if you only want to change one option
  2. When setting preferences scan_dirs must always be accompanied with download_in_scan_dirs
  3. Paths in scan_dirs must exist, otherwise this option will have no effect
  4. String values must be quoted; integer and boolean values must never be quoted

For a list of possible preference options see Get qBittorrent preferences

Additional information

Version 3.0.8 bugs

The following WebUI-related bugs exist in qBittorent v3.0.8 and lower:

  1. JSON generation bugs
    • ' and & (apostrophe and ampersand) characters are escaped by backslash \
  2. JSON parsing bugs
    • When setting qBittorent preferences JSON values, containing : semicolons will be disregarded; this mostly affects Windows users, whose paths start with DiskName:\
    • When setting qBittorent preferences JSON bool lists (e.g. "download_in_scan_dirs":[false,true]) will be treated as all bool values in the list are false, this doesn't affect bool values outside JSON lists