[ ApiGroup { name: "authentication", methods: [ ApiMethod { name: "login", description: Some( "Example showing how to login and execute a command that requires authentication using `curl`:\n\n```sh\n$ curl -i --header 'Referer: http://localhost:8080' --data 'username=admin&password=adminadmin' http://localhost:8080/api/v2/auth/login\nHTTP/1.1 200 OK\nContent-Encoding:\nContent-Length: 3\nContent-Type: text/plain; charset=UTF-8\nSet-Cookie: SID=hBc7TxF76ERhvIw0jQQ4LZ7Z1jQUV0tQ; path=/\n$ curl http://localhost:8080/api/v2/torrents/info --cookie \"SID=hBc7TxF76ERhvIw0jQQ4LZ7Z1jQUV0tQ\"\n```\n\nNote: Set `Referer` or `Origin` header to the exact same domain and port as used in the HTTP query `Host` header.", ), parameters: Some( [ String( TypeInfo { name: "username", is_optional: false, is_list: false, description: Some( "Username used to access the WebUI", ), type_description: None, }, ), String( TypeInfo { name: "password", is_optional: false, is_list: false, description: Some( "Password used to access the WebUI", ), type_description: None, }, ), ], ), return_type: None, url: "login", }, ApiMethod { name: "logout", description: None, parameters: None, return_type: None, url: "logout", }, ], description: Some( "All Authentication API methods are under \"auth\", e.g.: `/api/v2/auth/methodName`.\n\nqBittorrent uses cookie-based authentication.", ), url: "auth", }, ApiGroup { name: "application", methods: [ ApiMethod { name: "version", description: None, parameters: None, return_type: None, url: "version", }, ApiMethod { name: "webapiVersion", description: None, parameters: None, return_type: None, url: "webapiVersion", }, ApiMethod { name: "buildInfo", description: None, parameters: None, return_type: Some( ReturnType { is_list: false, parameters: [ ReturnTypeParameter { name: "qt", description: "QT version", return_type: String( TypeInfo { name: "qt", is_optional: false, is_list: false, description: Some( "QT version", ), type_description: None, }, ), }, ReturnTypeParameter { name: "libtorrent", description: "libtorrent version", return_type: String( TypeInfo { name: "libtorrent", is_optional: false, is_list: false, description: Some( "libtorrent version", ), type_description: None, }, ), }, ReturnTypeParameter { name: "boost", description: "Boost version", return_type: String( TypeInfo { name: "boost", is_optional: false, is_list: false, description: Some( "Boost version", ), type_description: None, }, ), }, ReturnTypeParameter { name: "openssl", description: "OpenSSL version", return_type: String( TypeInfo { name: "openssl", is_optional: false, is_list: false, description: Some( "OpenSSL version", ), type_description: None, }, ), }, ReturnTypeParameter { name: "bitness", description: "Application bitness (e.g. 64-bit)", return_type: Number( TypeInfo { name: "bitness", is_optional: false, is_list: false, description: Some( "Application bitness (e.g. 64-bit)", ), type_description: None, }, ), }, ], }, ), url: "buildInfo", }, ApiMethod { name: "shutdown", description: None, parameters: None, return_type: None, url: "shutdown", }, ApiMethod { name: "preferences", description: Some( "Possible fields:\n\nPossible values of `scan_dirs`:\n\nPossible values of `scheduler_days`:\n\nPossible values of `encryption`:\n\nNB: 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.\n\nPossible values of `proxy_type`:\n\nPossible values of `dyndns_service`:\n\nPossible values of `max_ratio_act`:\n\nPossible values of `bittorrent_protocol`:\n\nPossible values of `upload_choking_algorithm`:\n\nPossible values of `upload_slots_behavior`:\n\nPossible values of `utp_tcp_mixed_mode`:\n\nExample:\n\n```JSON\n{\n \"add_trackers\": \"\",\n \"add_trackers_enabled\": false,\n \"alt_dl_limit\": 10240,\n \"alt_up_limit\": 10240,\n \"alternative_webui_enabled\": false,\n \"alternative_webui_path\": \"/home/user/Documents/qbit-webui\",\n \"announce_ip\": \"\",\n \"announce_to_all_tiers\": true,\n \"announce_to_all_trackers\": false,\n \"anonymous_mode\": false,\n \"async_io_threads\": 4,\n \"auto_delete_mode\": 0,\n \"auto_tmm_enabled\": false,\n \"autorun_enabled\": false,\n \"autorun_program\": \"\",\n \"banned_IPs\": \"\",\n \"bittorrent_protocol\": 0,\n \"bypass_auth_subnet_whitelist\": \"\",\n \"bypass_auth_subnet_whitelist_enabled\": false,\n \"bypass_local_auth\": false,\n \"category_changed_tmm_enabled\": false,\n \"checking_memory_use\": 32,\n \"create_subfolder_enabled\": true,\n \"current_interface_address\": \"\",\n \"current_network_interface\": \"\",\n \"dht\": true,\n \"disk_cache\": -1,\n \"disk_cache_ttl\": 60,\n \"dl_limit\": 0,\n \"dont_count_slow_torrents\": false,\n \"dyndns_domain\": \"changeme.dyndns.org\",\n \"dyndns_enabled\": false,\n \"dyndns_password\": \"\",\n \"dyndns_service\": 0,\n \"dyndns_username\": \"\",\n \"embedded_tracker_port\": 9000,\n \"enable_coalesce_read_write\": false,\n \"enable_embedded_tracker\": false,\n \"enable_multi_connections_from_same_ip\": false,\n \"enable_os_cache\": true,\n \"enable_piece_extent_affinity\": false,\n \"enable_upload_suggestions\": false,\n \"encryption\": 0,\n \"export_dir\": \"/home/user/Downloads/all\",\n \"export_dir_fin\": \"/home/user/Downloads/completed\",\n \"file_pool_size\": 40,\n \"incomplete_files_ext\": false,\n \"ip_filter_enabled\": false,\n \"ip_filter_path\": \"\",\n \"ip_filter_trackers\": false,\n \"limit_lan_peers\": true,\n \"limit_tcp_overhead\": false,\n \"limit_utp_rate\": true,\n \"listen_port\": 58925,\n \"locale\": \"en\",\n \"lsd\": true,\n \"mail_notification_auth_enabled\": false,\n \"mail_notification_email\": \"\",\n \"mail_notification_enabled\": false,\n \"mail_notification_password\": \"\",\n \"mail_notification_sender\": \"qBittorrent_notification@example.com\",\n \"mail_notification_smtp\": \"smtp.changeme.com\",\n \"mail_notification_ssl_enabled\": false,\n \"mail_notification_username\": \"\",\n \"max_active_downloads\": 3,\n \"max_active_torrents\": 5,\n \"max_active_uploads\": 3,\n \"max_connec\": 500,\n \"max_connec_per_torrent\": 100,\n \"max_ratio\": -1,\n \"max_ratio_act\": 0,\n \"max_ratio_enabled\": false,\n \"max_seeding_time\": -1,\n \"max_seeding_time_enabled\": false,\n \"max_uploads\": -1,\n \"max_uploads_per_torrent\": -1,\n \"outgoing_ports_max\": 0,\n \"outgoing_ports_min\": 0,\n \"pex\": true,\n \"preallocate_all\": false,\n \"proxy_auth_enabled\": false,\n \"proxy_ip\": \"0.0.0.0\",\n \"proxy_password\": \"\",\n \"proxy_peer_connections\": false,\n \"proxy_port\": 8080,\n \"proxy_torrents_only\": false,\n \"proxy_type\": 0,\n \"proxy_username\": \"\",\n \"queueing_enabled\": false,\n \"random_port\": false,\n \"recheck_completed_torrents\": false,\n \"resolve_peer_countries\": true,\n \"rss_auto_downloading_enabled\":true,\n \"rss_download_repack_proper_episodes\":true,\n \"rss_max_articles_per_feed\":50,\n \"rss_processing_enabled\":true,\n \"rss_refresh_interval\":30,\n \"rss_smart_episode_filters\":\"s(\\\\d+)e(\\\\d+)\\n(\\\\d+)x(\\\\d+)\\n(\\\\d{4}[.\\\\-]\\\\d{1,2}[.\\\\-]\\\\d{1,2})\",\n \"save_path\": \"/home/user/Downloads/\",\n \"save_path_changed_tmm_enabled\": false,\n \"save_resume_data_interval\": 60,\n \"scan_dirs\":\n {\n \"/home/user/Downloads/incoming/games\": 0,\n \"/home/user/Downloads/incoming/movies\": 1,\n },\n \"schedule_from_hour\": 8,\n \"schedule_from_min\": 0,\n \"schedule_to_hour\": 20,\n \"schedule_to_min\": 0,\n \"scheduler_days\": 0,\n \"scheduler_enabled\": false,\n \"send_buffer_low_watermark\": 10,\n \"send_buffer_watermark\": 500,\n \"send_buffer_watermark_factor\": 50,\n \"slow_torrent_dl_rate_threshold\": 2,\n \"slow_torrent_inactive_timer\": 60,\n \"slow_torrent_ul_rate_threshold\": 2,\n \"socket_backlog_size\": 30,\n \"start_paused_enabled\": false,\n \"stop_tracker_timeout\": 1,\n \"temp_path\": \"/home/user/Downloads/temp\",\n \"temp_path_enabled\": false,\n \"torrent_changed_tmm_enabled\": true,\n \"up_limit\": 0,\n \"upload_choking_algorithm\": 1,\n \"upload_slots_behavior\": 0,\n \"upnp\": true,\n \"use_https\": false,\n \"utp_tcp_mixed_mode\": 0,\n \"web_ui_address\": \"*\",\n \"web_ui_ban_duration\": 3600,\n \"web_ui_clickjacking_protection_enabled\": true,\n \"web_ui_csrf_protection_enabled\": true,\n \"web_ui_custom_http_headers\": \"\",\n \"web_ui_domain_list\": \"*\",\n \"web_ui_host_header_validation_enabled\": true,\n \"web_ui_https_cert_path\": \"\",\n \"web_ui_https_key_path\": \"\",\n \"web_ui_max_auth_fail_count\": 5,\n \"web_ui_port\": 8080,\n \"web_ui_secure_cookie_enabled\": true,\n \"web_ui_session_timeout\": 3600,\n \"web_ui_upnp\": false,\n \"web_ui_use_custom_http_headers_enabled\": false,\n \"web_ui_username\": \"admin\"\n}\n```", ), parameters: None, return_type: Some( ReturnType { is_list: false, parameters: [ ReturnTypeParameter { name: "locale", description: "Currently selected language (e.g. en_GB for English)", return_type: String( TypeInfo { name: "locale", is_optional: false, is_list: false, description: Some( "Currently selected language (e.g. en_GB for English)", ), type_description: None, }, ), }, ReturnTypeParameter { name: "create_subfolder_enabled", description: "True if a subfolder should be created when adding a torrent", return_type: Bool( TypeInfo { name: "create_subfolder_enabled", is_optional: false, is_list: false, description: Some( "True if a subfolder should be created when adding a torrent", ), type_description: None, }, ), }, ReturnTypeParameter { name: "start_paused_enabled", description: "True if torrents should be added in a Paused state", return_type: Bool( TypeInfo { name: "start_paused_enabled", is_optional: false, is_list: false, description: Some( "True if torrents should be added in a Paused state", ), type_description: None, }, ), }, ReturnTypeParameter { name: "auto_delete_mode", description: "TODO", return_type: Number( TypeInfo { name: "auto_delete_mode", is_optional: false, is_list: false, description: Some( "TODO", ), type_description: None, }, ), }, ReturnTypeParameter { name: "preallocate_all", description: "True if disk space should be pre-allocated for all files", return_type: Bool( TypeInfo { name: "preallocate_all", is_optional: false, is_list: false, description: Some( "True if disk space should be pre-allocated for all files", ), type_description: None, }, ), }, ReturnTypeParameter { name: "incomplete_files_ext", description: "True if \".!qB\" should be appended to incomplete files", return_type: Bool( TypeInfo { name: "incomplete_files_ext", is_optional: false, is_list: false, description: Some( "True if \".!qB\" should be appended to incomplete files", ), type_description: None, }, ), }, ReturnTypeParameter { name: "auto_tmm_enabled", description: "True if Automatic Torrent Management is enabled by default", return_type: Bool( TypeInfo { name: "auto_tmm_enabled", is_optional: false, is_list: false, description: Some( "True if Automatic Torrent Management is enabled by default", ), type_description: None, }, ), }, ReturnTypeParameter { name: "torrent_changed_tmm_enabled", description: "True if torrent should be relocated when its Category changes", return_type: Bool( TypeInfo { name: "torrent_changed_tmm_enabled", is_optional: false, is_list: false, description: Some( "True if torrent should be relocated when its Category changes", ), type_description: None, }, ), }, ReturnTypeParameter { name: "save_path_changed_tmm_enabled", description: "True if torrent should be relocated when the default save path changes", return_type: Bool( TypeInfo { name: "save_path_changed_tmm_enabled", is_optional: false, is_list: false, description: Some( "True if torrent should be relocated when the default save path changes", ), type_description: None, }, ), }, ReturnTypeParameter { name: "category_changed_tmm_enabled", description: "True if torrent should be relocated when its Category's save path changes", return_type: Bool( TypeInfo { name: "category_changed_tmm_enabled", is_optional: false, is_list: false, description: Some( "True if torrent should be relocated when its Category's save path changes", ), type_description: None, }, ), }, ReturnTypeParameter { name: "save_path", description: "Default save path for torrents, separated by slashes", return_type: String( TypeInfo { name: "save_path", is_optional: false, is_list: false, description: Some( "Default save path for torrents, separated by slashes", ), type_description: None, }, ), }, ReturnTypeParameter { name: "temp_path_enabled", description: "True if folder for incomplete torrents is enabled", return_type: Bool( TypeInfo { name: "temp_path_enabled", is_optional: false, is_list: false, description: Some( "True if folder for incomplete torrents is enabled", ), type_description: None, }, ), }, ReturnTypeParameter { name: "temp_path", description: "Path for incomplete torrents, separated by slashes", return_type: String( TypeInfo { name: "temp_path", is_optional: false, is_list: false, description: Some( "Path for incomplete torrents, separated by slashes", ), type_description: None, }, ), }, ReturnTypeParameter { name: "scan_dirs", description: "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", return_type: Object( TypeInfo { name: "scan_dirs", is_optional: false, is_list: false, description: Some( "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", ), type_description: Some( TypeDescription { values: [ TypeDescriptions { value: "0", description: "Download to the monitored folder", }, TypeDescriptions { value: "1", description: "Download to the default save path", }, TypeDescriptions { value: "\"/path/to/download/to\"", description: "Download to this path", }, ], }, ), }, ), }, ReturnTypeParameter { name: "export_dir", description: "Path to directory to copy .torrent files to. Slashes are used as path separators", return_type: String( TypeInfo { name: "export_dir", is_optional: false, is_list: false, description: Some( "Path to directory to copy .torrent files to. Slashes are used as path separators", ), type_description: None, }, ), }, ReturnTypeParameter { name: "export_dir_fin", description: "Path to directory to copy .torrent files of completed downloads to. Slashes are used as path separators", return_type: String( TypeInfo { name: "export_dir_fin", is_optional: false, is_list: false, description: Some( "Path to directory to copy .torrent files of completed downloads to. Slashes are used as path separators", ), type_description: None, }, ), }, ReturnTypeParameter { name: "mail_notification_enabled", description: "True if e-mail notification should be enabled", return_type: Bool( TypeInfo { name: "mail_notification_enabled", is_optional: false, is_list: false, description: Some( "True if e-mail notification should be enabled", ), type_description: None, }, ), }, ReturnTypeParameter { name: "mail_notification_sender", description: "e-mail where notifications should originate from", return_type: String( TypeInfo { name: "mail_notification_sender", is_optional: false, is_list: false, description: Some( "e-mail where notifications should originate from", ), type_description: None, }, ), }, ReturnTypeParameter { name: "mail_notification_email", description: "e-mail to send notifications to", return_type: String( TypeInfo { name: "mail_notification_email", is_optional: false, is_list: false, description: Some( "e-mail to send notifications to", ), type_description: None, }, ), }, ReturnTypeParameter { name: "mail_notification_smtp", description: "smtp server for e-mail notifications", return_type: String( TypeInfo { name: "mail_notification_smtp", is_optional: false, is_list: false, description: Some( "smtp server for e-mail notifications", ), type_description: None, }, ), }, ReturnTypeParameter { name: "mail_notification_ssl_enabled", description: "True if smtp server requires SSL connection", return_type: Bool( TypeInfo { name: "mail_notification_ssl_enabled", is_optional: false, is_list: false, description: Some( "True if smtp server requires SSL connection", ), type_description: None, }, ), }, ReturnTypeParameter { name: "mail_notification_auth_enabled", description: "True if smtp server requires authentication", return_type: Bool( TypeInfo { name: "mail_notification_auth_enabled", is_optional: false, is_list: false, description: Some( "True if smtp server requires authentication", ), type_description: None, }, ), }, ReturnTypeParameter { name: "mail_notification_username", description: "Username for smtp authentication", return_type: String( TypeInfo { name: "mail_notification_username", is_optional: false, is_list: false, description: Some( "Username for smtp authentication", ), type_description: None, }, ), }, ReturnTypeParameter { name: "mail_notification_password", description: "Password for smtp authentication", return_type: String( TypeInfo { name: "mail_notification_password", is_optional: false, is_list: false, description: Some( "Password for smtp authentication", ), type_description: None, }, ), }, ReturnTypeParameter { name: "autorun_enabled", description: "True if external program should be run after torrent has finished downloading", return_type: Bool( TypeInfo { name: "autorun_enabled", is_optional: false, is_list: false, description: Some( "True if external program should be run after torrent has finished downloading", ), type_description: None, }, ), }, ReturnTypeParameter { name: "autorun_program", description: "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", return_type: String( TypeInfo { name: "autorun_program", is_optional: false, is_list: false, description: Some( "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", ), type_description: None, }, ), }, ReturnTypeParameter { name: "queueing_enabled", description: "True if torrent queuing is enabled", return_type: Bool( TypeInfo { name: "queueing_enabled", is_optional: false, is_list: false, description: Some( "True if torrent queuing is enabled", ), type_description: None, }, ), }, ReturnTypeParameter { name: "max_active_downloads", description: "Maximum number of active simultaneous downloads", return_type: Number( TypeInfo { name: "max_active_downloads", is_optional: false, is_list: false, description: Some( "Maximum number of active simultaneous downloads", ), type_description: None, }, ), }, ReturnTypeParameter { name: "max_active_torrents", description: "Maximum number of active simultaneous downloads and uploads", return_type: Number( TypeInfo { name: "max_active_torrents", is_optional: false, is_list: false, description: Some( "Maximum number of active simultaneous downloads and uploads", ), type_description: None, }, ), }, ReturnTypeParameter { name: "max_active_uploads", description: "Maximum number of active simultaneous uploads", return_type: Number( TypeInfo { name: "max_active_uploads", is_optional: false, is_list: false, description: Some( "Maximum number of active simultaneous uploads", ), type_description: None, }, ), }, ReturnTypeParameter { name: "dont_count_slow_torrents", description: "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", return_type: Bool( TypeInfo { name: "dont_count_slow_torrents", is_optional: false, is_list: false, description: Some( "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", ), type_description: None, }, ), }, ReturnTypeParameter { name: "slow_torrent_dl_rate_threshold", description: "Download rate in KiB/s for a torrent to be considered \"slow\"", return_type: Number( TypeInfo { name: "slow_torrent_dl_rate_threshold", is_optional: false, is_list: false, description: Some( "Download rate in KiB/s for a torrent to be considered \"slow\"", ), type_description: None, }, ), }, ReturnTypeParameter { name: "slow_torrent_ul_rate_threshold", description: "Upload rate in KiB/s for a torrent to be considered \"slow\"", return_type: Number( TypeInfo { name: "slow_torrent_ul_rate_threshold", is_optional: false, is_list: false, description: Some( "Upload rate in KiB/s for a torrent to be considered \"slow\"", ), type_description: None, }, ), }, ReturnTypeParameter { name: "slow_torrent_inactive_timer", description: "Seconds a torrent should be inactive before considered \"slow\"", return_type: Number( TypeInfo { name: "slow_torrent_inactive_timer", is_optional: false, is_list: false, description: Some( "Seconds a torrent should be inactive before considered \"slow\"", ), type_description: None, }, ), }, ReturnTypeParameter { name: "max_ratio_enabled", description: "True if share ratio limit is enabled", return_type: Bool( TypeInfo { name: "max_ratio_enabled", is_optional: false, is_list: false, description: Some( "True if share ratio limit is enabled", ), type_description: None, }, ), }, ReturnTypeParameter { name: "max_ratio", description: "Get the global share ratio limit", return_type: Float( TypeInfo { name: "max_ratio", is_optional: false, is_list: false, description: Some( "Get the global share ratio limit", ), type_description: None, }, ), }, ReturnTypeParameter { name: "max_ratio_act", description: "Action performed when a torrent reaches the maximum share ratio. See list of possible values here below.", return_type: Number( TypeInfo { name: "max_ratio_act", is_optional: false, is_list: false, description: Some( "Action performed when a torrent reaches the maximum share ratio. See list of possible values here below.", ), type_description: Some( TypeDescription { values: [ TypeDescriptions { value: "0", description: "Pause torrent", }, TypeDescriptions { value: "1", description: "Remove torrent", }, ], }, ), }, ), }, ReturnTypeParameter { name: "listen_port", description: "Port for incoming connections", return_type: Number( TypeInfo { name: "listen_port", is_optional: false, is_list: false, description: Some( "Port for incoming connections", ), type_description: None, }, ), }, ReturnTypeParameter { name: "upnp", description: "True if UPnP/NAT-PMP is enabled", return_type: Bool( TypeInfo { name: "upnp", is_optional: false, is_list: false, description: Some( "True if UPnP/NAT-PMP is enabled", ), type_description: None, }, ), }, ReturnTypeParameter { name: "random_port", description: "True if the port is randomly selected", return_type: Bool( TypeInfo { name: "random_port", is_optional: false, is_list: false, description: Some( "True if the port is randomly selected", ), type_description: None, }, ), }, ReturnTypeParameter { name: "dl_limit", description: "Global download speed limit in KiB/s; -1 means no limit is applied", return_type: Number( TypeInfo { name: "dl_limit", is_optional: false, is_list: false, description: Some( "Global download speed limit in KiB/s; -1 means no limit is applied", ), type_description: None, }, ), }, ReturnTypeParameter { name: "up_limit", description: "Global upload speed limit in KiB/s; -1 means no limit is applied", return_type: Number( TypeInfo { name: "up_limit", is_optional: false, is_list: false, description: Some( "Global upload speed limit in KiB/s; -1 means no limit is applied", ), type_description: None, }, ), }, ReturnTypeParameter { name: "max_connec", description: "Maximum global number of simultaneous connections", return_type: Number( TypeInfo { name: "max_connec", is_optional: false, is_list: false, description: Some( "Maximum global number of simultaneous connections", ), type_description: None, }, ), }, ReturnTypeParameter { name: "max_connec_per_torrent", description: "Maximum number of simultaneous connections per torrent", return_type: Number( TypeInfo { name: "max_connec_per_torrent", is_optional: false, is_list: false, description: Some( "Maximum number of simultaneous connections per torrent", ), type_description: None, }, ), }, ReturnTypeParameter { name: "max_uploads", description: "Maximum number of upload slots", return_type: Number( TypeInfo { name: "max_uploads", is_optional: false, is_list: false, description: Some( "Maximum number of upload slots", ), type_description: None, }, ), }, ReturnTypeParameter { name: "max_uploads_per_torrent", description: "Maximum number of upload slots per torrent", return_type: Number( TypeInfo { name: "max_uploads_per_torrent", is_optional: false, is_list: false, description: Some( "Maximum number of upload slots per torrent", ), type_description: None, }, ), }, ReturnTypeParameter { name: "stop_tracker_timeout", description: "Timeout in seconds for a stopped announce request to trackers", return_type: Number( TypeInfo { name: "stop_tracker_timeout", is_optional: false, is_list: false, description: Some( "Timeout in seconds for a stopped announce request to trackers", ), type_description: None, }, ), }, ReturnTypeParameter { name: "enable_piece_extent_affinity", description: "True if the advanced libtorrent option piece_extent_affinity is enabled", return_type: Bool( TypeInfo { name: "enable_piece_extent_affinity", is_optional: false, is_list: false, description: Some( "True if the advanced libtorrent option piece_extent_affinity is enabled", ), type_description: None, }, ), }, ReturnTypeParameter { name: "bittorrent_protocol", description: "Bittorrent Protocol to use (see list of possible values below)", return_type: Number( TypeInfo { name: "bittorrent_protocol", is_optional: false, is_list: false, description: Some( "Bittorrent Protocol to use (see list of possible values below)", ), type_description: Some( TypeDescription { values: [ TypeDescriptions { value: "0", description: "TCP and μTP", }, TypeDescriptions { value: "1", description: "TCP", }, TypeDescriptions { value: "2", description: "μTP", }, ], }, ), }, ), }, ReturnTypeParameter { name: "limit_utp_rate", description: "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", return_type: Bool( TypeInfo { name: "limit_utp_rate", is_optional: false, is_list: false, description: Some( "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", ), type_description: None, }, ), }, ReturnTypeParameter { name: "limit_tcp_overhead", description: "True if [du]l_limit should be applied to estimated TCP overhead (service data: e.g. packet headers)", return_type: Bool( TypeInfo { name: "limit_tcp_overhead", is_optional: false, is_list: false, description: Some( "True if [du]l_limit should be applied to estimated TCP overhead (service data: e.g. packet headers)", ), type_description: None, }, ), }, ReturnTypeParameter { name: "limit_lan_peers", description: "True if [du]l_limit should be applied to peers on the LAN", return_type: Bool( TypeInfo { name: "limit_lan_peers", is_optional: false, is_list: false, description: Some( "True if [du]l_limit should be applied to peers on the LAN", ), type_description: None, }, ), }, ReturnTypeParameter { name: "alt_dl_limit", description: "Alternative global download speed limit in KiB/s", return_type: Number( TypeInfo { name: "alt_dl_limit", is_optional: false, is_list: false, description: Some( "Alternative global download speed limit in KiB/s", ), type_description: None, }, ), }, ReturnTypeParameter { name: "alt_up_limit", description: "Alternative global upload speed limit in KiB/s", return_type: Number( TypeInfo { name: "alt_up_limit", is_optional: false, is_list: false, description: Some( "Alternative global upload speed limit in KiB/s", ), type_description: None, }, ), }, ReturnTypeParameter { name: "scheduler_enabled", description: "True if alternative limits should be applied according to schedule", return_type: Bool( TypeInfo { name: "scheduler_enabled", is_optional: false, is_list: false, description: Some( "True if alternative limits should be applied according to schedule", ), type_description: None, }, ), }, ReturnTypeParameter { name: "schedule_from_hour", description: "Scheduler starting hour", return_type: Number( TypeInfo { name: "schedule_from_hour", is_optional: false, is_list: false, description: Some( "Scheduler starting hour", ), type_description: None, }, ), }, ReturnTypeParameter { name: "schedule_from_min", description: "Scheduler starting minute", return_type: Number( TypeInfo { name: "schedule_from_min", is_optional: false, is_list: false, description: Some( "Scheduler starting minute", ), type_description: None, }, ), }, ReturnTypeParameter { name: "schedule_to_hour", description: "Scheduler ending hour", return_type: Number( TypeInfo { name: "schedule_to_hour", is_optional: false, is_list: false, description: Some( "Scheduler ending hour", ), type_description: None, }, ), }, ReturnTypeParameter { name: "schedule_to_min", description: "Scheduler ending minute", return_type: Number( TypeInfo { name: "schedule_to_min", is_optional: false, is_list: false, description: Some( "Scheduler ending minute", ), type_description: None, }, ), }, ReturnTypeParameter { name: "scheduler_days", description: "Scheduler days. See possible values here below", return_type: Number( TypeInfo { name: "scheduler_days", is_optional: false, is_list: false, description: Some( "Scheduler days. See possible values here below", ), type_description: Some( TypeDescription { values: [ TypeDescriptions { value: "0", description: "Every day", }, TypeDescriptions { value: "1", description: "Every weekday", }, TypeDescriptions { value: "2", description: "Every weekend", }, TypeDescriptions { value: "3", description: "Every Monday", }, TypeDescriptions { value: "4", description: "Every Tuesday", }, TypeDescriptions { value: "5", description: "Every Wednesday", }, TypeDescriptions { value: "6", description: "Every Thursday", }, TypeDescriptions { value: "7", description: "Every Friday", }, TypeDescriptions { value: "8", description: "Every Saturday", }, TypeDescriptions { value: "9", description: "Every Sunday", }, ], }, ), }, ), }, ReturnTypeParameter { name: "dht", description: "True if DHT is enabled", return_type: Bool( TypeInfo { name: "dht", is_optional: false, is_list: false, description: Some( "True if DHT is enabled", ), type_description: None, }, ), }, ReturnTypeParameter { name: "pex", description: "True if PeX is enabled", return_type: Bool( TypeInfo { name: "pex", is_optional: false, is_list: false, description: Some( "True if PeX is enabled", ), type_description: None, }, ), }, ReturnTypeParameter { name: "lsd", description: "True if LSD is enabled", return_type: Bool( TypeInfo { name: "lsd", is_optional: false, is_list: false, description: Some( "True if LSD is enabled", ), type_description: None, }, ), }, ReturnTypeParameter { name: "encryption", description: "See list of possible values here below", return_type: Number( TypeInfo { name: "encryption", is_optional: false, is_list: false, description: Some( "See list of possible values here below", ), type_description: Some( TypeDescription { values: [ TypeDescriptions { value: "0", description: "Prefer encryption", }, TypeDescriptions { value: "1", description: "Force encryption on", }, TypeDescriptions { value: "2", description: "Force encryption off", }, ], }, ), }, ), }, ReturnTypeParameter { name: "anonymous_mode", description: "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", return_type: Bool( TypeInfo { name: "anonymous_mode", is_optional: false, is_list: false, description: Some( "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", ), type_description: None, }, ), }, ReturnTypeParameter { name: "proxy_type", description: "See list of possible values here below", return_type: Number( TypeInfo { name: "proxy_type", is_optional: false, is_list: false, description: Some( "See list of possible values here below", ), type_description: Some( TypeDescription { values: [ TypeDescriptions { value: "-1", description: "Proxy is disabled", }, TypeDescriptions { value: "1", description: "HTTP proxy without authentication", }, TypeDescriptions { value: "2", description: "SOCKS5 proxy without authentication", }, TypeDescriptions { value: "3", description: "HTTP proxy with authentication", }, TypeDescriptions { value: "4", description: "SOCKS5 proxy with authentication", }, TypeDescriptions { value: "5", description: "SOCKS4 proxy without authentication", }, ], }, ), }, ), }, ReturnTypeParameter { name: "proxy_ip", description: "Proxy IP address or domain name", return_type: String( TypeInfo { name: "proxy_ip", is_optional: false, is_list: false, description: Some( "Proxy IP address or domain name", ), type_description: None, }, ), }, ReturnTypeParameter { name: "proxy_port", description: "Proxy port", return_type: Number( TypeInfo { name: "proxy_port", is_optional: false, is_list: false, description: Some( "Proxy port", ), type_description: None, }, ), }, ReturnTypeParameter { name: "proxy_peer_connections", description: "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", return_type: Bool( TypeInfo { name: "proxy_peer_connections", is_optional: false, is_list: false, description: Some( "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", ), type_description: None, }, ), }, ReturnTypeParameter { name: "proxy_auth_enabled", description: "True proxy requires authentication; doesn't apply to SOCKS4 proxies", return_type: Bool( TypeInfo { name: "proxy_auth_enabled", is_optional: false, is_list: false, description: Some( "True proxy requires authentication; doesn't apply to SOCKS4 proxies", ), type_description: None, }, ), }, ReturnTypeParameter { name: "proxy_username", description: "Username for proxy authentication", return_type: String( TypeInfo { name: "proxy_username", is_optional: false, is_list: false, description: Some( "Username for proxy authentication", ), type_description: None, }, ), }, ReturnTypeParameter { name: "proxy_password", description: "Password for proxy authentication", return_type: String( TypeInfo { name: "proxy_password", is_optional: false, is_list: false, description: Some( "Password for proxy authentication", ), type_description: None, }, ), }, ReturnTypeParameter { name: "proxy_torrents_only", description: "True if proxy is only used for torrents", return_type: Bool( TypeInfo { name: "proxy_torrents_only", is_optional: false, is_list: false, description: Some( "True if proxy is only used for torrents", ), type_description: None, }, ), }, ReturnTypeParameter { name: "ip_filter_enabled", description: "True if external IP filter should be enabled", return_type: Bool( TypeInfo { name: "ip_filter_enabled", is_optional: false, is_list: false, description: Some( "True if external IP filter should be enabled", ), type_description: None, }, ), }, ReturnTypeParameter { name: "ip_filter_path", description: "Path to IP filter file (.dat, .p2p, .p2b files are supported); path is separated by slashes", return_type: String( TypeInfo { name: "ip_filter_path", is_optional: false, is_list: false, description: Some( "Path to IP filter file (.dat, .p2p, .p2b files are supported); path is separated by slashes", ), type_description: None, }, ), }, ReturnTypeParameter { name: "ip_filter_trackers", description: "True if IP filters are applied to trackers", return_type: Bool( TypeInfo { name: "ip_filter_trackers", is_optional: false, is_list: false, description: Some( "True if IP filters are applied to trackers", ), type_description: None, }, ), }, ReturnTypeParameter { name: "web_ui_domain_list", description: "Comma-separated list of domains to accept when performing Host header validation", return_type: String( TypeInfo { name: "web_ui_domain_list", is_optional: false, is_list: false, description: Some( "Comma-separated list of domains to accept when performing Host header validation", ), type_description: None, }, ), }, ReturnTypeParameter { name: "web_ui_address", description: "IP address to use for the WebUI", return_type: String( TypeInfo { name: "web_ui_address", is_optional: false, is_list: false, description: Some( "IP address to use for the WebUI", ), type_description: None, }, ), }, ReturnTypeParameter { name: "web_ui_port", description: "WebUI port", return_type: Number( TypeInfo { name: "web_ui_port", is_optional: false, is_list: false, description: Some( "WebUI port", ), type_description: None, }, ), }, ReturnTypeParameter { name: "web_ui_upnp", description: "True if UPnP is used for the WebUI port", return_type: Bool( TypeInfo { name: "web_ui_upnp", is_optional: false, is_list: false, description: Some( "True if UPnP is used for the WebUI port", ), type_description: None, }, ), }, ReturnTypeParameter { name: "web_ui_username", description: "WebUI username", return_type: String( TypeInfo { name: "web_ui_username", is_optional: false, is_list: false, description: Some( "WebUI username", ), type_description: None, }, ), }, ReturnTypeParameter { name: "web_ui_password", description: "For API ≥ v2.3.0: Plaintext WebUI password, not readable, write-only. For API < v2.3.0: MD5 hash of WebUI password, hash is generated from the following string: username:Web UI Access:plain_text_web_ui_password", return_type: String( TypeInfo { name: "web_ui_password", is_optional: false, is_list: false, description: Some( "For API ≥ v2.3.0: Plaintext WebUI password, not readable, write-only. For API < v2.3.0: MD5 hash of WebUI password, hash is generated from the following string: username:Web UI Access:plain_text_web_ui_password", ), type_description: None, }, ), }, ReturnTypeParameter { name: "web_ui_csrf_protection_enabled", description: "True if WebUI CSRF protection is enabled", return_type: Bool( TypeInfo { name: "web_ui_csrf_protection_enabled", is_optional: false, is_list: false, description: Some( "True if WebUI CSRF protection is enabled", ), type_description: None, }, ), }, ReturnTypeParameter { name: "web_ui_clickjacking_protection_enabled", description: "True if WebUI clickjacking protection is enabled", return_type: Bool( TypeInfo { name: "web_ui_clickjacking_protection_enabled", is_optional: false, is_list: false, description: Some( "True if WebUI clickjacking protection is enabled", ), type_description: None, }, ), }, ReturnTypeParameter { name: "web_ui_secure_cookie_enabled", description: "True if WebUI cookie Secure flag is enabled", return_type: Bool( TypeInfo { name: "web_ui_secure_cookie_enabled", is_optional: false, is_list: false, description: Some( "True if WebUI cookie Secure flag is enabled", ), type_description: None, }, ), }, ReturnTypeParameter { name: "web_ui_max_auth_fail_count", description: "Maximum number of authentication failures before WebUI access ban", return_type: Number( TypeInfo { name: "web_ui_max_auth_fail_count", is_optional: false, is_list: false, description: Some( "Maximum number of authentication failures before WebUI access ban", ), type_description: None, }, ), }, ReturnTypeParameter { name: "web_ui_ban_duration", description: "WebUI access ban duration in seconds", return_type: Number( TypeInfo { name: "web_ui_ban_duration", is_optional: false, is_list: false, description: Some( "WebUI access ban duration in seconds", ), type_description: None, }, ), }, ReturnTypeParameter { name: "web_ui_session_timeout", description: "Seconds until WebUI is automatically signed off", return_type: Number( TypeInfo { name: "web_ui_session_timeout", is_optional: false, is_list: false, description: Some( "Seconds until WebUI is automatically signed off", ), type_description: None, }, ), }, ReturnTypeParameter { name: "web_ui_host_header_validation_enabled", description: "True if WebUI host header validation is enabled", return_type: Bool( TypeInfo { name: "web_ui_host_header_validation_enabled", is_optional: false, is_list: false, description: Some( "True if WebUI host header validation is enabled", ), type_description: None, }, ), }, ReturnTypeParameter { name: "bypass_local_auth", description: "True if authentication challenge for loopback address (127.0.0.1) should be disabled", return_type: Bool( TypeInfo { name: "bypass_local_auth", is_optional: false, is_list: false, description: Some( "True if authentication challenge for loopback address (127.0.0.1) should be disabled", ), type_description: None, }, ), }, ReturnTypeParameter { name: "bypass_auth_subnet_whitelist_enabled", description: "True if webui authentication should be bypassed for clients whose ip resides within (at least) one of the subnets on the whitelist", return_type: Bool( TypeInfo { name: "bypass_auth_subnet_whitelist_enabled", is_optional: false, is_list: false, description: Some( "True if webui authentication should be bypassed for clients whose ip resides within (at least) one of the subnets on the whitelist", ), type_description: None, }, ), }, ReturnTypeParameter { name: "bypass_auth_subnet_whitelist", description: "(White)list of ipv4/ipv6 subnets for which webui authentication should be bypassed; list entries are separated by commas", return_type: String( TypeInfo { name: "bypass_auth_subnet_whitelist", is_optional: false, is_list: false, description: Some( "(White)list of ipv4/ipv6 subnets for which webui authentication should be bypassed; list entries are separated by commas", ), type_description: None, }, ), }, ReturnTypeParameter { name: "alternative_webui_enabled", description: "True if an alternative WebUI should be used", return_type: Bool( TypeInfo { name: "alternative_webui_enabled", is_optional: false, is_list: false, description: Some( "True if an alternative WebUI should be used", ), type_description: None, }, ), }, ReturnTypeParameter { name: "alternative_webui_path", description: "File path to the alternative WebUI", return_type: String( TypeInfo { name: "alternative_webui_path", is_optional: false, is_list: false, description: Some( "File path to the alternative WebUI", ), type_description: None, }, ), }, ReturnTypeParameter { name: "use_https", description: "True if WebUI HTTPS access is enabled", return_type: Bool( TypeInfo { name: "use_https", is_optional: false, is_list: false, description: Some( "True if WebUI HTTPS access is enabled", ), type_description: None, }, ), }, ReturnTypeParameter { name: "ssl_key", description: "For API < v2.0.1: SSL keyfile contents (this is a not a path)", return_type: String( TypeInfo { name: "ssl_key", is_optional: false, is_list: false, description: Some( "For API < v2.0.1: SSL keyfile contents (this is a not a path)", ), type_description: None, }, ), }, ReturnTypeParameter { name: "ssl_cert", description: "For API < v2.0.1: SSL certificate contents (this is a not a path)", return_type: String( TypeInfo { name: "ssl_cert", is_optional: false, is_list: false, description: Some( "For API < v2.0.1: SSL certificate contents (this is a not a path)", ), type_description: None, }, ), }, ReturnTypeParameter { name: "web_ui_https_key_path", description: "For API ≥ v2.0.1: Path to SSL keyfile", return_type: String( TypeInfo { name: "web_ui_https_key_path", is_optional: false, is_list: false, description: Some( "For API ≥ v2.0.1: Path to SSL keyfile", ), type_description: None, }, ), }, ReturnTypeParameter { name: "web_ui_https_cert_path", description: "For API ≥ v2.0.1: Path to SSL certificate", return_type: String( TypeInfo { name: "web_ui_https_cert_path", is_optional: false, is_list: false, description: Some( "For API ≥ v2.0.1: Path to SSL certificate", ), type_description: None, }, ), }, ReturnTypeParameter { name: "dyndns_enabled", description: "True if server DNS should be updated dynamically", return_type: Bool( TypeInfo { name: "dyndns_enabled", is_optional: false, is_list: false, description: Some( "True if server DNS should be updated dynamically", ), type_description: None, }, ), }, ReturnTypeParameter { name: "dyndns_service", description: "See list of possible values here below", return_type: Number( TypeInfo { name: "dyndns_service", is_optional: false, is_list: false, description: Some( "See list of possible values here below", ), type_description: Some( TypeDescription { values: [ TypeDescriptions { value: "0", description: "Use DyDNS", }, TypeDescriptions { value: "1", description: "Use NOIP", }, ], }, ), }, ), }, ReturnTypeParameter { name: "dyndns_username", description: "Username for DDNS service", return_type: String( TypeInfo { name: "dyndns_username", is_optional: false, is_list: false, description: Some( "Username for DDNS service", ), type_description: None, }, ), }, ReturnTypeParameter { name: "dyndns_password", description: "Password for DDNS service", return_type: String( TypeInfo { name: "dyndns_password", is_optional: false, is_list: false, description: Some( "Password for DDNS service", ), type_description: None, }, ), }, ReturnTypeParameter { name: "dyndns_domain", description: "Your DDNS domain name", return_type: String( TypeInfo { name: "dyndns_domain", is_optional: false, is_list: false, description: Some( "Your DDNS domain name", ), type_description: None, }, ), }, ReturnTypeParameter { name: "rss_refresh_interval", description: "RSS refresh interval", return_type: Number( TypeInfo { name: "rss_refresh_interval", is_optional: false, is_list: false, description: Some( "RSS refresh interval", ), type_description: None, }, ), }, ReturnTypeParameter { name: "rss_max_articles_per_feed", description: "Max stored articles per RSS feed", return_type: Number( TypeInfo { name: "rss_max_articles_per_feed", is_optional: false, is_list: false, description: Some( "Max stored articles per RSS feed", ), type_description: None, }, ), }, ReturnTypeParameter { name: "rss_processing_enabled", description: "Enable processing of RSS feeds", return_type: Bool( TypeInfo { name: "rss_processing_enabled", is_optional: false, is_list: false, description: Some( "Enable processing of RSS feeds", ), type_description: None, }, ), }, ReturnTypeParameter { name: "rss_auto_downloading_enabled", description: "Enable auto-downloading of torrents from the RSS feeds", return_type: Bool( TypeInfo { name: "rss_auto_downloading_enabled", is_optional: false, is_list: false, description: Some( "Enable auto-downloading of torrents from the RSS feeds", ), type_description: None, }, ), }, ReturnTypeParameter { name: "rss_download_repack_proper_episodes", description: "For API ≥ v2.5.1: Enable downloading of repack/proper Episodes", return_type: Bool( TypeInfo { name: "rss_download_repack_proper_episodes", is_optional: false, is_list: false, description: Some( "For API ≥ v2.5.1: Enable downloading of repack/proper Episodes", ), type_description: None, }, ), }, ReturnTypeParameter { name: "rss_smart_episode_filters", description: "For API ≥ v2.5.1: List of RSS Smart Episode Filters", return_type: String( TypeInfo { name: "rss_smart_episode_filters", is_optional: false, is_list: false, description: Some( "For API ≥ v2.5.1: List of RSS Smart Episode Filters", ), type_description: None, }, ), }, ReturnTypeParameter { name: "add_trackers_enabled", description: "Enable automatic adding of trackers to new torrents", return_type: Bool( TypeInfo { name: "add_trackers_enabled", is_optional: false, is_list: false, description: Some( "Enable automatic adding of trackers to new torrents", ), type_description: None, }, ), }, ReturnTypeParameter { name: "add_trackers", description: "List of trackers to add to new torrent", return_type: String( TypeInfo { name: "add_trackers", is_optional: false, is_list: false, description: Some( "List of trackers to add to new torrent", ), type_description: None, }, ), }, ReturnTypeParameter { name: "web_ui_use_custom_http_headers_enabled", description: "For API ≥ v2.5.1: Enable custom http headers", return_type: Bool( TypeInfo { name: "web_ui_use_custom_http_headers_enabled", is_optional: false, is_list: false, description: Some( "For API ≥ v2.5.1: Enable custom http headers", ), type_description: None, }, ), }, ReturnTypeParameter { name: "web_ui_custom_http_headers", description: "For API ≥ v2.5.1: List of custom http headers", return_type: String( TypeInfo { name: "web_ui_custom_http_headers", is_optional: false, is_list: false, description: Some( "For API ≥ v2.5.1: List of custom http headers", ), type_description: None, }, ), }, ReturnTypeParameter { name: "max_seeding_time_enabled", description: "True enables max seeding time", return_type: Bool( TypeInfo { name: "max_seeding_time_enabled", is_optional: false, is_list: false, description: Some( "True enables max seeding time", ), type_description: None, }, ), }, ReturnTypeParameter { name: "max_seeding_time", description: "Number of minutes to seed a torrent", return_type: Number( TypeInfo { name: "max_seeding_time", is_optional: false, is_list: false, description: Some( "Number of minutes to seed a torrent", ), type_description: None, }, ), }, ReturnTypeParameter { name: "announce_ip", description: "TODO", return_type: String( TypeInfo { name: "announce_ip", is_optional: false, is_list: false, description: Some( "TODO", ), type_description: None, }, ), }, ReturnTypeParameter { name: "announce_to_all_tiers", description: "True always announce to all tiers", return_type: Bool( TypeInfo { name: "announce_to_all_tiers", is_optional: false, is_list: false, description: Some( "True always announce to all tiers", ), type_description: None, }, ), }, ReturnTypeParameter { name: "announce_to_all_trackers", description: "True always announce to all trackers in a tier", return_type: Bool( TypeInfo { name: "announce_to_all_trackers", is_optional: false, is_list: false, description: Some( "True always announce to all trackers in a tier", ), type_description: None, }, ), }, ReturnTypeParameter { name: "async_io_threads", description: "Number of asynchronous I/O threads", return_type: Number( TypeInfo { name: "async_io_threads", is_optional: false, is_list: false, description: Some( "Number of asynchronous I/O threads", ), type_description: None, }, ), }, ReturnTypeParameter { name: "banned_IPs", description: "List of banned IPs", return_type: String( TypeInfo { name: "banned_IPs", is_optional: false, is_list: false, description: Some( "List of banned IPs", ), type_description: None, }, ), }, ReturnTypeParameter { name: "checking_memory_use", description: "Outstanding memory when checking torrents in MiB", return_type: Number( TypeInfo { name: "checking_memory_use", is_optional: false, is_list: false, description: Some( "Outstanding memory when checking torrents in MiB", ), type_description: None, }, ), }, ReturnTypeParameter { name: "current_interface_address", description: "IP Address to bind to. Empty String means All addresses", return_type: String( TypeInfo { name: "current_interface_address", is_optional: false, is_list: false, description: Some( "IP Address to bind to. Empty String means All addresses", ), type_description: None, }, ), }, ReturnTypeParameter { name: "current_network_interface", description: "Network Interface used", return_type: String( TypeInfo { name: "current_network_interface", is_optional: false, is_list: false, description: Some( "Network Interface used", ), type_description: None, }, ), }, ReturnTypeParameter { name: "disk_cache", description: "Disk cache used in MiB", return_type: Number( TypeInfo { name: "disk_cache", is_optional: false, is_list: false, description: Some( "Disk cache used in MiB", ), type_description: None, }, ), }, ReturnTypeParameter { name: "disk_cache_ttl", description: "Disk cache expiry interval in seconds", return_type: Number( TypeInfo { name: "disk_cache_ttl", is_optional: false, is_list: false, description: Some( "Disk cache expiry interval in seconds", ), type_description: None, }, ), }, ReturnTypeParameter { name: "embedded_tracker_port", description: "Port used for embedded tracker", return_type: Number( TypeInfo { name: "embedded_tracker_port", is_optional: false, is_list: false, description: Some( "Port used for embedded tracker", ), type_description: None, }, ), }, ReturnTypeParameter { name: "enable_coalesce_read_write", description: "True enables coalesce reads & writes", return_type: Bool( TypeInfo { name: "enable_coalesce_read_write", is_optional: false, is_list: false, description: Some( "True enables coalesce reads & writes", ), type_description: None, }, ), }, ReturnTypeParameter { name: "enable_embedded_tracker", description: "True enables embedded tracker", return_type: Bool( TypeInfo { name: "enable_embedded_tracker", is_optional: false, is_list: false, description: Some( "True enables embedded tracker", ), type_description: None, }, ), }, ReturnTypeParameter { name: "enable_multi_connections_from_same_ip", description: "True allows multiple connections from the same IP address", return_type: Bool( TypeInfo { name: "enable_multi_connections_from_same_ip", is_optional: false, is_list: false, description: Some( "True allows multiple connections from the same IP address", ), type_description: None, }, ), }, ReturnTypeParameter { name: "enable_os_cache", description: "True enables os cache", return_type: Bool( TypeInfo { name: "enable_os_cache", is_optional: false, is_list: false, description: Some( "True enables os cache", ), type_description: None, }, ), }, ReturnTypeParameter { name: "enable_upload_suggestions", description: "True enables sending of upload piece suggestions", return_type: Bool( TypeInfo { name: "enable_upload_suggestions", is_optional: false, is_list: false, description: Some( "True enables sending of upload piece suggestions", ), type_description: None, }, ), }, ReturnTypeParameter { name: "file_pool_size", description: "File pool size", return_type: Number( TypeInfo { name: "file_pool_size", is_optional: false, is_list: false, description: Some( "File pool size", ), type_description: None, }, ), }, ReturnTypeParameter { name: "outgoing_ports_max", description: "Maximal outgoing port (0: Disabled)", return_type: Number( TypeInfo { name: "outgoing_ports_max", is_optional: false, is_list: false, description: Some( "Maximal outgoing port (0: Disabled)", ), type_description: None, }, ), }, ReturnTypeParameter { name: "outgoing_ports_min", description: "Minimal outgoing port (0: Disabled)", return_type: Number( TypeInfo { name: "outgoing_ports_min", is_optional: false, is_list: false, description: Some( "Minimal outgoing port (0: Disabled)", ), type_description: None, }, ), }, ReturnTypeParameter { name: "recheck_completed_torrents", description: "True rechecks torrents on completion", return_type: Bool( TypeInfo { name: "recheck_completed_torrents", is_optional: false, is_list: false, description: Some( "True rechecks torrents on completion", ), type_description: None, }, ), }, ReturnTypeParameter { name: "resolve_peer_countries", description: "True resolves peer countries", return_type: Bool( TypeInfo { name: "resolve_peer_countries", is_optional: false, is_list: false, description: Some( "True resolves peer countries", ), type_description: None, }, ), }, ReturnTypeParameter { name: "save_resume_data_interval", description: "Save resume data interval in min", return_type: Number( TypeInfo { name: "save_resume_data_interval", is_optional: false, is_list: false, description: Some( "Save resume data interval in min", ), type_description: None, }, ), }, ReturnTypeParameter { name: "send_buffer_low_watermark", description: "Send buffer low watermark in KiB", return_type: Number( TypeInfo { name: "send_buffer_low_watermark", is_optional: false, is_list: false, description: Some( "Send buffer low watermark in KiB", ), type_description: None, }, ), }, ReturnTypeParameter { name: "send_buffer_watermark", description: "Send buffer watermark in KiB", return_type: Number( TypeInfo { name: "send_buffer_watermark", is_optional: false, is_list: false, description: Some( "Send buffer watermark in KiB", ), type_description: None, }, ), }, ReturnTypeParameter { name: "send_buffer_watermark_factor", description: "Send buffer watermark factor in percent", return_type: Number( TypeInfo { name: "send_buffer_watermark_factor", is_optional: false, is_list: false, description: Some( "Send buffer watermark factor in percent", ), type_description: None, }, ), }, ReturnTypeParameter { name: "socket_backlog_size", description: "Socket backlog size", return_type: Number( TypeInfo { name: "socket_backlog_size", is_optional: false, is_list: false, description: Some( "Socket backlog size", ), type_description: None, }, ), }, ReturnTypeParameter { name: "upload_choking_algorithm", description: "Upload choking algorithm used (see list of possible values below)", return_type: Number( TypeInfo { name: "upload_choking_algorithm", is_optional: false, is_list: false, description: Some( "Upload choking algorithm used (see list of possible values below)", ), type_description: Some( TypeDescription { values: [ TypeDescriptions { value: "0", description: "Round-robin", }, TypeDescriptions { value: "1", description: "Fastest upload", }, TypeDescriptions { value: "2", description: "Anti-leech", }, ], }, ), }, ), }, ReturnTypeParameter { name: "upload_slots_behavior", description: "Upload slots behavior used (see list of possible values below)", return_type: Number( TypeInfo { name: "upload_slots_behavior", is_optional: false, is_list: false, description: Some( "Upload slots behavior used (see list of possible values below)", ), type_description: Some( TypeDescription { values: [ TypeDescriptions { value: "0", description: "Fixed slots", }, TypeDescriptions { value: "1", description: "Upload rate based", }, ], }, ), }, ), }, ReturnTypeParameter { name: "upnp_lease_duration", description: "UPnP lease duration (0: Permanent lease)", return_type: Number( TypeInfo { name: "upnp_lease_duration", is_optional: false, is_list: false, description: Some( "UPnP lease duration (0: Permanent lease)", ), type_description: None, }, ), }, ReturnTypeParameter { name: "utp_tcp_mixed_mode", description: "μTP-TCP mixed mode algorithm (see list of possible values below)", return_type: Number( TypeInfo { name: "utp_tcp_mixed_mode", is_optional: false, is_list: false, description: Some( "μTP-TCP mixed mode algorithm (see list of possible values below)", ), type_description: Some( TypeDescription { values: [ TypeDescriptions { value: "0", description: "Prefer TCP", }, TypeDescriptions { value: "1", description: "Peer proportional", }, ], }, ), }, ), }, ], }, ), url: "preferences", }, ApiMethod { name: "setPreferences", description: Some( "1. There is no need to pass all possible preferences' `token:value` pairs if you only want to change one option\n 1. Paths in `scan_dirs` must exist, otherwise this option will have no effect\n 1. String values must be quoted; integer and boolean values must never be quoted\n\nFor a list of possible preference options see [Get application preferences](#get-application-preferences)", ), parameters: None, return_type: None, url: "setPreferences", }, ApiMethod { name: "defaultSavePath", description: None, parameters: None, return_type: None, url: "defaultSavePath", }, ], description: Some( "All Application API methods are under \"app\", e.g.: `/api/v2/app/methodName`.", ), url: "app", }, ApiGroup { name: "log", methods: [ ApiMethod { name: "main", description: Some( "Each element of the array has the following properties:\n\nExample:\n\n```JSON\n[\n {\n \"id\":0,\n \"message\":\"qBittorrent v3.4.0 started\",\n \"timestamp\":1507969127860,\n \"type\":1\n },\n {\n \"id\":1,\n \"message\":\"qBittorrent is trying to listen on any interface port: 19036\",\n \"timestamp\":1507969127869,\n \"type\":2\n },\n {\n \"id\":2,\n \"message\":\"Peer ID: -qB3400-\",\n \"timestamp\":1507969127870,\n \"type\":1\n },\n {\n \"id\":3,\n \"message\":\"HTTP User-Agent is 'qBittorrent/3.4.0'\",\n \"timestamp\":1507969127870,\n \"type\":1\n },\n {\n \"id\":4,\n \"message\":\"DHT support [ON]\",\n \"timestamp\":1507969127871,\n \"type\":2\n },\n {\n \"id\":5,\n \"message\":\"Local Peer Discovery support [ON]\",\n \"timestamp\":1507969127871,\n \"type\":2\n },\n {\n \"id\":6,\n \"message\":\"PeX support [ON]\",\n \"timestamp\":1507969127871,\n \"type\":2\n },\n {\n \"id\":7,\n \"message\":\"Anonymous mode [OFF]\",\n \"timestamp\":1507969127871,\n \"type\":2\n },\n {\n \"id\":8,\n \"message\":\"Encryption support [ON]\",\n \"timestamp\":1507969127871,\n \"type\":2\n },\n {\n \"id\":9,\n \"message\":\"Embedded Tracker [OFF]\",\n \"timestamp\":1507969127871,\n \"type\":2\n },\n {\n \"id\":10,\n \"message\":\"UPnP / NAT-PMP support [ON]\",\n \"timestamp\":1507969127873,\n \"type\":2\n },\n {\n \"id\":11,\n \"message\":\"Web UI: Now listening on port 8080\",\n \"timestamp\":1507969127883,\n \"type\":1\n },\n {\n \"id\":12,\n \"message\":\"Options were saved successfully.\",\n \"timestamp\":1507969128055,\n \"type\":1\n },\n {\n \"id\":13,\n \"message\":\"qBittorrent is successfully listening on interface :: port: TCP/19036\",\n \"timestamp\":1507969128270,\n \"type\":2\n },\n {\n \"id\":14,\n \"message\":\"qBittorrent is successfully listening on interface 0.0.0.0 port: TCP/19036\",\n \"timestamp\":1507969128271,\n \"type\":2\n },\n {\n \"id\":15,\n \"message\":\"qBittorrent is successfully listening on interface 0.0.0.0 port: UDP/19036\",\n \"timestamp\":1507969128272,\n \"type\":2\n }\n]\n```", ), parameters: Some( [ Bool( TypeInfo { name: "normal", is_optional: true, is_list: false, description: Some( "Include normal messages (default: true)", ), type_description: None, }, ), Bool( TypeInfo { name: "info", is_optional: true, is_list: false, description: Some( "Include info messages (default: true)", ), type_description: None, }, ), Bool( TypeInfo { name: "warning", is_optional: true, is_list: false, description: Some( "Include warning messages (default: true)", ), type_description: None, }, ), Bool( TypeInfo { name: "critical", is_optional: true, is_list: false, description: Some( "Include critical messages (default: true)", ), type_description: None, }, ), Number( TypeInfo { name: "last_known_id", is_optional: true, is_list: false, description: Some( "Exclude messages with \"message id\" <= last_known_id (default: -1)", ), type_description: None, }, ), ], ), return_type: Some( ReturnType { is_list: true, parameters: [ ReturnTypeParameter { name: "id", description: "ID of the message", return_type: Number( TypeInfo { name: "id", is_optional: false, is_list: false, description: Some( "ID of the message", ), type_description: None, }, ), }, ReturnTypeParameter { name: "message", description: "Text of the message", return_type: String( TypeInfo { name: "message", is_optional: false, is_list: false, description: Some( "Text of the message", ), type_description: None, }, ), }, ReturnTypeParameter { name: "timestamp", description: "Milliseconds since epoch", return_type: Number( TypeInfo { name: "timestamp", is_optional: false, is_list: false, description: Some( "Milliseconds since epoch", ), type_description: None, }, ), }, ReturnTypeParameter { name: "type", description: "Type of the message: Log::NORMAL: 1, Log::INFO: 2, Log::WARNING: 4, Log::CRITICAL: 8", return_type: Number( TypeInfo { name: "type", is_optional: false, is_list: false, description: Some( "Type of the message: Log::NORMAL: 1, Log::INFO: 2, Log::WARNING: 4, Log::CRITICAL: 8", ), type_description: None, }, ), }, ], }, ), url: "main", }, ApiMethod { name: "peers", description: None, parameters: Some( [ Number( TypeInfo { name: "last_known_id", is_optional: true, is_list: false, description: Some( "Exclude messages with \"message id\" <= last_known_id (default: -1)", ), type_description: None, }, ), ], ), return_type: None, url: "peers", }, ], description: Some( "All Log API methods are under \"log\", e.g.: `/api/v2/log/methodName`.", ), url: "log", }, ApiGroup { name: "sync", methods: [ ApiMethod { name: "maindata", description: Some( "Example:\n\n```JSON\n{\n \"rid\":15,\n \"torrents\":\n {\n \"8c212779b4abde7c6bc608063a0d008b7e40ce32\":\n {\n \"state\":\"pausedUP\"\n }\n }\n}\n```", ), parameters: Some( [ Number( TypeInfo { name: "rid", is_optional: false, is_list: false, description: Some( "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)", ), type_description: None, }, ), ], ), return_type: Some( ReturnType { is_list: false, parameters: [ ReturnTypeParameter { name: "rid", description: "Response ID", return_type: Number( TypeInfo { name: "rid", is_optional: false, is_list: false, description: Some( "Response ID", ), type_description: None, }, ), }, ReturnTypeParameter { name: "full_update", description: "Whether the response contains all the data or partial data", return_type: Bool( TypeInfo { name: "full_update", is_optional: false, is_list: false, description: Some( "Whether the response contains all the data or partial data", ), type_description: None, }, ), }, ReturnTypeParameter { name: "torrents", description: "Property: torrent hash, value: same as [torrent list](#get-torrent-list)", return_type: Object( TypeInfo { name: "torrents", is_optional: false, is_list: false, description: Some( "Property: torrent hash, value: same as [torrent list](#get-torrent-list)", ), type_description: None, }, ), }, ReturnTypeParameter { name: "torrents_removed", description: "List of hashes of torrents removed since last request", return_type: StringArray( TypeInfo { name: "torrents_removed", is_optional: false, is_list: false, description: Some( "List of hashes of torrents removed since last request", ), type_description: None, }, ), }, ReturnTypeParameter { name: "categories", description: "Info for categories added since last request", return_type: Object( TypeInfo { name: "categories", is_optional: false, is_list: false, description: Some( "Info for categories added since last request", ), type_description: None, }, ), }, ReturnTypeParameter { name: "categories_removed", description: "List of categories removed since last request", return_type: StringArray( TypeInfo { name: "categories_removed", is_optional: false, is_list: false, description: Some( "List of categories removed since last request", ), type_description: None, }, ), }, ReturnTypeParameter { name: "tags", description: "List of tags added since last request", return_type: StringArray( TypeInfo { name: "tags", is_optional: false, is_list: false, description: Some( "List of tags added since last request", ), type_description: None, }, ), }, ReturnTypeParameter { name: "tags_removed", description: "List of tags removed since last request", return_type: StringArray( TypeInfo { name: "tags_removed", is_optional: false, is_list: false, description: Some( "List of tags removed since last request", ), type_description: None, }, ), }, ReturnTypeParameter { name: "server_state", description: "Global transfer info", return_type: Object( TypeInfo { name: "server_state", is_optional: false, is_list: false, description: Some( "Global transfer info", ), type_description: None, }, ), }, ], }, ), url: "maindata", }, ApiMethod { name: "torrentPeers", description: None, parameters: Some( [ String( TypeInfo { name: "hash", is_optional: false, is_list: false, description: Some( "Torrent hash", ), type_description: None, }, ), Number( TypeInfo { name: "rid", is_optional: false, is_list: false, description: Some( "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)", ), type_description: None, }, ), ], ), return_type: None, url: "torrentPeers", }, ], description: Some( "Sync API implements requests for obtaining changes since the last request.\nAll Sync API methods are under \"sync\", e.g.: `/api/v2/sync/methodName`.", ), url: "sync", }, ApiGroup { name: "transfer_info", methods: [ ApiMethod { name: "info", description: Some( "In addition to the above in partial data requests (see [Get partial data](#get-partial-data) for more info):\n\nPossible values of `connection_status`:\n\nExample:\n\n```JSON\n{\n \"connection_status\":\"connected\",\n \"dht_nodes\":386,\n \"dl_info_data\":681521119,\n \"dl_info_speed\":0,\n \"dl_rate_limit\":0,\n \"up_info_data\":10747904,\n \"up_info_speed\":0,\n \"up_rate_limit\":1048576\n}\n```", ), parameters: None, return_type: Some( ReturnType { is_list: false, parameters: [ ReturnTypeParameter { name: "dl_info_speed", description: "Global download rate (bytes/s)", return_type: Number( TypeInfo { name: "dl_info_speed", is_optional: false, is_list: false, description: Some( "Global download rate (bytes/s)", ), type_description: None, }, ), }, ReturnTypeParameter { name: "dl_info_data", description: "Data downloaded this session (bytes)", return_type: Number( TypeInfo { name: "dl_info_data", is_optional: false, is_list: false, description: Some( "Data downloaded this session (bytes)", ), type_description: None, }, ), }, ReturnTypeParameter { name: "up_info_speed", description: "Global upload rate (bytes/s)", return_type: Number( TypeInfo { name: "up_info_speed", is_optional: false, is_list: false, description: Some( "Global upload rate (bytes/s)", ), type_description: None, }, ), }, ReturnTypeParameter { name: "up_info_data", description: "Data uploaded this session (bytes)", return_type: Number( TypeInfo { name: "up_info_data", is_optional: false, is_list: false, description: Some( "Data uploaded this session (bytes)", ), type_description: None, }, ), }, ReturnTypeParameter { name: "dl_rate_limit", description: "Download rate limit (bytes/s)", return_type: Number( TypeInfo { name: "dl_rate_limit", is_optional: false, is_list: false, description: Some( "Download rate limit (bytes/s)", ), type_description: None, }, ), }, ReturnTypeParameter { name: "up_rate_limit", description: "Upload rate limit (bytes/s)", return_type: Number( TypeInfo { name: "up_rate_limit", is_optional: false, is_list: false, description: Some( "Upload rate limit (bytes/s)", ), type_description: None, }, ), }, ReturnTypeParameter { name: "dht_nodes", description: "DHT nodes connected to", return_type: Number( TypeInfo { name: "dht_nodes", is_optional: false, is_list: false, description: Some( "DHT nodes connected to", ), type_description: None, }, ), }, ReturnTypeParameter { name: "connection_status", description: "Connection status. See possible values here below", return_type: String( TypeInfo { name: "connection_status", is_optional: false, is_list: false, description: Some( "Connection status. See possible values here below", ), type_description: Some( TypeDescription { values: [ TypeDescriptions { value: "connected", description: "", }, TypeDescriptions { value: "firewalled", description: "", }, TypeDescriptions { value: "disconnected", description: "", }, ], }, ), }, ), }, ], }, ), url: "info", }, ApiMethod { name: "speedLimitsMode", description: None, parameters: None, return_type: None, url: "speedLimitsMode", }, ApiMethod { name: "toggleSpeedLimitsMode", description: None, parameters: None, return_type: None, url: "toggleSpeedLimitsMode", }, ApiMethod { name: "downloadLimit", description: None, parameters: None, return_type: None, url: "downloadLimit", }, ApiMethod { name: "setDownloadLimit", description: None, parameters: Some( [ Number( TypeInfo { name: "limit", is_optional: false, is_list: false, description: Some( "The global download speed limit to set in bytes/second", ), type_description: None, }, ), ], ), return_type: None, url: "setDownloadLimit", }, ApiMethod { name: "uploadLimit", description: None, parameters: None, return_type: None, url: "uploadLimit", }, ApiMethod { name: "setUploadLimit", description: None, parameters: Some( [ Number( TypeInfo { name: "limit", is_optional: false, is_list: false, description: Some( "The global upload speed limit to set in bytes/second", ), type_description: None, }, ), ], ), return_type: None, url: "setUploadLimit", }, ApiMethod { name: "banPeers", description: None, parameters: Some( [ String( TypeInfo { name: "peers", is_optional: false, is_list: false, description: Some( "The peer to ban, or multiple peers separated by a pipe \\", ), type_description: None, }, ), ], ), return_type: None, url: "banPeers", }, ], description: Some( "All Transfer info API methods are under \"transfer\", e.g.: `/api/v2/transfer/methodName`.", ), url: "transfer", }, ApiGroup { name: "torrent_management", methods: [ ApiMethod { name: "info", description: Some( "Possible values of `state`:\n\nExample:\n\n```JSON\n[\n {\n \"dlspeed\":9681262,\n \"eta\":87,\n \"f_l_piece_prio\":false,\n \"force_start\":false,\n \"hash\":\"8c212779b4abde7c6bc608063a0d008b7e40ce32\",\n \"category\":\"\",\n \"tags\": \"\",\n \"name\":\"debian-8.1.0-amd64-CD-1.iso\",\n \"num_complete\":-1,\n \"num_incomplete\":-1,\n \"num_leechs\":2,\n \"num_seeds\":54,\n \"priority\":1,\n \"progress\":0.16108787059783936,\n \"ratio\":0,\n \"seq_dl\":false,\n \"size\":657457152,\n \"state\":\"downloading\",\n \"super_seeding\":false,\n \"upspeed\":0\n },\n {\n another_torrent_info\n }\n]\n```", ), parameters: Some( [ String( TypeInfo { name: "filter", is_optional: true, is_list: false, description: Some( "Filter torrent list by state. Allowed state filters: all, downloading, seeding, completed, paused, active, inactive, resumed, stalled, stalled_uploading, stalled_downloading, errored", ), type_description: None, }, ), String( TypeInfo { name: "category", is_optional: true, is_list: false, description: Some( "Get torrents with the given category (empty string means \"without category\"; no \"category\" parameter means \"any category\" <- broken until [#11748](https://github.com/qbittorrent/qBittorrent/issues/11748) is resolved). Remember to URL-encode the category name. For example, My category becomes My%20category", ), type_description: None, }, ), String( TypeInfo { name: "tag", is_optional: true, is_list: false, description: Some( "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", ), type_description: None, }, ), String( TypeInfo { name: "sort", is_optional: true, is_list: false, description: Some( "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.", ), type_description: None, }, ), Bool( TypeInfo { name: "reverse", is_optional: true, is_list: false, description: Some( "Enable reverse sorting. Defaults to false", ), type_description: None, }, ), Number( TypeInfo { name: "limit", is_optional: true, is_list: false, description: Some( "Limit the number of torrents returned", ), type_description: None, }, ), Number( TypeInfo { name: "offset", is_optional: true, is_list: false, description: Some( "Set offset (if less than 0, offset from end)", ), type_description: None, }, ), String( TypeInfo { name: "hashes", is_optional: true, is_list: false, description: Some( "Filter by hashes. Can contain multiple hashes separated by \\", ), type_description: None, }, ), ], ), return_type: Some( ReturnType { is_list: true, parameters: [ ReturnTypeParameter { name: "added_on", description: "Time (Unix Epoch) when the torrent was added to the client", return_type: Number( TypeInfo { name: "added_on", is_optional: false, is_list: false, description: Some( "Time (Unix Epoch) when the torrent was added to the client", ), type_description: None, }, ), }, ReturnTypeParameter { name: "amount_left", description: "Amount of data left to download (bytes)", return_type: Number( TypeInfo { name: "amount_left", is_optional: false, is_list: false, description: Some( "Amount of data left to download (bytes)", ), type_description: None, }, ), }, ReturnTypeParameter { name: "auto_tmm", description: "Whether this torrent is managed by Automatic Torrent Management", return_type: Bool( TypeInfo { name: "auto_tmm", is_optional: false, is_list: false, description: Some( "Whether this torrent is managed by Automatic Torrent Management", ), type_description: None, }, ), }, ReturnTypeParameter { name: "availability", description: "Percentage of file pieces currently available", return_type: Float( TypeInfo { name: "availability", is_optional: false, is_list: false, description: Some( "Percentage of file pieces currently available", ), type_description: None, }, ), }, ReturnTypeParameter { name: "category", description: "Category of the torrent", return_type: String( TypeInfo { name: "category", is_optional: false, is_list: false, description: Some( "Category of the torrent", ), type_description: None, }, ), }, ReturnTypeParameter { name: "completed", description: "Amount of transfer data completed (bytes)", return_type: Number( TypeInfo { name: "completed", is_optional: false, is_list: false, description: Some( "Amount of transfer data completed (bytes)", ), type_description: None, }, ), }, ReturnTypeParameter { name: "completion_on", description: "Time (Unix Epoch) when the torrent completed", return_type: Number( TypeInfo { name: "completion_on", is_optional: false, is_list: false, description: Some( "Time (Unix Epoch) when the torrent completed", ), type_description: None, }, ), }, ReturnTypeParameter { name: "content_path", description: "Absolute path of torrent content (root path for multifile torrents, absolute file path for singlefile torrents)", return_type: String( TypeInfo { name: "content_path", is_optional: false, is_list: false, description: Some( "Absolute path of torrent content (root path for multifile torrents, absolute file path for singlefile torrents)", ), type_description: None, }, ), }, ReturnTypeParameter { name: "dl_limit", description: "Torrent download speed limit (bytes/s). -1 if ulimited.", return_type: Number( TypeInfo { name: "dl_limit", is_optional: false, is_list: false, description: Some( "Torrent download speed limit (bytes/s). -1 if ulimited.", ), type_description: None, }, ), }, ReturnTypeParameter { name: "dlspeed", description: "Torrent download speed (bytes/s)", return_type: Number( TypeInfo { name: "dlspeed", is_optional: false, is_list: false, description: Some( "Torrent download speed (bytes/s)", ), type_description: None, }, ), }, ReturnTypeParameter { name: "downloaded", description: "Amount of data downloaded", return_type: Number( TypeInfo { name: "downloaded", is_optional: false, is_list: false, description: Some( "Amount of data downloaded", ), type_description: None, }, ), }, ReturnTypeParameter { name: "downloaded_session", description: "Amount of data downloaded this session", return_type: Number( TypeInfo { name: "downloaded_session", is_optional: false, is_list: false, description: Some( "Amount of data downloaded this session", ), type_description: None, }, ), }, ReturnTypeParameter { name: "eta", description: "Torrent ETA (seconds)", return_type: Number( TypeInfo { name: "eta", is_optional: false, is_list: false, description: Some( "Torrent ETA (seconds)", ), type_description: None, }, ), }, ReturnTypeParameter { name: "f_l_piece_prio", description: "True if first last piece are prioritized", return_type: Bool( TypeInfo { name: "f_l_piece_prio", is_optional: false, is_list: false, description: Some( "True if first last piece are prioritized", ), type_description: None, }, ), }, ReturnTypeParameter { name: "force_start", description: "True if force start is enabled for this torrent", return_type: Bool( TypeInfo { name: "force_start", is_optional: false, is_list: false, description: Some( "True if force start is enabled for this torrent", ), type_description: None, }, ), }, ReturnTypeParameter { name: "hash", description: "Torrent hash", return_type: String( TypeInfo { name: "hash", is_optional: false, is_list: false, description: Some( "Torrent hash", ), type_description: None, }, ), }, ReturnTypeParameter { name: "last_activity", description: "Last time (Unix Epoch) when a chunk was downloaded/uploaded", return_type: Number( TypeInfo { name: "last_activity", is_optional: false, is_list: false, description: Some( "Last time (Unix Epoch) when a chunk was downloaded/uploaded", ), type_description: None, }, ), }, ReturnTypeParameter { name: "magnet_uri", description: "Magnet URI corresponding to this torrent", return_type: String( TypeInfo { name: "magnet_uri", is_optional: false, is_list: false, description: Some( "Magnet URI corresponding to this torrent", ), type_description: None, }, ), }, ReturnTypeParameter { name: "max_ratio", description: "Maximum share ratio until torrent is stopped from seeding/uploading", return_type: Float( TypeInfo { name: "max_ratio", is_optional: false, is_list: false, description: Some( "Maximum share ratio until torrent is stopped from seeding/uploading", ), type_description: None, }, ), }, ReturnTypeParameter { name: "max_seeding_time", description: "Maximum seeding time (seconds) until torrent is stopped from seeding", return_type: Number( TypeInfo { name: "max_seeding_time", is_optional: false, is_list: false, description: Some( "Maximum seeding time (seconds) until torrent is stopped from seeding", ), type_description: None, }, ), }, ReturnTypeParameter { name: "name", description: "Torrent name", return_type: String( TypeInfo { name: "name", is_optional: false, is_list: false, description: Some( "Torrent name", ), type_description: None, }, ), }, ReturnTypeParameter { name: "num_complete", description: "Number of seeds in the swarm", return_type: Number( TypeInfo { name: "num_complete", is_optional: false, is_list: false, description: Some( "Number of seeds in the swarm", ), type_description: None, }, ), }, ReturnTypeParameter { name: "num_incomplete", description: "Number of leechers in the swarm", return_type: Number( TypeInfo { name: "num_incomplete", is_optional: false, is_list: false, description: Some( "Number of leechers in the swarm", ), type_description: None, }, ), }, ReturnTypeParameter { name: "num_leechs", description: "Number of leechers connected to", return_type: Number( TypeInfo { name: "num_leechs", is_optional: false, is_list: false, description: Some( "Number of leechers connected to", ), type_description: None, }, ), }, ReturnTypeParameter { name: "num_seeds", description: "Number of seeds connected to", return_type: Number( TypeInfo { name: "num_seeds", is_optional: false, is_list: false, description: Some( "Number of seeds connected to", ), type_description: None, }, ), }, ReturnTypeParameter { name: "priority", description: "Torrent priority. Returns -1 if queuing is disabled or torrent is in seed mode", return_type: Number( TypeInfo { name: "priority", is_optional: false, is_list: false, description: Some( "Torrent priority. Returns -1 if queuing is disabled or torrent is in seed mode", ), type_description: None, }, ), }, ReturnTypeParameter { name: "progress", description: "Torrent progress (percentage/100)", return_type: Float( TypeInfo { name: "progress", is_optional: false, is_list: false, description: Some( "Torrent progress (percentage/100)", ), type_description: None, }, ), }, ReturnTypeParameter { name: "ratio", description: "Torrent share ratio. Max ratio value: 9999.", return_type: Float( TypeInfo { name: "ratio", is_optional: false, is_list: false, description: Some( "Torrent share ratio. Max ratio value: 9999.", ), type_description: None, }, ), }, ReturnTypeParameter { name: "ratio_limit", description: "TODO (what is different from max_ratio?)", return_type: Float( TypeInfo { name: "ratio_limit", is_optional: false, is_list: false, description: Some( "TODO (what is different from max_ratio?)", ), type_description: None, }, ), }, ReturnTypeParameter { name: "save_path", description: "Path where this torrent's data is stored", return_type: String( TypeInfo { name: "save_path", is_optional: false, is_list: false, description: Some( "Path where this torrent's data is stored", ), type_description: None, }, ), }, ReturnTypeParameter { name: "seeding_time", description: "Torrent elapsed time while complete (seconds)", return_type: Number( TypeInfo { name: "seeding_time", is_optional: false, is_list: false, description: Some( "Torrent elapsed time while complete (seconds)", ), type_description: None, }, ), }, ReturnTypeParameter { name: "seeding_time_limit", description: "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.", return_type: Number( TypeInfo { name: "seeding_time_limit", is_optional: false, is_list: false, description: Some( "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.", ), type_description: None, }, ), }, ReturnTypeParameter { name: "seen_complete", description: "Time (Unix Epoch) when this torrent was last seen complete", return_type: Number( TypeInfo { name: "seen_complete", is_optional: false, is_list: false, description: Some( "Time (Unix Epoch) when this torrent was last seen complete", ), type_description: None, }, ), }, ReturnTypeParameter { name: "seq_dl", description: "True if sequential download is enabled", return_type: Bool( TypeInfo { name: "seq_dl", is_optional: false, is_list: false, description: Some( "True if sequential download is enabled", ), type_description: None, }, ), }, ReturnTypeParameter { name: "size", description: "Total size (bytes) of files selected for download", return_type: Number( TypeInfo { name: "size", is_optional: false, is_list: false, description: Some( "Total size (bytes) of files selected for download", ), type_description: None, }, ), }, ReturnTypeParameter { name: "state", description: "Torrent state. See table here below for the possible values", return_type: String( TypeInfo { name: "state", is_optional: false, is_list: false, description: Some( "Torrent state. See table here below for the possible values", ), type_description: Some( TypeDescription { values: [ TypeDescriptions { value: "error", description: "Some error occurred, applies to paused torrents", }, TypeDescriptions { value: "missingFiles", description: "Torrent data files is missing", }, TypeDescriptions { value: "uploading", description: "Torrent is being seeded and data is being transferred", }, TypeDescriptions { value: "pausedUP", description: "Torrent is paused and has finished downloading", }, TypeDescriptions { value: "queuedUP", description: "Queuing is enabled and torrent is queued for upload", }, TypeDescriptions { value: "stalledUP", description: "Torrent is being seeded, but no connection were made", }, TypeDescriptions { value: "checkingUP", description: "Torrent has finished downloading and is being checked", }, TypeDescriptions { value: "forcedUP", description: "Torrent is forced to uploading and ignore queue limit", }, TypeDescriptions { value: "allocating", description: "Torrent is allocating disk space for download", }, TypeDescriptions { value: "downloading", description: "Torrent is being downloaded and data is being transferred", }, TypeDescriptions { value: "metaDL", description: "Torrent has just started downloading and is fetching metadata", }, TypeDescriptions { value: "pausedDL", description: "Torrent is paused and has NOT finished downloading", }, TypeDescriptions { value: "queuedDL", description: "Queuing is enabled and torrent is queued for download", }, TypeDescriptions { value: "stalledDL", description: "Torrent is being downloaded, but no connection were made", }, TypeDescriptions { value: "checkingDL", description: "Same as checkingUP, but torrent has NOT finished downloading", }, TypeDescriptions { value: "forcedDL", description: "Torrent is forced to downloading to ignore queue limit", }, TypeDescriptions { value: "checkingResumeData", description: "Checking resume data on qBt startup", }, TypeDescriptions { value: "moving", description: "Torrent is moving to another location", }, TypeDescriptions { value: "unknown", description: "Unknown status", }, ], }, ), }, ), }, ReturnTypeParameter { name: "super_seeding", description: "True if super seeding is enabled", return_type: Bool( TypeInfo { name: "super_seeding", is_optional: false, is_list: false, description: Some( "True if super seeding is enabled", ), type_description: None, }, ), }, ReturnTypeParameter { name: "tags", description: "Comma-concatenated tag list of the torrent", return_type: String( TypeInfo { name: "tags", is_optional: false, is_list: false, description: Some( "Comma-concatenated tag list of the torrent", ), type_description: None, }, ), }, ReturnTypeParameter { name: "time_active", description: "Total active time (seconds)", return_type: Number( TypeInfo { name: "time_active", is_optional: false, is_list: false, description: Some( "Total active time (seconds)", ), type_description: None, }, ), }, ReturnTypeParameter { name: "total_size", description: "Total size (bytes) of all file in this torrent (including unselected ones)", return_type: Number( TypeInfo { name: "total_size", is_optional: false, is_list: false, description: Some( "Total size (bytes) of all file in this torrent (including unselected ones)", ), type_description: None, }, ), }, ReturnTypeParameter { name: "tracker", description: "The first tracker with working status. Returns empty string if no tracker is working.", return_type: String( TypeInfo { name: "tracker", is_optional: false, is_list: false, description: Some( "The first tracker with working status. Returns empty string if no tracker is working.", ), type_description: None, }, ), }, ReturnTypeParameter { name: "up_limit", description: "Torrent upload speed limit (bytes/s). -1 if ulimited.", return_type: Number( TypeInfo { name: "up_limit", is_optional: false, is_list: false, description: Some( "Torrent upload speed limit (bytes/s). -1 if ulimited.", ), type_description: None, }, ), }, ReturnTypeParameter { name: "uploaded", description: "Amount of data uploaded", return_type: Number( TypeInfo { name: "uploaded", is_optional: false, is_list: false, description: Some( "Amount of data uploaded", ), type_description: None, }, ), }, ReturnTypeParameter { name: "uploaded_session", description: "Amount of data uploaded this session", return_type: Number( TypeInfo { name: "uploaded_session", is_optional: false, is_list: false, description: Some( "Amount of data uploaded this session", ), type_description: None, }, ), }, ReturnTypeParameter { name: "upspeed", description: "Torrent upload speed (bytes/s)", return_type: Number( TypeInfo { name: "upspeed", is_optional: false, is_list: false, description: Some( "Torrent upload speed (bytes/s)", ), type_description: None, }, ), }, ], }, ), url: "info", }, ApiMethod { name: "properties", description: Some( "- empty, if the torrent hash is invalid\n- otherwise, a JSON object with the following fields\n\nNB: `-1` is returned if the type of the property is integer but its value is not known.\n\nExample:\n\n```JSON\n{\n \"addition_date\":1438429165,\n \"comment\":\"\\\"Debian CD from cdimage.debian.org\\\"\",\n \"completion_date\":1438429234,\n \"created_by\":\"\",\n \"creation_date\":1433605214,\n \"dl_limit\":-1,\n \"dl_speed\":0,\n \"dl_speed_avg\":9736015,\n \"eta\":8640000,\n \"last_seen\":1438430354,\n \"nb_connections\":3,\n \"nb_connections_limit\":250,\n \"peers\":1,\n \"peers_total\":89,\n \"piece_size\":524288,\n \"pieces_have\":1254,\n \"pieces_num\":1254,\n \"reannounce\":672,\n \"save_path\":\"/Downloads/debian-8.1.0-amd64-CD-1.iso\",\n \"seeding_time\":1128,\n \"seeds\":1,\n \"seeds_total\":254,\n \"share_ratio\":0.00072121022562178299,\n \"time_elapsed\":1197,\n \"total_downloaded\":681521119,\n \"total_downloaded_session\":681521119,\n \"total_size\":657457152,\n \"total_uploaded\":491520,\n \"total_uploaded_session\":491520,\n \"total_wasted\":23481724,\n \"up_limit\":-1,\n \"up_speed\":0,\n \"up_speed_avg\":410\n}\n```", ), parameters: Some( [ String( TypeInfo { name: "hash", is_optional: false, is_list: false, description: Some( "The hash of the torrent you want to get the generic properties of", ), type_description: None, }, ), ], ), return_type: None, url: "properties", }, ApiMethod { name: "trackers", description: Some( "Possible values of `status`:\n\nExample:\n\n```JSON\n[\n {\n \"msg\":\"\",\n \"num_peers\":100,\n \"status\":2,\n \"url\":\"http://bttracker.debian.org:6969/announce\"\n },\n {\n another_tracker_info\n }\n]\n```", ), parameters: Some( [ String( TypeInfo { name: "hash", is_optional: false, is_list: false, description: Some( "The hash of the torrent you want to get the trackers of", ), type_description: None, }, ), ], ), return_type: Some( ReturnType { is_list: true, parameters: [ ReturnTypeParameter { name: "url", description: "Tracker url", return_type: String( TypeInfo { name: "url", is_optional: false, is_list: false, description: Some( "Tracker url", ), type_description: None, }, ), }, ReturnTypeParameter { name: "status", description: "Tracker status. See the table below for possible values", return_type: Number( TypeInfo { name: "status", is_optional: false, is_list: false, description: Some( "Tracker status. See the table below for possible values", ), type_description: Some( TypeDescription { values: [ TypeDescriptions { value: "0", description: "Tracker is disabled (used for DHT, PeX, and LSD)", }, TypeDescriptions { value: "1", description: "Tracker has not been contacted yet", }, TypeDescriptions { value: "2", description: "Tracker has been contacted and is working", }, TypeDescriptions { value: "3", description: "Tracker is updating", }, TypeDescriptions { value: "4", description: "Tracker has been contacted, but it is not working (or doesn't send proper replies)", }, ], }, ), }, ), }, ReturnTypeParameter { name: "tier", description: "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).", return_type: Number( TypeInfo { name: "tier", is_optional: false, is_list: false, description: Some( "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).", ), type_description: None, }, ), }, ReturnTypeParameter { name: "num_peers", description: "Number of peers for current torrent, as reported by the tracker", return_type: Number( TypeInfo { name: "num_peers", is_optional: false, is_list: false, description: Some( "Number of peers for current torrent, as reported by the tracker", ), type_description: None, }, ), }, ReturnTypeParameter { name: "num_seeds", description: "Number of seeds for current torrent, asreported by the tracker", return_type: Number( TypeInfo { name: "num_seeds", is_optional: false, is_list: false, description: Some( "Number of seeds for current torrent, asreported by the tracker", ), type_description: None, }, ), }, ReturnTypeParameter { name: "num_leeches", description: "Number of leeches for current torrent, as reported by the tracker", return_type: Number( TypeInfo { name: "num_leeches", is_optional: false, is_list: false, description: Some( "Number of leeches for current torrent, as reported by the tracker", ), type_description: None, }, ), }, ReturnTypeParameter { name: "num_downloaded", description: "Number of completed downlods for current torrent, as reported by the tracker", return_type: Number( TypeInfo { name: "num_downloaded", is_optional: false, is_list: false, description: Some( "Number of completed downlods for current torrent, as reported by the tracker", ), type_description: None, }, ), }, ReturnTypeParameter { name: "msg", description: "Tracker message (there is no way of knowing what this message is - it's up to tracker admins)", return_type: String( TypeInfo { name: "msg", is_optional: false, is_list: false, description: Some( "Tracker message (there is no way of knowing what this message is - it's up to tracker admins)", ), type_description: None, }, ), }, ], }, ), url: "trackers", }, ApiMethod { name: "webseeds", description: Some( "Example:\n\n```JSON\n[\n {\n \"url\":\"http://some_url/\"\n },\n {\n \"url\":\"http://some_other_url/\"\n }\n]\n```", ), parameters: Some( [ String( TypeInfo { name: "hash", is_optional: false, is_list: false, description: Some( "The hash of the torrent you want to get the webseeds of", ), type_description: None, }, ), ], ), return_type: Some( ReturnType { is_list: true, parameters: [ ReturnTypeParameter { name: "url", description: "URL of the web seed", return_type: String( TypeInfo { name: "url", is_optional: false, is_list: false, description: Some( "URL of the web seed", ), type_description: None, }, ), }, ], }, ), url: "webseeds", }, ApiMethod { name: "files", description: Some( "- empty, if the torrent hash is invalid\n- otherwise, a JSON array, where each element contains info about one file, with the following fields\n\nPossible values of `priority`:\n\nExample:\n\n```JSON\n\n[\n {\n \"index\":0,\n \"is_seed\":false,\n \"name\":\"debian-8.1.0-amd64-CD-1.iso\",\n \"piece_range\":[0,1253],\n \"priority\":1,\n \"progress\":0,\n \"size\":657457152,\n \"availability\":0.5,\n }\n]\n```", ), parameters: Some( [ String( TypeInfo { name: "hash", is_optional: false, is_list: false, description: Some( "The hash of the torrent you want to get the contents of", ), type_description: None, }, ), String( TypeInfo { name: "indexes", is_optional: true, is_list: false, description: Some( "The indexes of the files you want to retrieve. indexes can contain multiple values separated by \\", ), type_description: None, }, ), ], ), return_type: None, url: "files", }, ApiMethod { name: "pieceStates", description: Some( "- empty, if the torrent hash is invalid\n- otherwise, an array of states (integers) of all pieces (in order) of a specific torrent.\n\nValue meanings are defined as below:\n\nExample:\n\n```JSON\n[0,0,2,1,0,0,2,1]\n```", ), parameters: Some( [ String( TypeInfo { name: "hash", is_optional: false, is_list: false, description: Some( "The hash of the torrent you want to get the pieces' states of", ), type_description: None, }, ), ], ), return_type: None, url: "pieceStates", }, ApiMethod { name: "pieceHashes", description: Some( "- empty, if the torrent hash is invalid\n- otherwise, an array of hashes (strings) of all pieces (in order) of a specific torrent.\n\nExample:\n\n```JSON\n[\"54eddd830a5b58480a6143d616a97e3a6c23c439\",\"f8a99d225aa4241db100f88407fc3bdaead583ab\",\"928fb615b9bd4dd8f9e9022552c8f8f37ef76f58\"]\n```", ), parameters: Some( [ String( TypeInfo { name: "hash", is_optional: false, is_list: false, description: Some( "The hash of the torrent you want to get the pieces' hashes of", ), type_description: None, }, ), ], ), return_type: None, url: "pieceHashes", }, ApiMethod { name: "pause", description: None, parameters: Some( [ String( TypeInfo { name: "hashes", is_optional: false, is_list: false, description: Some( "The hashes of the torrents you want to pause. hashes can contain multiple hashes separated by \\", ), type_description: None, }, ), ], ), return_type: None, url: "pause", }, ApiMethod { name: "resume", description: None, parameters: Some( [ String( TypeInfo { name: "hashes", is_optional: false, is_list: false, description: Some( "The hashes of the torrents you want to resume. hashes can contain multiple hashes separated by \\", ), type_description: None, }, ), ], ), return_type: None, url: "resume", }, ApiMethod { name: "delete", description: None, parameters: Some( [ String( TypeInfo { name: "hashes", is_optional: false, is_list: false, description: Some( "The hashes of the torrents you want to delete. hashes can contain multiple hashes separated by \\", ), type_description: None, }, ), ], ), return_type: None, url: "delete", }, ApiMethod { name: "recheck", description: None, parameters: Some( [ String( TypeInfo { name: "hashes", is_optional: false, is_list: false, description: Some( "The hashes of the torrents you want to recheck. hashes can contain multiple hashes separated by \\", ), type_description: None, }, ), ], ), return_type: None, url: "recheck", }, ApiMethod { name: "reannounce", description: None, parameters: Some( [ String( TypeInfo { name: "hashes", is_optional: false, is_list: false, description: Some( "The hashes of the torrents you want to reannounce. hashes can contain multiple hashes separated by \\", ), type_description: None, }, ), ], ), return_type: None, url: "reannounce", }, ApiMethod { name: "add", description: None, parameters: Some( [ String( TypeInfo { name: "urls", is_optional: false, is_list: false, description: Some( "URLs separated with newlines", ), type_description: None, }, ), String( TypeInfo { name: "savepath", is_optional: true, is_list: false, description: Some( "Download folder", ), type_description: None, }, ), String( TypeInfo { name: "cookie", is_optional: true, is_list: false, description: Some( "Cookie sent to download the .torrent file", ), type_description: None, }, ), String( TypeInfo { name: "category", is_optional: true, is_list: false, description: Some( "Category for the torrent", ), type_description: None, }, ), String( TypeInfo { name: "tags", is_optional: true, is_list: false, description: Some( "Tags for the torrent, split by ','", ), type_description: None, }, ), String( TypeInfo { name: "skip_checking", is_optional: true, is_list: false, description: Some( "Skip hash checking. Possible values are true, false (default)", ), type_description: None, }, ), String( TypeInfo { name: "paused", is_optional: true, is_list: false, description: Some( "Add torrents in the paused state. Possible values are true, false (default)", ), type_description: None, }, ), String( TypeInfo { name: "root_folder", is_optional: true, is_list: false, description: Some( "Create the root folder. Possible values are true, false, unset (default)", ), type_description: None, }, ), String( TypeInfo { name: "rename", is_optional: true, is_list: false, description: Some( "Rename torrent", ), type_description: None, }, ), Number( TypeInfo { name: "upLimit", is_optional: true, is_list: false, description: Some( "Set torrent upload speed limit. Unit in bytes/second", ), type_description: None, }, ), Number( TypeInfo { name: "dlLimit", is_optional: true, is_list: false, description: Some( "Set torrent download speed limit. Unit in bytes/second", ), type_description: None, }, ), Float( TypeInfo { name: "ratioLimit", is_optional: true, is_list: false, description: Some( "Set torrent share ratio limit", ), type_description: None, }, ), Number( TypeInfo { name: "seedingTimeLimit", is_optional: true, is_list: false, description: Some( "Set torrent seeding time limit. Unit in seconds", ), type_description: None, }, ), Bool( TypeInfo { name: "autoTMM", is_optional: true, is_list: false, description: Some( "Whether Automatic Torrent Management should be used", ), type_description: None, }, ), String( TypeInfo { name: "sequentialDownload", is_optional: true, is_list: false, description: Some( "Enable sequential download. Possible values are true, false (default)", ), type_description: None, }, ), String( TypeInfo { name: "firstLastPiecePrio", is_optional: true, is_list: false, description: Some( "Prioritize download first last piece. Possible values are true, false (default)", ), type_description: None, }, ), ], ), return_type: None, url: "add", }, ApiMethod { name: "addTrackers", description: None, parameters: None, return_type: None, url: "addTrackers", }, ApiMethod { name: "editTracker", description: None, parameters: Some( [ String( TypeInfo { name: "hash", is_optional: false, is_list: false, description: Some( "The hash of the torrent", ), type_description: None, }, ), String( TypeInfo { name: "origUrl", is_optional: false, is_list: false, description: Some( "The tracker URL you want to edit", ), type_description: None, }, ), String( TypeInfo { name: "newUrl", is_optional: false, is_list: false, description: Some( "The new URL to replace the origUrl", ), type_description: None, }, ), ], ), return_type: None, url: "editTracker", }, ApiMethod { name: "removeTrackers", description: None, parameters: Some( [ String( TypeInfo { name: "hash", is_optional: false, is_list: false, description: Some( "The hash of the torrent", ), type_description: None, }, ), String( TypeInfo { name: "urls", is_optional: false, is_list: false, description: Some( "URLs to remove, separated by \\", ), type_description: None, }, ), ], ), return_type: None, url: "removeTrackers", }, ApiMethod { name: "addPeers", description: None, parameters: Some( [ String( TypeInfo { name: "hashes", is_optional: false, is_list: false, description: Some( "The hash of the torrent, or multiple hashes separated by a pipe \\", ), type_description: None, }, ), String( TypeInfo { name: "peers", is_optional: false, is_list: false, description: Some( "The peer to add, or multiple peers separated by a pipe \\", ), type_description: None, }, ), ], ), return_type: None, url: "addPeers", }, ApiMethod { name: "increasePrio", description: None, parameters: Some( [ String( TypeInfo { name: "hashes", is_optional: false, is_list: false, description: Some( "The hashes of the torrents you want to increase the priority of. hashes can contain multiple hashes separated by \\", ), type_description: None, }, ), ], ), return_type: None, url: "increasePrio", }, ApiMethod { name: "decreasePrio", description: None, parameters: Some( [ String( TypeInfo { name: "hashes", is_optional: false, is_list: false, description: Some( "The hashes of the torrents you want to decrease the priority of. hashes can contain multiple hashes separated by \\", ), type_description: None, }, ), ], ), return_type: None, url: "decreasePrio", }, ApiMethod { name: "topPrio", description: None, parameters: Some( [ String( TypeInfo { name: "hashes", is_optional: false, is_list: false, description: Some( "The hashes of the torrents you want to set to the maximum priority. hashes can contain multiple hashes separated by \\", ), type_description: None, }, ), ], ), return_type: None, url: "topPrio", }, ApiMethod { name: "bottomPrio", description: None, parameters: Some( [ String( TypeInfo { name: "hashes", is_optional: false, is_list: false, description: Some( "The hashes of the torrents you want to set to the minimum priority. hashes can contain multiple hashes separated by \\", ), type_description: None, }, ), ], ), return_type: None, url: "bottomPrio", }, ApiMethod { name: "filePrio", description: None, parameters: Some( [ String( TypeInfo { name: "hash", is_optional: false, is_list: false, description: Some( "The hash of the torrent", ), type_description: None, }, ), String( TypeInfo { name: "id", is_optional: false, is_list: false, description: Some( "File ids, separated by \\", ), type_description: None, }, ), Number( TypeInfo { name: "priority", is_optional: false, is_list: false, description: Some( "File priority to set (consult [torrent contents API](#get-torrent-contents) for possible values)", ), type_description: None, }, ), ], ), return_type: None, url: "filePrio", }, ApiMethod { name: "downloadLimit", description: None, parameters: None, return_type: None, url: "downloadLimit", }, ApiMethod { name: "setShareLimits", description: None, parameters: None, return_type: None, url: "setShareLimits", }, ApiMethod { name: "uploadLimit", description: None, parameters: None, return_type: None, url: "uploadLimit", }, ApiMethod { name: "setUploadLimit", description: None, parameters: None, return_type: None, url: "setUploadLimit", }, ApiMethod { name: "setLocation", description: None, parameters: None, return_type: None, url: "setLocation", }, ApiMethod { name: "rename", description: None, parameters: None, return_type: None, url: "rename", }, ApiMethod { name: "setCategory", description: None, parameters: None, return_type: None, url: "setCategory", }, ApiMethod { name: "categories", description: None, parameters: None, return_type: None, url: "categories", }, ApiMethod { name: "createCategory", description: None, parameters: None, return_type: None, url: "createCategory", }, ApiMethod { name: "editCategory", description: None, parameters: None, return_type: None, url: "editCategory", }, ApiMethod { name: "removeCategories", description: None, parameters: None, return_type: None, url: "removeCategories", }, ApiMethod { name: "addTags", description: None, parameters: None, return_type: None, url: "addTags", }, ApiMethod { name: "removeTags", description: None, parameters: None, return_type: None, url: "removeTags", }, ApiMethod { name: "tags", description: None, parameters: None, return_type: None, url: "tags", }, ApiMethod { name: "createTags", description: None, parameters: None, return_type: None, url: "createTags", }, ApiMethod { name: "deleteTags", description: None, parameters: None, return_type: None, url: "deleteTags", }, ApiMethod { name: "setAutoManagement", description: None, parameters: None, return_type: None, url: "setAutoManagement", }, ApiMethod { name: "toggleSequentialDownload", description: None, parameters: Some( [ String( TypeInfo { name: "hashes", is_optional: false, is_list: false, description: Some( "The hashes of the torrents you want to toggle sequential download for. hashes can contain multiple hashes separated by \\", ), type_description: None, }, ), ], ), return_type: None, url: "toggleSequentialDownload", }, ApiMethod { name: "toggleFirstLastPiecePrio", description: None, parameters: Some( [ String( TypeInfo { name: "hashes", is_optional: false, is_list: false, description: Some( "The hashes of the torrents you want to toggle the first/last piece priority for. hashes can contain multiple hashes separated by \\", ), type_description: None, }, ), ], ), return_type: None, url: "toggleFirstLastPiecePrio", }, ApiMethod { name: "setForceStart", description: None, parameters: None, return_type: None, url: "setForceStart", }, ApiMethod { name: "setSuperSeeding", description: None, parameters: None, return_type: None, url: "setSuperSeeding", }, ApiMethod { name: "renameFile", description: None, parameters: Some( [ String( TypeInfo { name: "hash", is_optional: false, is_list: false, description: Some( "The hash of the torrent", ), type_description: None, }, ), String( TypeInfo { name: "oldPath", is_optional: false, is_list: false, description: Some( "The old path of the torrent", ), type_description: None, }, ), String( TypeInfo { name: "newPath", is_optional: false, is_list: false, description: Some( "The new path to use for the file", ), type_description: None, }, ), ], ), return_type: None, url: "renameFile", }, ApiMethod { name: "renameFolder", description: None, parameters: Some( [ String( TypeInfo { name: "hash", is_optional: false, is_list: false, description: Some( "The hash of the torrent", ), type_description: None, }, ), String( TypeInfo { name: "oldPath", is_optional: false, is_list: false, description: Some( "The old path of the torrent", ), type_description: None, }, ), String( TypeInfo { name: "newPath", is_optional: false, is_list: false, description: Some( "The new path to use for the file", ), type_description: None, }, ), ], ), return_type: None, url: "renameFolder", }, ], description: Some( "All Torrent management API methods are under \"torrents\", e.g.: `/api/v2/torrents/methodName`.", ), url: "torrents", }, ApiGroup { name: "rss", methods: [ ApiMethod { name: "addFolder", description: None, parameters: Some( [ String( TypeInfo { name: "path", is_optional: false, is_list: false, description: Some( "Full path of added folder (e.g. \"The Pirate Bay\\Top100\")", ), type_description: None, }, ), ], ), return_type: None, url: "addFolder", }, ApiMethod { name: "addFeed", description: None, parameters: Some( [ String( TypeInfo { name: "url", is_optional: false, is_list: false, description: Some( "URL of RSS feed (e.g. \"[http://thepiratebay.org/rss//top100/200](http://thepiratebay.org/rss//top100/200)\")", ), type_description: None, }, ), String( TypeInfo { name: "path", is_optional: true, is_list: false, description: Some( "Full path of added folder (e.g. \"The Pirate Bay\\Top100\\Video\")", ), type_description: None, }, ), ], ), return_type: None, url: "addFeed", }, ApiMethod { name: "removeItem", description: None, parameters: Some( [ String( TypeInfo { name: "path", is_optional: false, is_list: false, description: Some( "Full path of removed item (e.g. \"The Pirate Bay\\Top100\")", ), type_description: None, }, ), ], ), return_type: None, url: "removeItem", }, ApiMethod { name: "moveItem", description: None, parameters: Some( [ String( TypeInfo { name: "itemPath", is_optional: false, is_list: false, description: Some( "Current full path of item (e.g. \"The Pirate Bay\\Top100\")", ), type_description: None, }, ), String( TypeInfo { name: "destPath", is_optional: false, is_list: false, description: Some( "New full path of item (e.g. \"The Pirate Bay\")", ), type_description: None, }, ), ], ), return_type: None, url: "moveItem", }, ApiMethod { name: "items", description: None, parameters: Some( [ Bool( TypeInfo { name: "withData", is_optional: true, is_list: false, description: Some( "True if you need current feed articles", ), type_description: None, }, ), ], ), return_type: None, url: "items", }, ApiMethod { name: "markAsRead", description: None, parameters: Some( [ String( TypeInfo { name: "itemPath", is_optional: false, is_list: false, description: Some( "Current full path of item (e.g. \"The Pirate Bay\\Top100\")", ), type_description: None, }, ), String( TypeInfo { name: "articleId", is_optional: true, is_list: false, description: Some( "ID of article", ), type_description: None, }, ), ], ), return_type: None, url: "markAsRead", }, ApiMethod { name: "refreshItem", description: None, parameters: Some( [ String( TypeInfo { name: "itemPath", is_optional: false, is_list: false, description: Some( "Current full path of item (e.g. \"The Pirate Bay\\Top100\")", ), type_description: None, }, ), ], ), return_type: None, url: "refreshItem", }, ApiMethod { name: "setRule", description: None, parameters: Some( [ String( TypeInfo { name: "ruleName", is_optional: false, is_list: false, description: Some( "Rule name (e.g. \"Punisher\")", ), type_description: None, }, ), String( TypeInfo { name: "ruleDef", is_optional: false, is_list: false, description: Some( "JSON encoded rule definition", ), type_description: None, }, ), ], ), return_type: None, url: "setRule", }, ApiMethod { name: "renameRule", description: None, parameters: Some( [ String( TypeInfo { name: "ruleName", is_optional: false, is_list: false, description: Some( "Rule name (e.g. \"Punisher\")", ), type_description: None, }, ), String( TypeInfo { name: "newRuleName", is_optional: false, is_list: false, description: Some( "New rule name (e.g. \"The Punisher\")", ), type_description: None, }, ), ], ), return_type: None, url: "renameRule", }, ApiMethod { name: "removeRule", description: None, parameters: Some( [ String( TypeInfo { name: "ruleName", is_optional: false, is_list: false, description: Some( "Rule name (e.g. \"Punisher\")", ), type_description: None, }, ), ], ), return_type: None, url: "removeRule", }, ApiMethod { name: "rules", description: None, parameters: None, return_type: None, url: "rules", }, ApiMethod { name: "matchingArticles", description: None, parameters: None, return_type: None, url: "matchingArticles", }, ], description: Some( "All RSS API methods are under \"rss\", e.g.: `/api/v2/rss/methodName`.", ), url: "rss", }, ApiGroup { name: "search", methods: [ ApiMethod { name: "start", description: Some( "Example:\n\n```JSON\n{\n \"id\": 12345\n}\n```", ), parameters: Some( [ String( TypeInfo { name: "pattern", is_optional: false, is_list: false, description: Some( "Pattern to search for (e.g. \"Ubuntu 18.04\")", ), type_description: None, }, ), String( TypeInfo { name: "plugins", is_optional: false, is_list: false, description: Some( "Plugins to use for searching (e.g. \"legittorrents\"). Supports multiple plugins separated by \\", ), type_description: None, }, ), String( TypeInfo { name: "category", is_optional: false, is_list: false, description: Some( "Categories to limit your search to (e.g. \"legittorrents\"). Available categories depend on the specified plugins. Also supports all", ), type_description: None, }, ), ], ), return_type: Some( ReturnType { is_list: false, parameters: [ ReturnTypeParameter { name: "id", description: "ID of the search job", return_type: Number( TypeInfo { name: "id", is_optional: false, is_list: false, description: Some( "ID of the search job", ), type_description: None, }, ), }, ], }, ), url: "start", }, ApiMethod { name: "stop", description: None, parameters: Some( [ Number( TypeInfo { name: "id", is_optional: false, is_list: false, description: Some( "ID of the search job", ), type_description: None, }, ), ], ), return_type: None, url: "stop", }, ApiMethod { name: "status", description: Some( "Example:\n\n```JSON\n[\n {\n \"id\": 12345,\n \"status\": \"Running\",\n \"total\": 170\n }\n]\n```", ), parameters: Some( [ Number( TypeInfo { name: "id", is_optional: true, is_list: false, description: Some( "ID of the search job. If not specified, all search jobs are returned", ), type_description: None, }, ), ], ), return_type: Some( ReturnType { is_list: true, parameters: [ ReturnTypeParameter { name: "id", description: "ID of the search job", return_type: Number( TypeInfo { name: "id", is_optional: false, is_list: false, description: Some( "ID of the search job", ), type_description: None, }, ), }, ReturnTypeParameter { name: "status", description: "Current status of the search job (either Running or Stopped)", return_type: String( TypeInfo { name: "status", is_optional: false, is_list: false, description: Some( "Current status of the search job (either Running or Stopped)", ), type_description: None, }, ), }, ReturnTypeParameter { name: "total", description: "Total number of results. If the status is Running this number may contineu to increase", return_type: Number( TypeInfo { name: "total", is_optional: false, is_list: false, description: Some( "Total number of results. If the status is Running this number may contineu to increase", ), type_description: None, }, ), }, ], }, ), url: "status", }, ApiMethod { name: "results", description: None, parameters: Some( [ Number( TypeInfo { name: "id", is_optional: false, is_list: false, description: Some( "ID of the search job", ), type_description: None, }, ), Number( TypeInfo { name: "limit", is_optional: true, is_list: false, description: Some( "max number of results to return. 0 or negative means no limit", ), type_description: None, }, ), Number( TypeInfo { name: "offset", is_optional: true, is_list: false, description: Some( "result to start at. A negative number means count backwards (e.g. -2 returns the 2 most recent results)", ), type_description: None, }, ), ], ), return_type: Some( ReturnType { is_list: false, parameters: [], }, ), url: "results", }, ], description: Some( "All Search API methods are under \"search\", e.g.: `/api/v2/search/methodName`.", ), url: "search", }, ]