1640 lines
No EOL
44 KiB
JSON
1640 lines
No EOL
44 KiB
JSON
{
|
|
"x-generator": "NSwag v14.2.0.0 (NJsonSchema v11.1.0.0 (Newtonsoft.Json v13.0.0.0))",
|
|
"openapi": "3.0.0",
|
|
"info": {
|
|
"title": "RdtClient API",
|
|
"description": "A web interface to manage your torrents on a Debrid provider.",
|
|
"contact": {
|
|
"name": "Source Code",
|
|
"url": "https://github.com/rogerfar/rdt-client"
|
|
},
|
|
"license": {
|
|
"name": "MIT",
|
|
"url": "https://github.com/rogerfar/rdt-client/blob/master/LICENSE"
|
|
},
|
|
"version": "2.0.97.0"
|
|
},
|
|
"paths": {
|
|
"/Api/Authentication/IsLoggedIn": {
|
|
"get": {
|
|
"tags": [
|
|
"Auth"
|
|
],
|
|
"summary": "Checks if the current session is authenticated",
|
|
"operationId": "Auth_IsLoggedIn",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Session is valid and authenticated, or authentication is disabled"
|
|
},
|
|
"402": {
|
|
"description": "System requires initial setup - no users exist in the database",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDetails"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Session is not authenticated",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDetails"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/Api/Authentication/Create": {
|
|
"post": {
|
|
"tags": [
|
|
"Auth"
|
|
],
|
|
"summary": "Creates the initial account for the system",
|
|
"description": "This endpoint can only be used when no account exists.\nIt creates the account and automatically logs in.",
|
|
"operationId": "Auth_Create",
|
|
"requestBody": {
|
|
"x-name": "request",
|
|
"description": "Registration details for the new account",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AuthControllerLoginRequest"
|
|
}
|
|
}
|
|
},
|
|
"x-position": 1
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Account created successfully and user is logged in"
|
|
},
|
|
"400": {
|
|
"description": "Invalid request - username/password missing or validation failed",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDetails"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Cannot create account - a user already exists in system",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDetails"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/Api/Authentication/SetupProvider": {
|
|
"post": {
|
|
"tags": [
|
|
"Auth"
|
|
],
|
|
"summary": "Configures the provider settings for the application",
|
|
"description": "This endpoint can only be used when no provider is configured.\nIt sets up the initial provider configuration including the API key.",
|
|
"operationId": "Auth_SetupProvider",
|
|
"requestBody": {
|
|
"x-name": "request",
|
|
"description": "Provider configuration details including provider type and API token",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AuthControllerSetupProviderRequest"
|
|
}
|
|
}
|
|
},
|
|
"x-position": 1
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Provider configured successfully"
|
|
},
|
|
"400": {
|
|
"description": "Invalid request - missing required fields"
|
|
},
|
|
"401": {
|
|
"description": "Provider already configured"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/Api/Authentication/Login": {
|
|
"post": {
|
|
"tags": [
|
|
"Auth"
|
|
],
|
|
"summary": "Authenticates a user and creates a new session",
|
|
"description": "Validates the provided credentials and creates an authenticated session if valid.",
|
|
"operationId": "Auth_Login",
|
|
"requestBody": {
|
|
"x-name": "request",
|
|
"description": "Login credentials",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AuthControllerLoginRequest"
|
|
}
|
|
}
|
|
},
|
|
"x-position": 1
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Authentication successful",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid credentials or missing required fields",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDetails"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"402": {
|
|
"description": "System requires initial setup - no users exist",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProblemDetails"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/Api/Authentication/Logout": {
|
|
"post": {
|
|
"tags": [
|
|
"Auth"
|
|
],
|
|
"summary": "Ends the current authenticated session",
|
|
"operationId": "Auth_Logout",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Session terminated successfully"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/Api/Authentication/Update": {
|
|
"post": {
|
|
"tags": [
|
|
"Auth"
|
|
],
|
|
"summary": "Updates the authenticated user's password",
|
|
"description": "Requires authentication. Updates the password for the currently logged in user.",
|
|
"operationId": "Auth_Update",
|
|
"requestBody": {
|
|
"x-name": "request",
|
|
"description": "Password update request containing the new password",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AuthControllerUpdateRequest"
|
|
}
|
|
}
|
|
},
|
|
"x-position": 1
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Password updated successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid request or password validation failed"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/Api/Settings": {
|
|
"get": {
|
|
"tags": [
|
|
"Settings"
|
|
],
|
|
"summary": "Retrieves all application settings",
|
|
"operationId": "Settings_Get",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Returns the list of settings",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/SettingProperty"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"Settings"
|
|
],
|
|
"summary": "Updates multiple application settings",
|
|
"operationId": "Settings_Update",
|
|
"requestBody": {
|
|
"x-name": "settings1",
|
|
"description": "List of setting properties to update",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/SettingKeyValuePair"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"x-position": 1
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Settings were successfully updated"
|
|
},
|
|
"400": {
|
|
"description": "Invalid settings data provided"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/Api/Settings/Profile": {
|
|
"get": {
|
|
"tags": [
|
|
"Settings"
|
|
],
|
|
"summary": "Retrieves the profile information from the currently configured debrid service",
|
|
"operationId": "Settings_Profile",
|
|
"responses": {
|
|
"200": {
|
|
"description": "The profile information",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Profile"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/Api/Settings/TestPath": {
|
|
"post": {
|
|
"tags": [
|
|
"Settings"
|
|
],
|
|
"summary": "Tests if a specified path is writable by attempting to create and delete a test file",
|
|
"description": "Creates a test file in the specified directory to verify write permissions.\nThe test file is automatically deleted after the test completes.",
|
|
"operationId": "Settings_TestPath",
|
|
"requestBody": {
|
|
"x-name": "request",
|
|
"description": "The path testing request containing the directory to test",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SettingsControllerTestPathRequest"
|
|
}
|
|
}
|
|
},
|
|
"x-position": 1
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "The path is valid and writable"
|
|
},
|
|
"400": {
|
|
"description": "Invalid or empty path provided",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Path does not exist or is not accessible",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/Api/Settings/TestDownloadSpeed": {
|
|
"get": {
|
|
"tags": [
|
|
"Settings"
|
|
],
|
|
"summary": "Tests download speed by downloading a sample file and measuring throughput",
|
|
"description": "The test downloads a file up to 50MB and measures the download speed.",
|
|
"operationId": "Settings_TestDownloadSpeed",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Returns the measured download speed",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/Api/Settings/TestWriteSpeed": {
|
|
"get": {
|
|
"tags": [
|
|
"Settings"
|
|
],
|
|
"summary": "Tests write speed to the configured download directory",
|
|
"description": "Creates a 64MB test file with random data to measure disk write performance.\nThe test file is automatically deleted after the test completes.",
|
|
"operationId": "Settings_TestWriteSpeed",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Returns the measured write speed",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "number",
|
|
"format": "double"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/Api/Settings/TestAria2cConnection": {
|
|
"post": {
|
|
"tags": [
|
|
"Settings"
|
|
],
|
|
"summary": "Tests the connection to an Aria2c instance",
|
|
"description": "Attempts to connect to an Aria2c RPC endpoint and retrieve its version information.\nThis verifies both connectivity and authentication with the Aria2c server.",
|
|
"operationId": "Settings_TestAria2cConnection",
|
|
"requestBody": {
|
|
"x-name": "request",
|
|
"description": "The connection details for the Aria2c instance",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SettingsControllerTestAria2cConnectionRequest"
|
|
}
|
|
}
|
|
},
|
|
"x-position": 1
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Returns the Aria2c version information",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid or missing connection details"
|
|
},
|
|
"500": {
|
|
"description": "Connection to Aria2c failed"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/Api/Torrents": {
|
|
"get": {
|
|
"tags": [
|
|
"Torrents"
|
|
],
|
|
"summary": "Retrieves all torrents and their associated downloads",
|
|
"operationId": "Torrents_GetAll",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Returns the list of torrents",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/Torrent"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/Api/Torrents/Get/{torrentId}": {
|
|
"get": {
|
|
"tags": [
|
|
"Torrents"
|
|
],
|
|
"summary": "Retrieves a specific torrent by its ID",
|
|
"operationId": "Torrents_GetById",
|
|
"parameters": [
|
|
{
|
|
"name": "torrentId",
|
|
"in": "path",
|
|
"required": true,
|
|
"description": "The unique identifier of the torrent",
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "guid"
|
|
},
|
|
"x-position": 1
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Returns the requested torrent",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Torrent"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Torrent not found"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/Api/Torrents/Tick": {
|
|
"get": {
|
|
"tags": [
|
|
"Torrents"
|
|
],
|
|
"summary": "Forces an immediate processing cycle for debugging purposes",
|
|
"operationId": "Torrents_Tick",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Processing cycle completed successfully"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/Api/Torrents/UploadFile": {
|
|
"post": {
|
|
"tags": [
|
|
"Torrents"
|
|
],
|
|
"summary": "Adds a new torrent file with configuration",
|
|
"operationId": "Torrents_UploadFile",
|
|
"parameters": [
|
|
{
|
|
"name": "formData",
|
|
"in": "query",
|
|
"description": "Configuration for the torrent download",
|
|
"schema": {
|
|
"nullable": true,
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/TorrentControllerUploadFileRequest"
|
|
}
|
|
]
|
|
},
|
|
"x-position": 1
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"content": {
|
|
"multipart/form-data": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"file": {
|
|
"type": "string",
|
|
"format": "binary",
|
|
"nullable": true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Torrent added successfully"
|
|
},
|
|
"400": {
|
|
"description": "Invalid file or configuration provided",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/Api/Torrents/UploadMagnet": {
|
|
"post": {
|
|
"tags": [
|
|
"Torrents"
|
|
],
|
|
"summary": "Adds a new torrent using a magnet link",
|
|
"operationId": "Torrents_UploadMagnet",
|
|
"requestBody": {
|
|
"x-name": "request",
|
|
"description": "The magnet link and torrent configuration",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/TorrentControllerUploadMagnetRequest"
|
|
}
|
|
}
|
|
},
|
|
"x-position": 1
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Magnet link processed successfully"
|
|
},
|
|
"400": {
|
|
"description": "Invalid magnet link or configuration",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/Api/Torrents/CheckFiles": {
|
|
"post": {
|
|
"tags": [
|
|
"Torrents"
|
|
],
|
|
"summary": "Checks available files in a torrent file",
|
|
"operationId": "Torrents_CheckFiles",
|
|
"requestBody": {
|
|
"content": {
|
|
"multipart/form-data": {
|
|
"schema": {
|
|
"properties": {
|
|
"ContentType": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"ContentDisposition": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"Headers": {
|
|
"type": "array",
|
|
"nullable": true,
|
|
"items": {}
|
|
},
|
|
"Length": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"Name": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"FileName": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Returns the list of available files",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/TorrentClientAvailableFile"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid torrent file provided",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/Api/Torrents/CheckFilesMagnet": {
|
|
"post": {
|
|
"tags": [
|
|
"Torrents"
|
|
],
|
|
"summary": "Checks available files from a magnet link",
|
|
"operationId": "Torrents_CheckFilesMagnet",
|
|
"requestBody": {
|
|
"x-name": "request",
|
|
"description": "The magnet link to analyze",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/TorrentControllerCheckFilesRequest"
|
|
}
|
|
}
|
|
},
|
|
"x-position": 1
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Returns the list of available files",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/TorrentClientAvailableFile"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid magnet link provided",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/Api/Torrents/Delete/{torrentId}": {
|
|
"post": {
|
|
"tags": [
|
|
"Torrents"
|
|
],
|
|
"summary": "Deletes a torrent and optionally its associated data",
|
|
"operationId": "Torrents_Delete",
|
|
"parameters": [
|
|
{
|
|
"name": "torrentId",
|
|
"in": "path",
|
|
"required": true,
|
|
"description": "The unique identifier of the torrent to delete",
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "guid"
|
|
},
|
|
"x-position": 1
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"x-name": "request",
|
|
"description": "Delete options specifying what should be removed",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/TorrentControllerDeleteRequest"
|
|
}
|
|
}
|
|
},
|
|
"x-position": 2
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Torrent deleted successfully"
|
|
},
|
|
"400": {
|
|
"description": "Invalid request parameters"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/Api/Torrents/Retry/{torrentId}": {
|
|
"post": {
|
|
"tags": [
|
|
"Torrents"
|
|
],
|
|
"summary": "Retries a failed torrent download",
|
|
"operationId": "Torrents_Retry",
|
|
"parameters": [
|
|
{
|
|
"name": "torrentId",
|
|
"in": "path",
|
|
"required": true,
|
|
"description": "The unique identifier of the torrent to retry",
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "guid"
|
|
},
|
|
"x-position": 1
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Retry initiated successfully"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/Api/Torrents/RetryDownload/{downloadId}": {
|
|
"post": {
|
|
"tags": [
|
|
"Torrents"
|
|
],
|
|
"summary": "Retries a failed download within a torrent",
|
|
"operationId": "Torrents_RetryDownload",
|
|
"parameters": [
|
|
{
|
|
"name": "downloadId",
|
|
"in": "path",
|
|
"required": true,
|
|
"description": "The unique identifier of the download to retry",
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "guid"
|
|
},
|
|
"x-position": 1
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Retry initiated successfully"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/Api/Torrents/Update": {
|
|
"put": {
|
|
"tags": [
|
|
"Torrents"
|
|
],
|
|
"summary": "Updates torrent configuration",
|
|
"operationId": "Torrents_Update",
|
|
"requestBody": {
|
|
"x-name": "torrent",
|
|
"description": "The updated torrent configuration",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Torrent"
|
|
}
|
|
}
|
|
},
|
|
"x-position": 1
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Torrent updated successfully"
|
|
},
|
|
"400": {
|
|
"description": "Invalid torrent configuration"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/Api/Torrents/VerifyRegex": {
|
|
"post": {
|
|
"tags": [
|
|
"Torrents"
|
|
],
|
|
"summary": "Tests regex patterns against torrent files",
|
|
"operationId": "Torrents_VerifyRegex",
|
|
"requestBody": {
|
|
"x-name": "request",
|
|
"description": "The regex patterns and magnet link to test",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/TorrentControllerVerifyRegexRequest"
|
|
}
|
|
}
|
|
},
|
|
"x-position": 1
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Returns the regex test results",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RegexVerificationResult"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid request parameters"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"components": {
|
|
"schemas": {
|
|
"ProblemDetails": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"nullable": true
|
|
},
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"status": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"nullable": true
|
|
},
|
|
"detail": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"instance": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
}
|
|
},
|
|
"AuthControllerLoginRequest": {
|
|
"type": "object",
|
|
"description": "Request model for login and user creation operations",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"userName",
|
|
"password"
|
|
],
|
|
"properties": {
|
|
"userName": {
|
|
"type": "string",
|
|
"description": "Username for authentication",
|
|
"minLength": 1,
|
|
"example": "admin"
|
|
},
|
|
"password": {
|
|
"type": "string",
|
|
"description": "Password for authentication",
|
|
"minLength": 1,
|
|
"example": "MySecurePassword123!"
|
|
}
|
|
}
|
|
},
|
|
"AuthControllerSetupProviderRequest": {
|
|
"type": "object",
|
|
"description": "Request model for configuring the provider settings",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"provider",
|
|
"token"
|
|
],
|
|
"properties": {
|
|
"provider": {
|
|
"type": "integer",
|
|
"description": "Provider type identifier",
|
|
"format": "int32",
|
|
"example": 1
|
|
},
|
|
"token": {
|
|
"type": "string",
|
|
"description": "API token or key for the provider",
|
|
"minLength": 1,
|
|
"example": "sk-1234567890abcdef"
|
|
}
|
|
}
|
|
},
|
|
"AuthControllerUpdateRequest": {
|
|
"type": "object",
|
|
"description": "Request model for updating user password",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"userName",
|
|
"password"
|
|
],
|
|
"properties": {
|
|
"userName": {
|
|
"type": "string",
|
|
"description": "Username for the account",
|
|
"minLength": 1,
|
|
"example": "myusername"
|
|
},
|
|
"password": {
|
|
"type": "string",
|
|
"description": "New password for the user account",
|
|
"minLength": 1,
|
|
"example": "NewSecurePassword123!"
|
|
}
|
|
}
|
|
},
|
|
"SettingProperty": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/SettingKeyValuePair"
|
|
},
|
|
{
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"displayName": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"type": {
|
|
"type": "string"
|
|
},
|
|
"enumValues": {
|
|
"type": "object",
|
|
"nullable": true,
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"SettingKeyValuePair": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"key": {
|
|
"type": "string"
|
|
},
|
|
"value": {
|
|
"nullable": true
|
|
}
|
|
}
|
|
},
|
|
"Profile": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"provider": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"userName": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"expiration": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"nullable": true
|
|
},
|
|
"currentVersion": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"latestVersion": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
}
|
|
},
|
|
"SettingsControllerTestPathRequest": {
|
|
"type": "object",
|
|
"description": "Request model for testing path accessibility",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"path"
|
|
],
|
|
"properties": {
|
|
"path": {
|
|
"type": "string",
|
|
"description": "The directory path to test for write access",
|
|
"minLength": 1,
|
|
"example": "/path/to/downloads"
|
|
}
|
|
}
|
|
},
|
|
"SettingsControllerTestAria2cConnectionRequest": {
|
|
"type": "object",
|
|
"description": "Request model for testing Aria2c connection",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"url",
|
|
"secret"
|
|
],
|
|
"properties": {
|
|
"url": {
|
|
"type": "string",
|
|
"description": "The URL of the Aria2c RPC endpoint",
|
|
"minLength": 1,
|
|
"example": "http://localhost:6800/jsonrpc"
|
|
},
|
|
"secret": {
|
|
"type": "string",
|
|
"description": "The secret token for authenticating with the Aria2c server",
|
|
"minLength": 1,
|
|
"example": "your-secret-token"
|
|
}
|
|
}
|
|
},
|
|
"Torrent": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"torrentId": {
|
|
"type": "string",
|
|
"format": "guid"
|
|
},
|
|
"hash": {
|
|
"type": "string"
|
|
},
|
|
"category": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"downloadAction": {
|
|
"$ref": "#/components/schemas/TorrentDownloadAction"
|
|
},
|
|
"finishedAction": {
|
|
"$ref": "#/components/schemas/TorrentFinishedAction"
|
|
},
|
|
"hostDownloadAction": {
|
|
"$ref": "#/components/schemas/TorrentHostDownloadAction"
|
|
},
|
|
"downloadMinSize": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
},
|
|
"includeRegex": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"excludeRegex": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"downloadManualFiles": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"downloadClient": {
|
|
"$ref": "#/components/schemas/DownloadClient"
|
|
},
|
|
"added": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
"filesSelected": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"nullable": true
|
|
},
|
|
"completed": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"nullable": true
|
|
},
|
|
"retry": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"nullable": true
|
|
},
|
|
"fileOrMagnet": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"isFile": {
|
|
"type": "boolean"
|
|
},
|
|
"priority": {
|
|
"type": "integer",
|
|
"format": "int32",
|
|
"nullable": true
|
|
},
|
|
"retryCount": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
},
|
|
"downloadRetryAttempts": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
},
|
|
"torrentRetryAttempts": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
},
|
|
"deleteOnError": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
},
|
|
"lifetime": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
},
|
|
"error": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"downloads": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/Download"
|
|
}
|
|
},
|
|
"clientKind": {
|
|
"nullable": true,
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/Provider"
|
|
}
|
|
]
|
|
},
|
|
"rdId": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"rdName": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"rdSize": {
|
|
"type": "integer",
|
|
"format": "int64",
|
|
"nullable": true
|
|
},
|
|
"rdHost": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"rdSplit": {
|
|
"type": "integer",
|
|
"format": "int64",
|
|
"nullable": true
|
|
},
|
|
"rdProgress": {
|
|
"type": "integer",
|
|
"format": "int64",
|
|
"nullable": true
|
|
},
|
|
"rdStatus": {
|
|
"nullable": true,
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/TorrentStatus"
|
|
}
|
|
]
|
|
},
|
|
"rdStatusRaw": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"rdAdded": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"nullable": true
|
|
},
|
|
"rdEnded": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"nullable": true
|
|
},
|
|
"rdSpeed": {
|
|
"type": "integer",
|
|
"format": "int64",
|
|
"nullable": true
|
|
},
|
|
"rdSeeders": {
|
|
"type": "integer",
|
|
"format": "int64",
|
|
"nullable": true
|
|
},
|
|
"rdFiles": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"files": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/TorrentClientFile"
|
|
}
|
|
},
|
|
"manualFiles": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"TorrentDownloadAction": {
|
|
"type": "integer",
|
|
"description": "",
|
|
"x-enumNames": [
|
|
"DownloadAll",
|
|
"DownloadAvailableFiles",
|
|
"DownloadManual"
|
|
],
|
|
"enum": [
|
|
0,
|
|
1,
|
|
2
|
|
]
|
|
},
|
|
"TorrentFinishedAction": {
|
|
"type": "integer",
|
|
"description": "",
|
|
"x-enumNames": [
|
|
"None",
|
|
"RemoveAllTorrents",
|
|
"RemoveRealDebrid",
|
|
"RemoveClient"
|
|
],
|
|
"enum": [
|
|
0,
|
|
1,
|
|
2,
|
|
3
|
|
]
|
|
},
|
|
"TorrentHostDownloadAction": {
|
|
"type": "integer",
|
|
"description": "",
|
|
"x-enumNames": [
|
|
"DownloadAll",
|
|
"DownloadNone"
|
|
],
|
|
"enum": [
|
|
0,
|
|
1
|
|
]
|
|
},
|
|
"DownloadClient": {
|
|
"type": "integer",
|
|
"description": "",
|
|
"x-enumNames": [
|
|
"Internal",
|
|
"Bezzad",
|
|
"Aria2c",
|
|
"Symlink",
|
|
"DownloadStation"
|
|
],
|
|
"enum": [
|
|
0,
|
|
1,
|
|
2,
|
|
3,
|
|
4
|
|
]
|
|
},
|
|
"Download": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"downloadId": {
|
|
"type": "string",
|
|
"format": "guid"
|
|
},
|
|
"torrentId": {
|
|
"type": "string",
|
|
"format": "guid"
|
|
},
|
|
"torrent": {
|
|
"nullable": true,
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/Torrent"
|
|
}
|
|
]
|
|
},
|
|
"path": {
|
|
"type": "string"
|
|
},
|
|
"link": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"added": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
"downloadQueued": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"nullable": true
|
|
},
|
|
"downloadStarted": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"nullable": true
|
|
},
|
|
"downloadFinished": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"nullable": true
|
|
},
|
|
"unpackingQueued": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"nullable": true
|
|
},
|
|
"unpackingStarted": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"nullable": true
|
|
},
|
|
"unpackingFinished": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"nullable": true
|
|
},
|
|
"completed": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"nullable": true
|
|
},
|
|
"retryCount": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
},
|
|
"error": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"remoteId": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"fileName": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"bytesTotal": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"bytesDone": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"speed": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
}
|
|
}
|
|
},
|
|
"Provider": {
|
|
"type": "integer",
|
|
"description": "",
|
|
"x-enumNames": [
|
|
"RealDebrid",
|
|
"AllDebrid",
|
|
"Premiumize",
|
|
"TorBox",
|
|
"DebridLink"
|
|
],
|
|
"enum": [
|
|
0,
|
|
1,
|
|
2,
|
|
3,
|
|
4
|
|
]
|
|
},
|
|
"TorrentStatus": {
|
|
"type": "integer",
|
|
"description": "",
|
|
"x-enumNames": [
|
|
"Processing",
|
|
"WaitingForFileSelection",
|
|
"Downloading",
|
|
"Finished",
|
|
"Uploading",
|
|
"Error"
|
|
],
|
|
"enum": [
|
|
0,
|
|
1,
|
|
2,
|
|
3,
|
|
4,
|
|
99
|
|
]
|
|
},
|
|
"TorrentClientFile": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"path": {
|
|
"type": "string"
|
|
},
|
|
"bytes": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"selected": {
|
|
"type": "boolean"
|
|
},
|
|
"downloadLink": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
}
|
|
},
|
|
"TorrentControllerUploadFileRequest": {
|
|
"type": "object",
|
|
"description": "Request model for uploading a torrent file",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"torrent"
|
|
],
|
|
"properties": {
|
|
"torrent": {
|
|
"description": "Configuration for the torrent download",
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/Torrent"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"TorrentControllerUploadMagnetRequest": {
|
|
"type": "object",
|
|
"description": "Request model for adding a magnet link",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"magnetLink",
|
|
"torrent"
|
|
],
|
|
"properties": {
|
|
"magnetLink": {
|
|
"type": "string",
|
|
"description": "The magnet URI to process",
|
|
"minLength": 1
|
|
},
|
|
"torrent": {
|
|
"description": "Configuration for the torrent download",
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/Torrent"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"TorrentClientAvailableFile": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"filename": {
|
|
"type": "string"
|
|
},
|
|
"filesize": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
}
|
|
}
|
|
},
|
|
"TorrentControllerCheckFilesRequest": {
|
|
"type": "object",
|
|
"description": "Request model for checking files in a magnet link",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"magnetLink"
|
|
],
|
|
"properties": {
|
|
"magnetLink": {
|
|
"type": "string",
|
|
"description": "The magnet URI to analyze",
|
|
"minLength": 1
|
|
}
|
|
}
|
|
},
|
|
"TorrentControllerDeleteRequest": {
|
|
"type": "object",
|
|
"description": "Request model for deleting a torrent",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"deleteData": {
|
|
"type": "boolean",
|
|
"description": "Whether to delete the downloaded data"
|
|
},
|
|
"deleteRdTorrent": {
|
|
"type": "boolean",
|
|
"description": "Whether to remove the torrent from the Debrid service"
|
|
},
|
|
"deleteLocalFiles": {
|
|
"type": "boolean",
|
|
"description": "Whether to delete local torrent files"
|
|
}
|
|
}
|
|
},
|
|
"RegexVerificationResult": {
|
|
"type": "object",
|
|
"description": "Response model for regex verification results",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"includeError": {
|
|
"type": "string",
|
|
"description": "Error message for the include regex pattern, if any"
|
|
},
|
|
"excludeError": {
|
|
"type": "string",
|
|
"description": "Error message for the exclude regex pattern, if any"
|
|
},
|
|
"selectedFiles": {
|
|
"type": "array",
|
|
"description": "Files that match the specified patterns",
|
|
"items": {
|
|
"$ref": "#/components/schemas/TorrentClientAvailableFile"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"TorrentControllerVerifyRegexRequest": {
|
|
"type": "object",
|
|
"description": "Request model for verifying regex patterns",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"includeRegex": {
|
|
"type": "string",
|
|
"description": "Pattern for including files",
|
|
"nullable": true
|
|
},
|
|
"excludeRegex": {
|
|
"type": "string",
|
|
"description": "Pattern for excluding files",
|
|
"nullable": true
|
|
},
|
|
"magnetLink": {
|
|
"type": "string",
|
|
"description": "Magnet link to test patterns against",
|
|
"nullable": true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |