This WebUI API documentation applies to qBittorrent v4.1+. For other WebUI API versions, visit [WebUI API](https://github.com/qbittorrent/qBittorrent/wiki#WebUI-API).
- Change `/sync/maindata``categories` field from `array` to `object` ([#9228](https://github.com/qbittorrent/qBittorrent/pull/9228))
- Add `savePath` field to `/torrents/createCategory` ([#9228](https://github.com/qbittorrent/qBittorrent/pull/9228)). This method now requires the category to already exist and will not create new categories.
- Remove `web_ui_password` field from `/app/preferences`, this field is still writable in `/app/setPreferences` method ([#9942](https://github.com/qbittorrent/qBittorrent/pull/9942))
- Add `stalled`, `stalled_uploading` and `stalled_downloading` as possible values for the `filter` parameter in `/torrents/info` ([#11825](https://github.com/qbittorrent/qBittorrent/pull/11825))
- Add various fields to `/app/preferences` and `/app/setPreferences` (`piece_extent_affinity`, `web_ui_secure_cookie_enabled`, `web_ui_max_auth_fail_count`, `web_ui_ban_duration`, `stop_tracker_timeout`) ([#11781](https://github.com/qbittorrent/qBittorrent/pull/11781), [#11726](https://github.com/qbittorrent/qBittorrent/pull/11726), [#12004](https://github.com/qbittorrent/qBittorrent/pull/12004), [#11834](https://github.com/qbittorrent/qBittorrent/pull/11834))
## API v2.5.0 ##
- Removes `enable_super_seeding` as fields from `/app/preferences` and `/app/setPreferences` ([#12423](https://github.com/qbittorrent/qBittorrent/pull/12423))
## API v2.5.1 ##
- Add `web_ui_use_custom_http_headers_enabled`, `web_ui_custom_http_headers`, `rss_download_repack_proper_episodes` and `rss_smart_episode_filters` as fields to `/app/preferences` and `/app/setPreferences` ([#12579](https://github.com/qbittorrent/qBittorrent/pull/12579), [#12549](https://github.com/qbittorrent/qBittorrent/pull/12549))
- Add `/rss/markAsRead` and `/rss/matchingArticles` methods ([#12549](https://github.com/qbittorrent/qBittorrent/pull/12549))
## API v2.6.0 ##
- Removed `/search/categories` method and modified `/search/plugins` method's response ([#12705](https://github.com/qbittorrent/qBittorrent/pull/12705))
## API v2.6.1 ##
- Exposed `contentPath` via the `content_path` field in the response to `/torrents/info` ([#13625](https://github.com/qbittorrent/qBittorrent/pull/13625))
## API v2.6.2 ##
- Added `tags` optional field to `/torrents/add` ([#13882](https://github.com/qbittorrent/qBittorrent/pull/13882))
## API v2.8.0 ##
- Added `/torrents/renameFolder` method and modified `/torrents/renameFile` method's parameters ([#13995](https://github.com/qbittorrent/qBittorrent/pull/13995))
Note that this change was released in qBittorrent v4.3.3, but the WebAPI version was incorrectly set to v2.7.0 (see [#14275](https://github.com/qbittorrent/qBittorrent/pull/14275#issuecomment-766310862) for details)
## API v2.8.1 ##
- Added `ratioLimit` and `seedingTimeLimit` optional fields to `/torrents/add` ([#14519](https://github.com/qbittorrent/qBittorrent/pull/14519))
- Added `seeding_time` field to `/torrents/info` ([#14554](https://github.com/qbittorrent/qBittorrent/pull/14554))
## API v2.8.2 ##
- Added `indexes` optional parameter to `/torrents/files` ([#14795](https://github.com/qbittorrent/qBittorrent/pull/14795))
- Added `index` field to `/torrents/files` response ([#14795](https://github.com/qbittorrent/qBittorrent/pull/14795))
## API v2.8.3 ##
- Added `tag` optional parameter to `/torrents/info` ([#15152](https://github.com/qbittorrent/qBittorrent/pull/15152))
# General Information #
- All API methods are under `/api/v2/APIName/methodName`, where `APIName` is a certain subgroup of API methods whose functionality is related.
- Either `GET` or `POST` can be used as the request type for all API methods.
- All API methods require [authentication](#authentication) (except the `/api/v2/auth/login` method itself, obviously).
# Authentication #
All Authentication API methods are under "auth", e.g.: `/api/v2/auth/methodName`.
403 | User's IP is banned for too many failed login attempts
200 | All other scenarios
Upon success, the response will contain a cookie with your SID. You must supply the cookie whenever you want to perform an operation that requires authentication.
Example showing how to login and execute a command that requires authentication using `curl`:
The response is a JSON object with several fields (key-value) pairs representing the application's settings. The contents may vary depending on which settings are present in qBittorrent.ini.
`locale` | string | Currently selected language (e.g. en_GB for English)
`create_subfolder_enabled` | bool | True if a subfolder should be created when adding a torrent
`start_paused_enabled` | bool | True if torrents should be added in a Paused state
`auto_delete_mode` | integer | TODO
`preallocate_all` | bool | True if disk space should be pre-allocated for all files
`incomplete_files_ext` | bool | True if ".!qB" should be appended to incomplete files
`auto_tmm_enabled` | bool | True if Automatic Torrent Management is enabled by default
`torrent_changed_tmm_enabled` | bool | True if torrent should be relocated when its Category changes
`save_path_changed_tmm_enabled` | bool | True if torrent should be relocated when the default save path changes
`category_changed_tmm_enabled` | bool | True if torrent should be relocated when its Category's save path changes
`save_path` | string | Default save path for torrents, separated by slashes
`temp_path_enabled` | bool | True if folder for incomplete torrents is enabled
`temp_path` | string | Path for incomplete torrents, separated by slashes
`scan_dirs` | object | Property: directory to watch for torrent files, value: where torrents loaded from this directory should be downloaded to (see list of possible values below). Slashes are used as path separators; multiple key/value pairs can be specified
`export_dir` | string | Path to directory to copy .torrent files to. Slashes are used as path separators
`export_dir_fin` | string | Path to directory to copy .torrent files of completed downloads to. Slashes are used as path separators
`mail_notification_enabled` | bool | True if e-mail notification should be enabled
`mail_notification_sender` | string | e-mail where notifications should originate from
`mail_notification_email` | string | e-mail to send notifications to
`mail_notification_smtp` | string | smtp server for e-mail notifications
`mail_notification_ssl_enabled` | bool | True if smtp server requires SSL connection
`mail_notification_auth_enabled` | bool | True if smtp server requires authentication
`mail_notification_username` | string | Username for smtp authentication
`mail_notification_password` | string | Password for smtp authentication
`autorun_enabled` | bool | True if external program should be run after torrent has finished downloading
`autorun_program` | string | 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
`queueing_enabled` | bool | True if torrent queuing is enabled
`max_active_downloads` | integer | Maximum number of active simultaneous downloads
`max_active_torrents` | integer | Maximum number of active simultaneous downloads and uploads
`max_active_uploads` | integer | Maximum number of active simultaneous uploads
`dont_count_slow_torrents` | bool | If true torrents w/o any activity (stalled ones) will not be counted towards `max_active_*` limits; see [dont_count_slow_torrents](https://www.libtorrent.org/reference-Settings.html#dont_count_slow_torrents) for more information
`slow_torrent_dl_rate_threshold` | integer | Download rate in KiB/s for a torrent to be considered "slow"
`slow_torrent_ul_rate_threshold` | integer | Upload rate in KiB/s for a torrent to be considered "slow"
`slow_torrent_inactive_timer` | integer | Seconds a torrent should be inactive before considered "slow"
`max_ratio_enabled` | bool | True if share ratio limit is enabled
`max_ratio` | float | Get the global share ratio limit
`max_ratio_act` | integer | Action performed when a torrent reaches the maximum share ratio. See list of possible values here below.
`listen_port` | integer | Port for incoming connections
`upnp` | bool | True if UPnP/NAT-PMP is enabled
`random_port` | bool | True if the port is randomly selected
`dl_limit` | integer | Global download speed limit in KiB/s; `-1` means no limit is applied
`up_limit` | integer | Global upload speed limit in KiB/s; `-1` means no limit is applied
`max_connec` | integer | Maximum global number of simultaneous connections
`max_connec_per_torrent` | integer | Maximum number of simultaneous connections per torrent
`max_uploads` | integer | Maximum number of upload slots
`max_uploads_per_torrent` | integer | Maximum number of upload slots per torrent
`stop_tracker_timeout` | integer | Timeout in seconds for a `stopped` announce request to trackers
`enable_piece_extent_affinity` | bool | True if the advanced libtorrent option `piece_extent_affinity` is enabled
`bittorrent_protocol` | integer | Bittorrent Protocol to use (see list of possible values below)
`limit_utp_rate` | bool | 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` | bool | True if `[du]l_limit` should be applied to estimated TCP overhead (service data: e.g. packet headers)
`limit_lan_peers` | bool | True if `[du]l_limit` should be applied to peers on the LAN
`alt_dl_limit` | integer | Alternative global download speed limit in KiB/s
`alt_up_limit` | integer | Alternative global upload speed limit in KiB/s
`scheduler_enabled` | bool | True if alternative limits should be applied according to schedule
`scheduler_days` | integer | Scheduler days. See possible values here below
`dht` | bool | True if DHT is enabled
`pex` | bool | True if PeX is enabled
`lsd` | bool | True if LSD is enabled
`encryption` | integer | See list of possible values here below
`anonymous_mode` | bool | If true anonymous mode will be enabled; read more [here](Anonymous-Mode); this option is only available in qBittorent built against libtorrent version 0.16.X and higher
`proxy_type` | integer | See list of possible values here below
`proxy_ip` | string | Proxy IP address or domain name
`proxy_port` | integer | Proxy port
`proxy_peer_connections` | bool | 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_username` | string | Username for proxy authentication
`proxy_password` | string | Password for proxy authentication
`proxy_torrents_only` | bool | True if proxy is only used for torrents
`ip_filter_enabled` | bool | True if external IP filter should be enabled
`ip_filter_path` | string | Path to IP filter file (.dat, .p2p, .p2b files are supported); path is separated by slashes
`ip_filter_trackers` | bool | True if IP filters are applied to trackers
`web_ui_domain_list` | string | Comma-separated list of domains to accept when performing Host header validation
`web_ui_address` | string | IP address to use for the WebUI
`web_ui_port` | integer | WebUI port
`web_ui_upnp` | bool | True if UPnP is used for the WebUI port
`web_ui_username` | string | WebUI username
`web_ui_password` | string | For API ≥ v2.3.0: Plaintext WebUI password, not readable, write-only. For API <v2.3.0:MD5hashofWebUIpassword,hashisgeneratedfromthefollowingstring:`username:Web UI Access:plain_text_web_ui_password`
`web_ui_csrf_protection_enabled` | bool | True if WebUI CSRF protection is enabled
`web_ui_clickjacking_protection_enabled` | bool | True if WebUI clickjacking protection is enabled
`web_ui_secure_cookie_enabled` | bool | True if WebUI cookie `Secure` flag is enabled
`web_ui_max_auth_fail_count` | integer | Maximum number of authentication failures before WebUI access ban
`web_ui_ban_duration` | integer | WebUI access ban duration in seconds
`web_ui_session_timeout` | integer | Seconds until WebUI is automatically signed off
`web_ui_host_header_validation_enabled` | bool | True if WebUI host header validation is enabled
`bypass_local_auth` | bool | True if authentication challenge for loopback address (127.0.0.1) should be disabled
`bypass_auth_subnet_whitelist_enabled` | bool | True if webui authentication should be bypassed for clients whose ip resides within (at least) one of the subnets on the whitelist
`bypass_auth_subnet_whitelist` | string | (White)list of ipv4/ipv6 subnets for which webui authentication should be bypassed; list entries are separated by commas
`alternative_webui_enabled` | bool | True if an alternative WebUI should be used
`alternative_webui_path` | string | File path to the alternative WebUI
`use_https` | bool | True if WebUI HTTPS access is enabled
`ssl_key` | string | For API <v2.0.1:SSLkeyfilecontents(thisisanotapath)
`ssl_cert` | string | For API <v2.0.1:SSLcertificatecontents(thisisanotapath)
`web_ui_https_key_path` | string | For API ≥ v2.0.1: Path to SSL keyfile
`web_ui_https_cert_path` | string | For API ≥ v2.0.1: Path to SSL certificate
`dyndns_enabled` | bool | True if server DNS should be updated dynamically
`dyndns_service` | integer | See list of possible values here below
`dyndns_username` | string | Username for DDNS service
`dyndns_password` | string | Password for DDNS service
`utp_tcp_mixed_mode` | integer | μTP-TCP mixed mode algorithm (see list of possible values below)
Possible values of `scan_dirs`:
Value | Description
----------------------------|------------
`0` | Download to the monitored folder
`1` | Download to the default save path
`"/path/to/download/to"` | Download to this path
Possible values of `scheduler_days`:
Value | Description
-------|------------
`0` | Every day
`1` | Every weekday
`2` | Every weekend
`3` | Every Monday
`4` | Every Tuesday
`5` | Every Wednesday
`6` | Every Thursday
`7` | Every Friday
`8` | Every Saturday
`9` | Every Sunday
Possible values of `encryption`:
Value | Description
-------|------------
`0` | Prefer encryption
`1` | Force encryption on
`2` | Force encryption off
NB: the 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.
The response a JSON array. Each element of the array of objects (each object is the information relative to a peer) containing the following fields
Property | Type | Description
------------|---------|------------
`id` | integer | ID of the peer
`ip` | string | IP of the peer
`timestamp` | integer | Milliseconds since epoch
`blocked` | boolean | Whether or not the peer was blocked
`reason` | string | Reason of the block
# Sync #
Sync API implements requests for obtaining changes since the last request.
All Sync API methods are under "sync", e.g.: `/api/v2/sync/methodName`.
## Get main data ##
Name: `maindata`
**Parameters:**
Parameter | Type | Description
----------|---------|------------
`rid` | integer | Response ID. If not provided, `rid=0` will be assumed. If the given `rid` is different from the one of last server reply, `full_update` will be `true` (see the server reply details for more info)
`ratio`_optional_ | float | Torrent share ratio. Max ratio value: 9999.
`ratio_limit`_optional_ | float | TODO (what is different from `max_ratio`?)
`save_path`_optional_ | string | Path where this torrent's data is stored
`seeding_time`_optional_ | integer | Torrent elapsed time while complete (seconds)
`seeding_time_limit`_optional_ | integer | TODO (what is different from `max_seeding_time`?) seeding_time_limit is a per torrent setting, when Automatic Torrent Management is disabled, furthermore then max_seeding_time is set to seeding_time_limit for this torrent. If Automatic Torrent Management is enabled, the value is -2. And if max_seeding_time is unset it have a default value -1.
`seen_complete`_optional_ | integer | Time (Unix Epoch) when this torrent was last seen complete
`seq_dl`_optional_ | bool | True if sequential download is enabled
`size`_optional_ | integer | Total size (bytes) of files selected for download
`state`_optional_ | string | Torrent state. See table here below for the possible values
`super_seeding`_optional_ | bool | True if super seeding is enabled
`tags`_optional_ | string | Comma-concatenated tag list of the torrent
`time_active`_optional_ | integer | Total active time (seconds)
`total_size`_optional_ | integer | Total size (bytes) of all file in this torrent (including unselected ones)
`tracker`_optional_ | string | The first tracker with working status. Returns empty string if no tracker is working.
`rid` | integer | Response ID. If not provided, `rid=0` will be assumed. If the given `rid` is different from the one of last server reply, `full_update` will be `true` (see the server reply details for more info)
All Torrent management API methods are under "torrents", e.g.: `/api/v2/torrents/methodName`.
## Get torrent list ##
Name: `info`
**Parameters:**
Parameter | Type | Description
----------------------|---------|------------
`filter`_optional_ | string | Filter torrent list by state. Allowed state filters: `all`, `downloading`, `seeding`, `completed`, `paused`, `active`, `inactive`, `resumed`, `stalled`, `stalled_uploading`, `stalled_downloading`, `errored`
`category`_optional_ | string | Get torrents with the given category (empty string means "without category"; no "category" parameter means "any category" <-brokenuntil [#11748](https://github.com/qbittorrent/qBittorrent/issues/11748) isresolved).RemembertoURL-encodethecategoryname.Forexample,`My category`becomes`My%20category`
`tag`_optional_ | string | Get torrents with the given tag (empty string means "without tag"; no "tag" parameter means "any tag". Remember to URL-encode the category name. For example, `My tag` becomes `My%20tag`
`sort`_optional_ | string | Sort torrents by given key. They can be sorted using any field of the response's JSON array (which are documented below) as the sort key.
`reverse`_optional_ | bool | Enable reverse sorting. Defaults to `false`
`limit`_optional_ | integer | Limit the number of torrents returned
`offset`_optional_ | integer | Set offset (if less than 0, offset from end)
`hashes`_optional_ | string | Filter by hashes. Can contain multiple hashes separated by `\|`
`ratio` | float | Torrent share ratio. Max ratio value: 9999.
`ratio_limit` | float | TODO (what is different from `max_ratio`?)
`save_path` | string | Path where this torrent's data is stored
`seeding_time` | integer | Torrent elapsed time while complete (seconds)
`seeding_time_limit` | integer | TODO (what is different from `max_seeding_time`?) seeding_time_limit is a per torrent setting, when Automatic Torrent Management is disabled, furthermore then max_seeding_time is set to seeding_time_limit for this torrent. If Automatic Torrent Management is enabled, the value is -2. And if max_seeding_time is unset it have a default value -1.
`seen_complete` | integer | Time (Unix Epoch) when this torrent was last seen complete
`seq_dl` | bool | True if sequential download is enabled
`size` | integer | Total size (bytes) of files selected for download
`state` | string | Torrent state. See table here below for the possible values
`super_seeding` | bool | True if super seeding is enabled
`tags` | string | Comma-concatenated tag list of the torrent
`time_active` | integer | Total active time (seconds)
`total_size` | integer | Total size (bytes) of all file in this torrent (including unselected ones)
`tracker` | string | The first tracker with working status. Returns empty string if no tracker is working.
The response is a JSON array, where each element contains info about one tracker, with the following fields
Property | Type | Description
-----------------|----------|-------------
`url` | string | Tracker url
`status` | integer | Tracker status. See the table below for possible values
`tier` | integer | Tracker priority tier. Lower tier trackers are tried before higher tiers. Tier numbers are valid when `>= 0`, `< 0` is used as placeholder when `tier` does not exist for special entries (such as DHT).
`num_peers` | integer | Number of peers for current torrent, as reported by the tracker
`num_seeds` | integer | Number of seeds for current torrent, asreported by the tracker
`num_leeches` | integer | Number of leeches for current torrent, as reported by the tracker
`num_downloaded` | integer | Number of completed downlods for current torrent, as reported by the tracker
`msg` | string | Tracker message (there is no way of knowing what this message is - it's up to tracker admins)
Possible values of `status`:
Value | Description
-------|------------
0 | Tracker is disabled (used for DHT, PeX, and LSD)
1 | Tracker has not been contacted yet
2 | Tracker has been contacted and is working
3 | Tracker is updating
4 | Tracker has been contacted, but it is not working (or doesn't send proper replies)
Example:
```JSON
[
{
"msg":"",
"num_peers":100,
"status":2,
"url":"http://bttracker.debian.org:6969/announce"
},
{
another_tracker_info
}
]
```
## Get torrent web seeds ##
Requires knowing the torrent hash. You can get it from [torrent list](#get-torrent-list).
Name: `webseeds`
**Parameters:**
Parameter | Type | Description
----------|--------|------------
`hash` | string | The hash of the torrent you want to get the webseeds of
Requires knowing the torrent hashes. You can get it from [torrent list](#get-torrent-list).
Name: `pause`
**Parameters:**
Parameter | Type | Description
------------|----------|------------
`hashes` | string | The hashes of the torrents you want to pause. `hashes` can contain multiple hashes separated by `\|`, to pause multiple torrents, or set to `all`, to pause all torrents.
Requires knowing the torrent hashes. You can get it from [torrent list](#get-torrent-list).
Name: `resume`
**Parameters:**
Parameter | Type | Description
------------|----------|------------
`hashes` | string | The hashes of the torrents you want to resume. `hashes` can contain multiple hashes separated by `\|`, to resume multiple torrents, or set to `all`, to resume all torrents.
Requires knowing the torrent hashes. You can get it from [torrent list](#get-torrent-list).
Name: `delete`
**Parameters:**
Parameter | Type | Description
------------|----------|------------
`hashes` | string | The hashes of the torrents you want to delete. `hashes` can contain multiple hashes separated by `\|`, to delete multiple torrents, or set to `all`, to delete all torrents.
Requires knowing the torrent hashes. You can get it from [torrent list](#get-torrent-list).
Name: `recheck`
**Parameters:**
Parameter | Type | Description
------------|----------|------------
`hashes` | string | The hashes of the torrents you want to recheck. `hashes` can contain multiple hashes separated by `\|`, to recheck multiple torrents, or set to `all`, to recheck all torrents.
Requires knowing the torrent hashes. You can get it from [torrent list](#get-torrent-list).
Name: `reannounce`
**Parameters:**
Parameter | Type | Description
------------|----------|------------
`hashes` | string | The hashes of the torrents you want to reannounce. `hashes` can contain multiple hashes separated by `\|`, to reannounce multiple torrents, or set to `all`, to reannounce all torrents.
This adds two trackers to torrent with hash `8c212779b4abde7c6bc608063a0d008b7e40ce32`. Note `%0A` (aka LF newline) between trackers. Ampersand in tracker urls **MUST** be escaped.
Requires knowing the torrent hash. You can get it from [torrent list](#get-torrent-list).
Name: `increasePrio`
**Parameters:**
Parameter | Type | Description
------------|----------|------------
`hashes` | string | The hashes of the torrents you want to increase the priority of. `hashes` can contain multiple hashes separated by `\|`, to increase the priority of multiple torrents, or set to `all`, to increase the priority of all torrents.
Requires knowing the torrent hash. You can get it from [torrent list](#get-torrent-list).
Name: `decreasePrio`
**Parameters:**
Parameter | Type | Description
------------|----------|------------
`hashes` | string | The hashes of the torrents you want to decrease the priority of. `hashes` can contain multiple hashes separated by `\|`, to decrease the priority of multiple torrents, or set to `all`, to decrease the priority of all torrents.
Requires knowing the torrent hash. You can get it from [torrent list](#get-torrent-list).
Name: `topPrio`
**Parameters:**
Parameter | Type | Description
------------|----------|------------
`hashes` | string | The hashes of the torrents you want to set to the maximum priority. `hashes` can contain multiple hashes separated by `\|`, to set multiple torrents to the maximum priority, or set to `all`, to set all torrents to the maximum priority.
Requires knowing the torrent hash. You can get it from [torrent list](#get-torrent-list).
Name: `bottomPrio`
**Parameters:**
Parameter | Type | Description
------------|----------|------------
`hashes` | string | The hashes of the torrents you want to set to the minimum priority. `hashes` can contain multiple hashes separated by `\|`, to set multiple torrents to the minimum priority, or set to `all`, to set all torrents to the minimum priority.
`priority` | number | File priority to set (consult [torrent contents API](#get-torrent-contents) for possible values)
`id` values correspond to file position inside the array returned by [torrent contents API](#get-torrent-contents), e.g. `id=0` for first file, `id=1` for second file, etc.
Since 2.8.2 it is reccomended to use `index` field returned by [torrent contents API](#get-torrent-contents) (since the files can be filtered and the `index` value may differ from the position inside the response array).
`8c212779b4abde7c6bc608063a0d008b7e40ce32` is the hash of the torrent and `338944` its download speed limit in bytes per second; this value will be zero if no limit is applied.
## Set torrent download limit ##
Requires knowing the torrent hash. You can get it from [torrent list](#get-torrent-list).
`8c212779b4abde7c6bc608063a0d008b7e40ce32` is the hash of the torrent in the request and `338944` its upload speed limit in bytes per second; this value will be zero if no limit is applied.
## Set torrent upload limit ##
Requires knowing the torrent hash. You can get it from [torrent list](#get-torrent-list).
Requires knowing the torrent hash. You can get it from [torrent list](#get-torrent-list).
Name: `toggleSequentialDownload`
**Parameters:**
Parameter | Type | Description
------------|----------|------------
`hashes` | string | The hashes of the torrents you want to toggle sequential download for. `hashes` can contain multiple hashes separated by `\|`, to toggle sequential download for multiple torrents, or set to `all`, to toggle sequential download for all torrents.
Requires knowing the torrent hash. You can get it from [torrent list](#get-torrent-list).
Name: `toggleFirstLastPiecePrio`
**Parameters:**
Parameter | Type | Description
------------|----------|------------
`hashes` | string | The hashes of the torrents you want to toggle the first/last piece priority for. `hashes` can contain multiple hashes separated by `\|`, to toggle the first/last piece priority for multiple torrents, or set to `all`, to toggle the first/last piece priority for all torrents.
`pattern` | string | Pattern to search for (e.g. "Ubuntu 18.04")
`plugins` | string | Plugins to use for searching (e.g. "legittorrents"). Supports multiple plugins separated by `\|`. Also supports `all` and `enabled`
`category` | string | Categories to limit your search to (e.g. "legittorrents"). Available categories depend on the specified `plugins`. Also supports `all`
`sources` | string | Url or file path of the plugin to install (e.g. "[https://raw.githubusercontent.com/qbittorrent/search-plugins/master/nova3/engines/legittorrents.py](https://raw.githubusercontent.com/qbittorrent/search-plugins/master/nova3/engines/legittorrents.py)"). Supports multiple sources separated by `\|`
1. Main version. Should be changed only on some global changes (e.g. total redesign/relayout)
2. Changed on incompatible API changes (i.e. if it breaks outdated clients). E.g. if you change/remove something
3. Changed on compatible API changes (i.e. if it doesn't break outdated clients). E.g. if you add something new outdated clients still can access old subset of API.