Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WebAPI: Document API using OpenAPI #21817

Draft
wants to merge 1 commit into
base: v5_0_x
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions src/webui/openapi/authcontroller.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
login:
post:
summary: Login
description: Login and get SID cookie
security: [ ]
requestBody:
required: true
content:
application/x-www-form-urlencoded:
schema:
type: object
properties:
username:
type: string
password:
type: string
required: ['username', 'password']
responses:
'200':
description: Login success or failure based on the response string. If login succeeded, the authorization cookie will be set. The cookie name might be configured to a different name by the user.
headers:
SID:
required: false
content:
text/plain; charset=UTF-8:
schema:
oneOf:
- type: string
const: 'Ok.'
- type: string
const: 'Fails.'
'403':
$ref: 'main.yml#/components/responses/403forbidden'
logout:
get:
summary: Logout
description: Logout and unset auth cookie. The cookie name might be configured to a different name by the user.
responses:
'200':
description: OK
headers:
SID:
required: false
99 changes: 99 additions & 0 deletions src/webui/openapi/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
openapi: '3.1.0'
info:
description: This is the specification for qBittorrent's web API
title: qBittorrent WebAPI
version: '2.11.2'
servers:
- url: 'https://localhost:{port}/api/v2'
variables:
port:
default: "8080"
components:
securitySchemes:
defaultApiKey:
description: API key cookie provided when logged in successfully. The cookie name might be configured to a different name by the user.
type: apiKey
name: SID
in: cookie
responses:
200simpleOK:
description: OK
200TextOK:
description: OK
content:
text/plain; charset=UTF-8:
schema:
type: string
400badRequest:
description: Bad Request
content:
text/plain; charset=UTF-8:
schema:
type: string
401unauthorized:
description: Unauthorized
content:
text/plain; charset=UTF-8:
schema:
type: string
403forbidden:
description: Forbidden
content:
text/plain; charset=UTF-8:
schema:
type: string
404notFound:
description: Not Found
content:
text/plain; charset=UTF-8:
schema:
type: string
405methodNotAllowed:
description: Method Not Allowed
content:
text/plain; charset=UTF-8:
schema:
type: string
409conflict:
description: Conflict
content:
text/plain; charset=UTF-8:
schema:
type: string
415unsupportedMediaType:
description: Unsupported Media Type
content:
text/plain; charset=UTF-8:
schema:
type: string
500internalServerError:
description: Internal Server Error
content:
text/plain; charset=UTF-8:
schema:
type: string
security:
- defaultApiKey: []
paths:
/transfer/info:
$ref: 'transfercontroller.yml#/info'
/transfer/uploadLimit:
$ref: 'transfercontroller.yml#/uploadLimit'
/transfer/downloadLimit:
$ref: 'transfercontroller.yml#/downloadLimit'
/transfer/setUploadLimit:
$ref: 'transfercontroller.yml#/setUploadLimit'
/transfer/setDownloadLimit:
$ref: 'transfercontroller.yml#/setDownloadLimit'
/transfer/toggleSpeedLimitsMode:
$ref: 'transfercontroller.yml#/toggleSpeedLimitsMode'
/transfer/speedLimitsMode:
$ref: 'transfercontroller.yml#/speedLimitsMode'
/transfer/setSpeedLimitsMode:
$ref: 'transfercontroller.yml#/setSpeedLimitsMode'
/transfer/banPeers:
$ref: 'transfercontroller.yml#/banPeers'
/auth/login:
$ref: 'authcontroller.yml#/login'
/auth/logout:
$ref: 'authcontroller.yml#/logout'
172 changes: 172 additions & 0 deletions src/webui/openapi/transfercontroller.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
info:
get:
summary: Get the global transfer information
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
dl_info_speed:
description: Global download rate in bytes per second
type: number
dl_info_data:
description: Data downloaded this session in bytes
type: number
dl_rate_limit:
description: Download rate limit in bytes per second
type: number
up_info_speed:
description: Global upload rate in bytes per second
type: number
up_info_data:
description: Data uploaded this session in bytes
type: number
up_rate_limit:
description: Upload rate limit in bytes per second
type: number
dht_nodes:
description: Number of DHT nodes connected to
type: number
connection_status:
description: Connection status
type: string
enum:
- connected
- firewalled
- disconnected
required:
- 'dl_info_speed'
- 'dl_info_data'
- 'dl_rate_limit'
- 'up_info_speed'
- 'up_info_data'
- 'up_rate_limit'
- 'dht_nodes'
- 'connection_status'
'403':
$ref: 'main.yml#/components/responses/403forbidden'
uploadLimit:
get:
summary: Get upload speed limit
responses:
'200':
$ref: 'main.yml#/components/responses/200TextOK'
'403':
$ref: 'main.yml#/components/responses/403forbidden'
downloadLimit:
get:
summary: Get download speed limit
responses:
'200':
$ref: 'main.yml#/components/responses/200TextOK'
'403':
$ref: 'main.yml#/components/responses/403forbidden'
setUploadLimit:
post:
summary: Set upload speed limit
requestBody:
required: true
content:
application/x-www-form-urlencoded:
schema:
type: object
properties:
limit:
description: Speed limit in bytes per second. Negative values disable the limit. Non-negative values below 1024 are clamped to 1024.
type: number
required: ['limit']
responses:
'200':
$ref: 'main.yml#/components/responses/200simpleOK'
'403':
$ref: 'main.yml#/components/responses/403forbidden'
setDownloadLimit:
post:
summary: Set download speed limit
requestBody:
required: true
content:
application/x-www-form-urlencoded:
schema:
type: object
properties:
limit:
description: Speed limit in bytes per second. Negative values disable the limit. Non-negative values below 1024 are clamped to 1024.
type: number
required: ['limit']
responses:
'200':
$ref: 'main.yml#/components/responses/200simpleOK'
'403':
$ref: 'main.yml#/components/responses/403forbidden'
toggleSpeedLimitsMode:
post:
summary: Toggle speed limit mode
description: Toggle speed limit mode between normal and alternative
responses:
'200':
$ref: 'main.yml#/components/responses/200simpleOK'
'403':
$ref: 'main.yml#/components/responses/403forbidden'
speedLimitsMode:
get:
summary: Get speed limit mode
description: '`1` means alternative mode and `0` normal mode'
responses:
'200':
description: OK
content:
text/plain; charset=UTF-8:
schema:
type: number
enum:
- 0
- 1
'403':
$ref: 'main.yml#/components/responses/403forbidden'
setSpeedLimitsMode:
post:
summary: Set speed limit mode
requestBody:
required: true
content:
application/x-www-form-urlencoded:
schema:
type: object
properties:
mode:
description: '`1` means alternative mode and `0` normal mode.'
type: number
enum:
- 0
- 1
required: ['mode']
responses:
'200':
$ref: 'main.yml#/components/responses/200simpleOK'
'400':
$ref: 'main.yml#/components/responses/400badRequest'
'403':
$ref: 'main.yml#/components/responses/403forbidden'
banPeers:
post:
summary: Ban peers
requestBody:
required: true
content:
application/x-www-form-urlencoded:
schema:
type: object
properties:
peers:
description: List of peer IPs to ban. Each list item is separated by the `|` character.
type: string
required: ['peers']
responses:
'200':
$ref: 'main.yml#/components/responses/200simpleOK'
'403':
$ref: 'main.yml#/components/responses/403forbidden'
Loading