From 1ffbae9d16864db0f4e9c81ae015774c281d5703 Mon Sep 17 00:00:00 2001 From: Qstick Date: Sun, 29 Aug 2021 23:33:32 -0400 Subject: [PATCH] Autogenerated API docs --- .gitignore | 4 + azure-pipelines.yml | 54 + docs.sh | 38 + src/NzbDrone.Host/Radarr.Host.csproj | 1 + src/NzbDrone.Host/Startup.cs | 77 + src/Radarr.Api.V3/swagger.json | 5012 -------------------------- 6 files changed, 174 insertions(+), 5012 deletions(-) create mode 100644 docs.sh delete mode 100644 src/Radarr.Api.V3/swagger.json diff --git a/.gitignore b/.gitignore index eacdd16c7..fa33bfd3c 100644 --- a/.gitignore +++ b/.gitignore @@ -187,6 +187,10 @@ packages.config.md5sum **/.idea/**/*.iml **/.idea/**/contentModel.xml **/.idea/**/modules.xml + # ignore node_modules symlink node_modules node_modules.nosync + +# API doc generation +.config/ diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 627ca7531..431337267 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -31,6 +31,7 @@ pr: paths: exclude: - src/NzbDrone.Core/Localization/Core + - src/Radarr.Api.*/openapi.json stages: - stage: Setup @@ -849,6 +850,59 @@ stages: cliProjectVersion: '$(radarrVersion)' cliSources: './frontend' - task: SonarCloudAnalyze@1 + + - job: Api_Docs + displayName: API Docs + dependsOn: Prepare + condition: | + and + ( + and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/develop')), + and(succeeded(), eq(dependencies.Prepare.outputs['setVar.backendNotUpdated'], '0')) + ) + + pool: + vmImage: windows-2019 + + steps: + - task: UseDotNet@2 + displayName: 'Install .net core' + inputs: + version: $(dotnetVersion) + - checkout: self + submodules: true + persistCredentials: true + fetchDepth: 1 + - bash: ./docs.sh Windows + displayName: Create openapi.json + - bash: | + git config --global user.email "development@lidarr.audio" + git config --global user.name "Servarr" + git checkout -b api-docs + git add . + if git status | grep -q modified + then + git commit -am 'Automated API Docs update' + git push -f --set-upstream origin api-docs + curl -X POST -H "Authorization: token ${GITHUBTOKEN}" -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/radarr/radarr/pulls -d '{"head":"api-docs","base":"develop","title":"Update API docs"}' + else + echo "No changes since last run" + fi + displayName: Commit API Doc Change + continueOnError: true + env: + GITHUBTOKEN: $(githubToken) + - task: CopyFiles@2 + displayName: 'Copy openapi.json to: $(Build.ArtifactStagingDirectory)' + inputs: + SourceFolder: '$(Build.SourcesDirectory)' + Contents: | + **/*openapi.json + TargetFolder: '$(Build.ArtifactStagingDirectory)/api_docs' + - publish: $(Build.ArtifactStagingDirectory)/api_docs + artifact: 'APIDocs' + displayName: Publish API Docs Bundle + condition: and(succeeded(), eq(variables['System.JobAttempt'], '1')) - job: Analyze_Backend displayName: Backend diff --git a/docs.sh b/docs.sh new file mode 100644 index 000000000..42c17c5c8 --- /dev/null +++ b/docs.sh @@ -0,0 +1,38 @@ +PLATFORM=$1 + +if [ "$PLATFORM" = "Windows" ]; then + RUNTIME="win-x64" +elif [ "$PLATFORM" = "Linux" ]; then + WHERE="linux-x64" +elif [ "$PLATFORM" = "Mac" ]; then + WHERE="osx-x64" +else + echo "Platform must be provided as first arguement: Windows, Linux or Mac" + exit 1 +fi + +outputFolder='_output' +testPackageFolder='_tests' + +rm -rf $outputFolder +rm -rf $testPackageFolder + +slnFile=src/Prowlarr.sln + +platform=Posix + +dotnet clean $slnFile -c Debug +dotnet clean $slnFile -c Release + +dotnet msbuild -restore $slnFile -p:Configuration=Debug -p:Platform=$platform -p:RuntimeIdentifiers=$RUNTIME -t:PublishAllRids + +dotnet new tool-manifest +dotnet tool install --version 6.2.3 Swashbuckle.AspNetCore.Cli + +dotnet tool run swagger tofile --output ./src/Prowlarr.Api.V1/openapi.json "$outputFolder/net6.0/$RUNTIME/radarr.console.dll" v1 & + +sleep 10 + +kill %1 + +exit 0 \ No newline at end of file diff --git a/src/NzbDrone.Host/Radarr.Host.csproj b/src/NzbDrone.Host/Radarr.Host.csproj index cf04160e7..f8153afbd 100644 --- a/src/NzbDrone.Host/Radarr.Host.csproj +++ b/src/NzbDrone.Host/Radarr.Host.csproj @@ -6,6 +6,7 @@ + diff --git a/src/NzbDrone.Host/Startup.cs b/src/NzbDrone.Host/Startup.cs index 2e7a9d151..4a7e848cf 100644 --- a/src/NzbDrone.Host/Startup.cs +++ b/src/NzbDrone.Host/Startup.cs @@ -10,6 +10,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; +using Microsoft.OpenApi.Models; using NLog.Extensions.Logging; using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.Instrumentation; @@ -92,6 +93,73 @@ namespace NzbDrone.Host }) .AddControllersAsServices(); + services.AddSwaggerGen(c => + { + c.SwaggerDoc("v3", new OpenApiInfo + { + Version = "3.0.0", + Title = "Radarr", + Description = "Radarr API docs", + License = new OpenApiLicense + { + Name = "GPL-3.0", + Url = new Uri("https://github.com/Radarr/Radarr/blob/develop/LICENSE") + } + }); + + var apiKeyHeader = new OpenApiSecurityScheme + { + Name = "X-Api-Key", + Type = SecuritySchemeType.ApiKey, + Scheme = "apiKey", + Description = "Apikey passed as header", + In = ParameterLocation.Header, + Reference = new OpenApiReference + { + Type = ReferenceType.SecurityScheme, + Id = "X-Api-Key" + }, + }; + + c.AddSecurityDefinition("X-Api-Key", apiKeyHeader); + + c.AddSecurityRequirement(new OpenApiSecurityRequirement + { + { apiKeyHeader, new string[] { } } + }); + + var apikeyQuery = new OpenApiSecurityScheme + { + Name = "apikey", + Type = SecuritySchemeType.ApiKey, + Scheme = "apiKey", + Description = "Apikey passed as header", + In = ParameterLocation.Query, + Reference = new OpenApiReference + { + Type = ReferenceType.SecurityScheme, + Id = "apikey" + }, + }; + + c.AddServer(new OpenApiServer + { + Url = "{protocol}://{hostpath}", + Variables = new Dictionary + { + { "protocol", new OpenApiServerVariable { Default = "http", Enum = new List { "http", "https" } } }, + { "hostpath", new OpenApiServerVariable { Default = "localhost:7878" } } + } + }); + + c.AddSecurityDefinition("apikey", apikeyQuery); + + c.AddSecurityRequirement(new OpenApiSecurityRequirement + { + { apikeyQuery, new string[] { } } + }); + }); + services .AddSignalR() .AddJsonProtocol(options => @@ -198,6 +266,15 @@ namespace NzbDrone.Host app.UseWebSockets(); + // Enable middleware to serve generated Swagger as a JSON endpoint. + if (BuildInfo.IsDebug) + { + app.UseSwagger(c => + { + c.RouteTemplate = "docs/{documentName}/openapi.json"; + }); + } + app.UseEndpoints(x => { x.MapHub("/signalr/messages").RequireAuthorization("SignalR"); diff --git a/src/Radarr.Api.V3/swagger.json b/src/Radarr.Api.V3/swagger.json deleted file mode 100644 index 177a0c921..000000000 --- a/src/Radarr.Api.V3/swagger.json +++ /dev/null @@ -1,5012 +0,0 @@ -{ - "openapi": "3.0.0", - "info": { - "title": "Radarr", - "version": "3", - "description": "The way users should interact with Radarr programatically. To utilize any of these endpoints you will need a few pieces of information:\n\nex: localhost:7878/api/v3/movies?apiKey={key_here}\n\n* url: localhost, 10.1.0.1, 192.168.1.1, etc\n* port: 7878 (unless you modify it)\n* apiKey: Located in Settings > General > Security" - }, - "servers": [ - { - "url": "{protocol}://{hostPath}/api/v3", - "variables": { - "protocol": { - "enum": [ - "https", - "http" - ], - "default": "https" - }, - "hostPath": { - "default": "localhost:7878", - "description": "Your Radarr Server URL" - } - } - } - ], - "paths": { - "/movie": { - "get": { - "tags": [ - "Movie" - ], - "summary": "Get All Movies", - "description": "Returns all movies stored in the database", - "operationId": "getMovie", - "parameters": [ - { - "in": "query", - "name": "tmdbId", - "schema": { - "type": "integer" - }, - "required": false, - "description": "TMDb id of the movie to get" - } - ], - "responses": { - "200": { - "description": "Successful request", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Movie" - } - } - } - } - }, - "400": { - "description": "Invalid ID supplied" - }, - "401": { - "description": "Invalid API Key" - }, - "404": { - "description": "Movie not found" - } - }, - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ] - }, - "post": { - "tags": [ - "Movie" - ], - "summary": "Add new movie", - "requestBody": { - "description": "Movie object that needs to be added", - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Movie" - } - } - } - }, - "responses": { - "200": { - "description": "Successful request", - "content": { - "application/json": { - "schema": { - "type": "integer" - } - } - } - }, - "401": { - "description": "Invalid API Key" - }, - "405": { - "description": "Validation exception" - } - }, - "security": [ - { - "X-API-Key": [] - } - ], - "description": "Adds a movie to the database" - }, - "put": { - "tags": [ - "Movie" - ], - "summary": "Edit existing movie", - "requestBody": { - "description": "Movie object that needs to be edited", - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Movie" - } - } - } - }, - "parameters": [ - { - "in": "query", - "name": "moveFiles", - "schema": { - "type": "boolean" - }, - "required": false, - "description": "Have radarr move files when updating" - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Movie" - } - } - } - }, - "404": { - "description": "Movie not found" - }, - "405": { - "description": "Validation exception" - } - }, - "security": [ - { - "X-API-Key": [] - } - ], - "description": "Updates a movie in the database" - } - }, - "/movie/{id}": { - "get": { - "tags": [ - "Movie" - ], - "summary": "Get a Movie", - "description": "Returns a single movie", - "operationId": "getMovieById", - "parameters": [ - { - "name": "id", - "in": "path", - "description": "Database Id of movie to return", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "responses": { - "200": { - "description": "Successful request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Movie" - } - } - } - }, - "400": { - "description": "Invalid ID supplied" - }, - "401": { - "description": "Invalid API Key" - }, - "404": { - "description": "Movie not found" - } - }, - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ] - }, - "delete": { - "tags": [ - "Movie" - ], - "summary": "Delete a Movie", - "description": "Delete a single movie by database id", - "operationId": "deleteMovie", - "parameters": [ - { - "name": "id", - "in": "path", - "description": "Database Id of movie to delete", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "name": "addImportExclusion", - "in": "query", - "description": "Add deleted movies to List Exclusions", - "schema": { - "type": "boolean" - } - }, - { - "name": "deleteFiles", - "in": "query", - "description": "Delete movie files when deleting movies", - "schema": { - "type": "boolean" - } - } - ], - "responses": { - "200": { - "description": "OK" - }, - "400": { - "description": "Invalid ID supplied" - }, - "401": { - "description": "Invalid API Key" - }, - "404": { - "description": "Movie not found" - } - }, - "security": [ - { - "X-API-Key": [] - } - ] - } - }, - "/tag/detail/{id}": { - "get": { - "tags": [ - "Tag" - ], - "summary": "Get a Tag Details", - "description": "Returns the id of all items in the database which use the specified tag", - "operationId": "", - "responses": { - "200": { - "description": "Successful request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TagDetail" - } - } - } - }, - "401": { - "description": "Invalid API Key" - } - }, - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ] - }, - "parameters": [ - { - "name": "id", - "in": "path", - "description": "Database id of tag", - "required": true, - "schema": { - "type": "integer" - } - } - ] - }, - "/tag/detail": { - "get": { - "tags": [ - "Tag" - ], - "summary": "Get All Tag Details", - "description": "Returns a list of tag detail objects for all tags in the database.", - "operationId": "", - "responses": { - "200": { - "description": "Successful request", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TagDetail" - } - } - } - } - }, - "401": { - "description": "Invalid API Key" - } - }, - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ] - }, - "parameters": [] - }, - "/tag/{id}": { - "get": { - "tags": [ - "Tag" - ], - "summary": "Get a Tag", - "description": "Return a given tag and its label by the database id.", - "operationId": "", - "responses": { - "200": { - "description": "Successful request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Tag" - } - } - } - }, - "401": { - "description": "Invalid API Key" - } - }, - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ] - }, - "delete": { - "tags": [ - "Tag" - ], - "summary": "Delete a Tag", - "description": "Delete a tag", - "operationId": "", - "responses": { - "200": { - "description": "Successful request" - }, - "401": { - "description": "Invalid API Key" - } - }, - "security": [ - { - "X-API-Key": [] - } - ] - }, - "parameters": [ - { - "name": "id", - "in": "path", - "description": "ID of tag", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "put": { - "summary": "Edit a Tag", - "operationId": "put-tag-id", - "responses": { - "200": { - "description": "OK" - }, - "401": { - "description": "Unauthorized" - } - }, - "tags": [ - "Tag" - ], - "description": "Edit a Tag by its database id", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Tag" - } - } - } - } - } - }, - "/tag": { - "get": { - "summary": "Get All Tags", - "description": "Get all tags in the database", - "operationId": "", - "responses": { - "200": { - "description": "Successful request", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Tag" - } - } - } - } - }, - "401": { - "description": "Invalid API Key" - } - }, - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "tags": [ - "Tag" - ] - }, - "post": { - "tags": [ - "Tag" - ], - "summary": "Create a Tag", - "description": "Create a new tag that can be assigned to a movie, list, delay profile, notification, or restriction", - "operationId": "", - "requestBody": { - "description": "Tag object that needs to be added", - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Tag" - } - } - } - }, - "responses": { - "200": { - "description": "Successful request" - }, - "401": { - "description": "Invalid API Key" - } - }, - "security": [ - { - "X-API-Key": [] - } - ] - }, - "parameters": [] - }, - "/diskspace": { - "get": { - "summary": "Get System Diskspace Information", - "responses": { - "200": { - "description": "Successful request", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object" - } - }, - "examples": { - "Response": { - "value": [ - { - "path": "D:\\", - "label": "DrivePool", - "freeSpace": 16187217043456, - "totalSpace": 56009755148288 - }, - { - "path": "C:\\", - "label": "Windows", - "freeSpace": 78659211264, - "totalSpace": 239409819648 - } - ] - } - } - } - } - }, - "401": { - "description": "Invalid API Key" - } - }, - "operationId": "get-diskspace", - "description": "Query Radarr for disk usage information\n\nLocation: System > Status", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "tags": [ - "Disk Space" - ] - } - }, - "/system/status": { - "get": { - "summary": "Get Application Status", - "responses": { - "200": { - "description": "Successful request", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "version": { - "type": "string" - }, - "buildTime": { - "type": "string" - }, - "isDebug": { - "type": "boolean" - }, - "isProduction": { - "type": "boolean" - }, - "isAdmin": { - "type": "boolean" - }, - "isUserInteractive": { - "type": "boolean" - }, - "startupPath": { - "type": "string" - }, - "appData": { - "type": "string" - }, - "osName": { - "type": "string" - }, - "osVersion": { - "type": "string" - }, - "isNetCore": { - "type": "boolean" - }, - "isMono": { - "type": "boolean" - }, - "isLinux": { - "type": "boolean" - }, - "isOsx": { - "type": "boolean" - }, - "isWindows": { - "type": "boolean" - }, - "isDocker": { - "type": "boolean" - }, - "mode": { - "type": "string" - }, - "branch": { - "type": "string" - }, - "authentication": { - "type": "string" - }, - "sqliteVersion": { - "type": "string" - }, - "migrationVersion": { - "type": "integer" - }, - "urlBase": { - "type": "string" - }, - "runtimeVersion": { - "type": "string" - }, - "runtimeName": { - "type": "string" - }, - "startTime": { - "type": "string" - }, - "packageUpdateMechanism": { - "type": "string" - } - } - }, - "examples": { - "Response": { - "value": { - "version": "10.0.0.34882", - "buildTime": "2020-09-01T23:23:23.9621974Z", - "isDebug": true, - "isProduction": false, - "isAdmin": false, - "isUserInteractive": true, - "startupPath": "C:\\ProgramData\\Radarr", - "appData": "C:\\ProgramData\\Radarr", - "osName": "Windows", - "osVersion": "10.0.18363.0", - "isNetCore": true, - "isMono": false, - "isLinux": false, - "isOsx": false, - "isWindows": true, - "isDocker": false, - "mode": "console", - "branch": "nightly", - "authentication": "none", - "sqliteVersion": "3.32.1", - "migrationVersion": 180, - "urlBase": "", - "runtimeVersion": "3.1.10", - "runtimeName": "netCore", - "startTime": "2020-09-01T23:50:20.2415965Z", - "packageUpdateMechanism": "builtIn" - } - } - } - } - } - }, - "401": { - "description": "Invalid API Key" - } - }, - "operationId": "get-status", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "description": "Find out information such as OS, version, paths used, etc", - "parameters": [], - "tags": [ - "System" - ] - }, - "parameters": [] - }, - "/health": { - "get": { - "summary": "Get Failed Health Checks", - "tags": [ - "Health" - ], - "responses": { - "200": { - "description": "Successful request", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object" - } - }, - "examples": { - "Response": { - "value": [ - { - "source": "ImportMechanismCheck", - "type": "warning", - "message": "Enable Completed Download Handling", - "wikiUrl": "https://wiki.servarr.com/radarr/system#completed-failed-download-handling" - }, - { - "source": "DownloadClientCheck", - "type": "error", - "message": "Unable to communicate with qBittorrent. Failed to connect to qBittorrent, check your settings.", - "wikiUrl": "https://wiki.servarr.com/radarr/system#download-clients" - } - ] - } - } - } - } - }, - "401": { - "description": "Invalid API Key" - } - }, - "operationId": "get-health", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "description": "Query radarr for health information\n\nLocation: System > Status" - } - }, - "/command": { - "post": { - "summary": "Post a Command", - "tags": [ - "Command" - ], - "operationId": "post-command", - "responses": { - "200": { - "description": "Successful request" - }, - "201": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string" - } - }, - "required": [ - "name" - ] - }, - "examples": { - "Example": { - "value": { - "name": "Backup" - } - } - } - } - } - }, - "401": { - "description": "Invalid API Key" - } - }, - "description": "Pushes commands to Radarr using a key:value pair. The main key is \"name\" and below are acceptable values but it can also accept other key:value pairs (listed under each command):\n\n* ApplicationUpdate - Trigger an update of Radarr\n* Backup - Trigger a backup routine\n* CheckHealth - Trigger a system health check\n* ClearBlocklist - Triggers the removal of all blocklisted movies\n* CleanUpRecycleBin - Trigger a recycle bin cleanup check\n* DeleteLogFiles - Triggers the removal of all Info/Debug/Trace log files\n* DeleteUpdateLogFiles - Triggers the removal of all Update log files\n* DownloadedMoviesScan - Triggers the scan of downloaded movies\n* MissingMoviesSearch - Triggers a search of all missing movies\n* RefreshMonitoredDownloads - Triggers the scan of monitored downloads\n* RefreshMovie - Trigger a refresh / scan of library\n * movieIds:int[] - Specify a list of ids (comma separated) for individual movies to refresh", - "security": [ - { - "X-API-Key": [] - } - ], - "parameters": [] - } - }, - "/update": { - "get": { - "summary": "Get Recent Updates", - "tags": [ - "Update" - ], - "responses": { - "200": { - "description": "Successful request", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "version": { - "type": "string" - }, - "branch": { - "type": "string" - }, - "releaseDate": { - "type": "string" - }, - "fileName": { - "type": "string" - }, - "url": { - "type": "string" - }, - "installed": { - "type": "boolean" - }, - "installable": { - "type": "boolean" - }, - "latest": { - "type": "boolean" - }, - "changes": { - "type": "object", - "properties": { - "new": { - "type": "array", - "items": { - "type": "string" - } - }, - "fixed": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "hash": { - "type": "string" - } - } - }, - "examples": { - "Example": { - "value": { - "version": "3.0.0.3553", - "branch": "nightly", - "releaseDate": "2020-09-02T05:36:13.047313Z", - "fileName": "Radarr.nightly.3.0.0.3553.windows-core-x64.zip", - "url": "https://dev.azure.com/Radarr/Radarr/_apis/build/builds/1896/artifacts?artifactName=Packages&fileId=A710686A9CB6848E73C3DDCA5F2B0D83C6189546E66DD3EF2D0D30B20735F6E802&fileName=Radarr.aphrodite.3.0.0.3553.windows-core-x64.zip&api-version=5.1", - "installed": false, - "installable": false, - "latest": false, - "changes": { - "new": [], - "fixed": [ - "Importing completed downloads from NZBGet with post processing script failing", - "Importing of completed download when not a child of the download client output path", - "Getting parent of UNC paths" - ] - }, - "hash": "a95c855cbc3ee253fd0b74181e866106daffc7b71b4a9e2d57cfbeede4333aee" - } - } - } - } - } - }, - "401": { - "description": "Invalid API Key" - } - }, - "operationId": "get-update", - "description": "Will return a list of recent updates to Radarr\n\nLocation: System > Updates", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ] - } - }, - "/qualityProfile": { - "get": { - "summary": "Get All Quality Profiles", - "tags": [ - "Quality" - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/QualityProfile" - } - }, - "examples": {} - } - } - }, - "401": { - "description": "Invalid API Key" - } - }, - "operationId": "get-add-discover", - "description": "Query Radarr for quality profiles ", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ] - }, - "parameters": [] - }, - "/calendar": { - "get": { - "summary": "Get Calendar Events", - "tags": [ - "Calendar" - ], - "responses": { - "200": { - "description": "Successful request" - }, - "401": { - "description": "Invalid API Key" - } - }, - "operationId": "get-calendar", - "description": "Get a list of movies based on calendar parameters", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "parameters": [ - { - "schema": { - "type": "boolean" - }, - "in": "query", - "name": "unmonitored", - "required": true - }, - { - "schema": { - "type": "string" - }, - "in": "query", - "name": "start", - "description": "ISO 8601", - "required": true - }, - { - "schema": { - "type": "string" - }, - "in": "query", - "name": "end", - "description": "ISO 8601", - "required": true - } - ] - } - }, - "/queue": { - "get": { - "summary": "Get Activity Queue", - "tags": [ - "Queue" - ], - "responses": { - "200": { - "description": "Successful request" - }, - "401": { - "description": "Invalid API Key" - } - }, - "operationId": "get-queue", - "description": "Return a json object list of items in the queue", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "parameters": [ - { - "schema": { - "type": "integer" - }, - "in": "query", - "name": "page", - "description": "1", - "required": true - }, - { - "schema": { - "type": "integer" - }, - "in": "query", - "name": "pageSize", - "description": "20", - "required": true - }, - { - "schema": { - "type": "string" - }, - "in": "query", - "name": "sortDirection", - "description": "ascending", - "required": true - }, - { - "schema": { - "type": "string" - }, - "in": "query", - "name": "sortKey", - "description": "timeLeft", - "required": true - }, - { - "schema": { - "type": "boolean" - }, - "in": "query", - "name": "includeUnknownMovieItems", - "description": "true", - "required": true - } - ] - } - }, - "/history": { - "get": { - "summary": "Get History", - "responses": { - "200": { - "description": "Successful request", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "page": { - "type": "integer" - }, - "pageSize": { - "type": "integer" - }, - "sortDirection": { - "type": "string" - }, - "totalRecords": { - "type": "integer" - }, - "records": { - "type": "array", - "items": { - "$ref": "#/components/schemas/History" - } - } - } - }, - "examples": {} - } - } - }, - "401": { - "description": "Invalid API Key" - } - }, - "operationId": "get-history", - "description": "Return a json object list of items in your history", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "parameters": [ - { - "schema": { - "type": "integer" - }, - "in": "query", - "name": "page", - "description": "1", - "required": true - }, - { - "schema": { - "type": "integer" - }, - "in": "query", - "name": "pageSize", - "description": "20", - "required": true - }, - { - "schema": { - "type": "string" - }, - "in": "query", - "name": "sortDirection", - "description": "descending", - "required": true - }, - { - "schema": { - "type": "string" - }, - "in": "query", - "name": "sortKey", - "description": "date", - "required": true - } - ], - "tags": [ - "History" - ] - } - }, - "/customfilter": { - "get": { - "summary": "Get UI Custom Filters", - "tags": [ - "Custom Filters" - ], - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "array", - "description": "", - "minItems": 1, - "uniqueItems": true, - "items": { - "type": "object", - "properties": { - "type": { - "type": "string", - "minLength": 1 - }, - "label": { - "type": "string", - "minLength": 1 - }, - "filters": { - "type": "array", - "uniqueItems": true, - "minItems": 1, - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "minLength": 1 - }, - "value": { - "type": "array", - "items": { - "type": "string" - } - }, - "type": { - "type": "string" - } - }, - "required": [ - "key", - "type" - ] - } - }, - "id": { - "type": "integer" - } - }, - "required": [ - "type", - "label", - "filters", - "id" - ] - } - }, - "examples": { - "Example": { - "value": [ - { - "type": "movieIndex", - "label": "Rated G", - "filters": [ - { - "key": "certification", - "value": [ - "G" - ], - "type": "equal" - } - ], - "id": 10 - } - ] - } - } - } - } - }, - "401": { - "description": "Invalid API Key" - } - }, - "operationId": "get-customFilter", - "description": "Query Radarr for custom filters", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ] - }, - "parameters": [] - }, - "/importlist": { - "get": { - "summary": "Get All Import Lists", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ImportList" - } - }, - "examples": { - "Example": { - "value": [ - { - "enabled": true, - "enableAuto": true, - "shouldMonitor": true, - "rootFolderPath": "D:\\Plex\\Movies\\", - "qualityProfileId": 4, - "searchOnAdd": false, - "minimumAvailability": "announced", - "listType": "other", - "listOrder": 3, - "name": "IMDb List", - "fields": [ - { - "order": 0, - "name": "listId", - "label": "List/User ID", - "helpText": "IMDb list ID (e.g ls12345678), IMDb user ID (e.g. ur12345678), 'top250' or 'popular'", - "value": "ur109135197", - "type": "textbox", - "advanced": false - } - ], - "implementationName": "IMDb Lists", - "implementation": "IMDbListImport", - "configContract": "IMDbListSettings", - "infoLink": "https://wiki.servarr.com/radarr/settings#lists", - "tags": [ - 2 - ], - "id": 1 - } - ] - } - } - } - } - }, - "401": { - "description": "Invalid API Key" - } - }, - "operationId": "get-importList", - "description": "Query Radarr for all lists", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "tags": [ - "Import Lists" - ] - }, - "parameters": [] - }, - "/config/ui": { - "get": { - "summary": "Get UI Settings", - "responses": { - "200": { - "description": "Successful request", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "firstDayOfWeek": { - "type": "integer" - }, - "calendarWeekColumnHeader": { - "type": "string" - }, - "movieRuntimeFormat": { - "type": "string" - }, - "shortDateFormat": { - "type": "string" - }, - "longDateFormat": { - "type": "string" - }, - "timeFormat": { - "type": "string" - }, - "showRelativeDates": { - "type": "boolean" - }, - "enableColorImpairedMode": { - "type": "boolean" - }, - "movieInfoLanguage": { - "type": "integer" - }, - "id": { - "type": "integer" - } - } - }, - "examples": { - "Example": { - "value": { - "firstDayOfWeek": 0, - "calendarWeekColumnHeader": "ddd M/D", - "movieRuntimeFormat": "hoursMinutes", - "shortDateFormat": "MMM D YYYY", - "longDateFormat": "dddd, MMMM D YYYY", - "timeFormat": "h(:mm)a", - "showRelativeDates": true, - "enableColorImpairedMode": false, - "movieInfoLanguage": 1, - "id": 1 - } - } - } - } - } - }, - "401": { - "description": "Invalid API Key" - } - }, - "operationId": "get-ui", - "description": "Query Radarr for UI settings", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "tags": [ - "Settings" - ] - }, - "parameters": [], - "put": { - "summary": "Edit UI Settings", - "operationId": "putconfig-ui", - "responses": { - "200": { - "description": "OK" - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": {} - } - } - } - } - }, - "description": "Edit one or many UI settings and save to to the database", - "tags": [ - "Settings" - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "description": "", - "type": "object", - "properties": { - "firstDayOfWeek": { - "type": "integer" - }, - "calendarWeekColumnHeader": { - "type": "string", - "minLength": 1 - }, - "movieRuntimeFormat": { - "type": "string", - "minLength": 1, - "enum": [ - "hoursMinutes", - "minutes" - ] - }, - "shortDateFormat": { - "type": "string", - "minLength": 1 - }, - "longDateFormat": { - "type": "string", - "minLength": 1 - }, - "timeFormat": { - "type": "string", - "minLength": 1 - }, - "showRelativeDates": { - "type": "boolean" - }, - "enableColorImpairedMode": { - "type": "boolean" - }, - "movieInfoLanguage": { - "type": "number" - }, - "id": { - "type": "integer" - } - }, - "required": [ - "id" - ] - } - } - } - }, - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ] - } - }, - "/remotePathMapping": { - "get": { - "summary": "Get All Remote Path Mappings", - "tags": [ - "Remote Path Mapping" - ], - "responses": { - "200": { - "description": "Successful request", - "content": { - "application/json": { - "schema": { - "type": "array", - "description": "", - "minItems": 1, - "uniqueItems": true, - "items": { - "type": "object", - "properties": { - "host": { - "type": "string", - "minLength": 1 - }, - "remotePath": { - "type": "string", - "minLength": 1 - }, - "localPath": { - "type": "string", - "minLength": 1 - }, - "id": { - "type": "integer" - } - }, - "required": [ - "host", - "remotePath", - "localPath", - "id" - ] - } - }, - "examples": { - "Example": { - "value": [ - { - "host": "localhost", - "remotePath": "B:\\", - "localPath": "A:\\Movies\\", - "id": 1 - }, - { - "host": "localhost", - "remotePath": "C:\\", - "localPath": "A:\\Movies\\", - "id": 2 - } - ] - } - } - } - } - }, - "401": { - "description": "Invalid API Key" - } - }, - "operationId": "get-remotePathMapping", - "description": "Get a list of remote paths being mapped and used by Radarr", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ] - } - }, - "/downloadclient": { - "get": { - "summary": "Get All Download Clients", - "tags": [ - "Download Client" - ], - "responses": { - "200": { - "description": "Successful request", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DownloadClient" - } - } - } - } - }, - "401": { - "description": "Invalid API Key" - } - }, - "operationId": "get-downloadClient", - "description": "Get a list of all the download clients added in Radarr", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ] - }, - "parameters": [] - }, - "/blocklist": { - "get": { - "summary": "Get Blocklisted Releases", - "tags": [ - "Blocklist" - ], - "responses": { - "200": { - "description": "Invalid API Key", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "page": { - "type": "integer", - "description": "1" - }, - "pageSize": { - "type": "integer", - "description": "20" - }, - "sortDirection": { - "type": "string", - "description": "descending" - }, - "sortKey": { - "type": "string", - "description": "date" - }, - "totalRecords": { - "type": "integer" - }, - "records": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Blocklist" - } - } - }, - "required": [ - "page", - "pageSize", - "sortDirection", - "sortKey" - ] - } - } - } - }, - "401": { - "description": "Invalid API Key" - } - }, - "operationId": "get-blockList", - "description": "Returns blocklisted releases", - "security": [ - { - "X-API-Key": [] - } - ], - "parameters": [ - { - "schema": { - "type": "integer" - }, - "in": "query", - "name": "page", - "description": "1", - "required": true - }, - { - "schema": { - "type": "integer" - }, - "in": "query", - "name": "pageSize", - "description": "20", - "required": true - }, - { - "schema": { - "type": "string" - }, - "in": "query", - "name": "sortDirection", - "description": "descending", - "required": true - }, - { - "schema": { - "type": "string" - }, - "in": "query", - "name": "sortKey", - "description": "date", - "required": true - } - ] - }, - "delete": { - "summary": "Delete a Blocklisted Release", - "operationId": "delete-blockList", - "responses": { - "200": { - "description": "Successful request" - }, - "401": { - "description": "Invalid API Key" - } - }, - "description": "Removes a specific release (the id provided) from the blocklist", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "parameters": [ - { - "schema": { - "type": "integer" - }, - "in": "query", - "name": "id", - "required": true - } - ], - "tags": [ - "Blocklist" - ] - }, - "parameters": [] - }, - "/blocklist/movie": { - "get": { - "summary": "Get Blocklisted Releases for a Movie", - "tags": [ - "Blocklist" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Blocklist" - } - } - } - } - }, - "401": { - "description": "Unauthorized" - } - }, - "operationId": "get-blocklist-movie", - "description": "Retrieves blocklisted releases that are tied to a given movie in the database", - "parameters": [ - { - "schema": { - "type": "integer" - }, - "in": "query", - "name": "movieId", - "description": "Database Id for the movie ", - "required": true - } - ], - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ] - } - }, - "/blocklist/bulk": { - "delete": { - "summary": "Delete Blocklisted Releases", - "operationId": "delete-blocklist-bulk", - "responses": { - "200": { - "description": "OK" - } - }, - "description": "Delete blocklisted releases in bulk", - "security": [ - { - "X-API-Key": [] - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "description": "", - "type": "object", - "properties": { - "ids": { - "type": "array", - "description": "Database ids of the blocklist items to delete", - "items": { - "type": "integer" - } - } - }, - "required": [ - "ids" - ] - }, - "examples": {} - } - } - }, - "tags": [ - "Blocklist" - ] - } - }, - "/indexer": { - "get": { - "summary": "Get All Indexers", - "tags": [ - "Indexer" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "description": "", - "minItems": 1, - "uniqueItems": true, - "items": { - "$ref": "#/components/schemas/Indexer" - } - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "description": "", - "type": "object", - "properties": { - "error": { - "type": "string", - "minLength": 1 - } - }, - "required": [ - "error" - ] - } - } - } - } - }, - "operationId": "get-indexer", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "description": "Get all indexers" - } - }, - "/indexer/{id}": { - "parameters": [ - { - "schema": { - "type": "integer" - }, - "name": "id", - "in": "path", - "required": true, - "description": "Database Id of the indexer" - } - ], - "get": { - "summary": "Get an Indexer", - "tags": [ - "Indexer" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Indexer" - } - } - } - }, - "401": { - "description": "Unauthorized" - } - }, - "operationId": "get-indexer-id", - "description": "Get Indexer by its database Id", - "parameters": [], - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ] - }, - "put": { - "summary": "Edit an Indexer", - "operationId": "put-indexer-id", - "responses": { - "200": { - "description": "OK" - }, - "401": { - "description": "Unauthorized" - } - }, - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "tags": [ - "Indexer" - ] - }, - "delete": { - "summary": "Delete an Indexer", - "operationId": "delete-indexer-id", - "responses": { - "200": { - "description": "OK" - }, - "401": { - "description": "Unauthorized" - } - }, - "description": "Delete Indexer by database id", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "tags": [ - "Indexer" - ] - } - }, - "/downloadclient/{id}": { - "parameters": [ - { - "schema": { - "type": "integer" - }, - "name": "id", - "in": "path", - "required": true, - "description": "Database id of the download client" - } - ], - "get": { - "summary": "Get a Download Client", - "tags": [ - "Download Client" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DownloadClient" - } - } - } - }, - "401": { - "description": "Unauthorized" - } - }, - "operationId": "get-downloadclient-id", - "description": "Get a single download client by database id", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ] - }, - "delete": { - "summary": "Delete a Download Client", - "operationId": "delete-downloadclient-id", - "responses": { - "200": { - "description": "OK" - } - }, - "description": "Delete a download client by database id", - "security": [ - { - "X-API-Key": [] - } - ], - "tags": [ - "Download Client" - ] - }, - "put": { - "summary": "Edit a Download Client", - "operationId": "put-downloadclient-id", - "responses": { - "200": { - "description": "OK" - } - }, - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "description": "Edit a downloadclient by database id", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DownloadClient" - } - } - }, - "description": "" - }, - "tags": [ - "Download Client" - ] - } - }, - "/notification": { - "get": { - "summary": "Get All Notifications", - "tags": [ - "Notification" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Notification" - } - } - } - } - }, - "401": { - "description": "Unauthorized" - } - }, - "operationId": "get-notifications", - "description": "Get all notifications", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ] - }, - "parameters": [] - }, - "/notification/{id}": { - "parameters": [ - { - "schema": { - "type": "integer" - }, - "name": "id", - "in": "path", - "required": true, - "description": "Database id of notification" - } - ], - "get": { - "summary": "Get a Notification", - "tags": [ - "Notification" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Notification" - } - } - } - }, - "401": { - "description": "Unauthorized" - } - }, - "operationId": "get-notification-id", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "description": "Get Notification by database id" - }, - "delete": { - "summary": "Delete a Notification", - "operationId": "delete-notification-id", - "responses": { - "200": { - "description": "OK" - }, - "401": { - "description": "Unauthorized" - } - }, - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "description": "Delete Notification by database id", - "tags": [ - "Notification" - ] - }, - "put": { - "summary": "Edit a Notification", - "operationId": "put-notification-id", - "responses": { - "200": { - "description": "OK" - }, - "401": { - "description": "Unauthorized" - } - }, - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Notification" - } - } - } - }, - "description": "Edit Notification by database id", - "tags": [ - "Notification" - ] - } - }, - "/metadata": { - "get": { - "summary": "Get All Metadata", - "tags": [ - "Metadata" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Metadata" - } - } - } - } - }, - "401": { - "description": "Unauthorized" - } - }, - "operationId": "get-metadata", - "description": "Get all metadata consumer settings", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ] - } - }, - "/movie/lookup": { - "get": { - "summary": "Lookup a Movie to Add", - "tags": [ - "Movie" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Movie" - } - } - } - } - }, - "401": { - "description": "Unauthorized" - } - }, - "operationId": "get-movie-lookup", - "description": "Search for a movie to add to the database (Uses TMDB for search results)", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "parameters": [ - { - "schema": { - "type": "string" - }, - "in": "query", - "name": "term", - "description": "search term to use for lookup", - "required": true - } - ] - } - }, - "/history/movie": { - "get": { - "summary": "Get History for a Movie", - "tags": [ - "History" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/History" - } - } - } - } - }, - "401": { - "description": "Unauthorized" - } - }, - "operationId": "get-history-movie", - "description": "Get history for a given movie in database by its database id", - "parameters": [ - { - "schema": { - "type": "integer" - }, - "in": "query", - "name": "movieId", - "description": "database id of movie", - "required": true - }, - { - "schema": { - "type": "integer" - }, - "in": "query", - "name": "eventType", - "description": "history event type to retrieve" - } - ], - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ] - } - }, - "/movie/editor": { - "put": { - "summary": "Edit Multiple Movies", - "operationId": "put-movie-editor", - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Movie" - } - } - } - } - }, - "401": { - "description": "Unauthorized" - } - }, - "description": "Editor endpoint is used by the movie editor in Radarr. The Edit operation allows to edit properties of multiple movies at once", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "movieIds": { - "type": "array", - "items": { - "type": "integer" - } - }, - "monitored": { - "type": "boolean" - }, - "qualityProfileId": { - "type": "integer" - }, - "minimumAvailability": { - "type": "string" - }, - "rootFolderPath": { - "type": "string" - }, - "tags": { - "type": "array", - "items": { - "type": "integer" - } - }, - "applyTags": { - "type": "string", - "enum": [ - "add", - "remove", - "replace" - ] - }, - "moveFiles": { - "type": "boolean" - } - }, - "required": [ - "movieIds" - ] - } - } - } - }, - "tags": [ - "Movie" - ] - }, - "delete": { - "summary": "Delete Multiple Movies", - "operationId": "delete-movie-editor", - "responses": { - "200": { - "description": "OK" - }, - "401": { - "description": "Unauthorized" - } - }, - "description": "Editor endpoint is used by the movie editor in Radarr. The Delete operation allows mass deletion of movies (and optionally files).", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "movieIds": { - "type": "array", - "items": { - "type": "integer" - } - }, - "deleteFIles": { - "type": "boolean" - }, - "addImportExclusion": { - "type": "boolean" - } - }, - "required": [ - "movieIds", - "deleteFIles", - "addImportExclusion" - ] - } - } - } - }, - "tags": [ - "Movie" - ] - } - }, - "/movie/import": { - "post": { - "summary": "Add Movies From Folders", - "operationId": "post-movie-import", - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Movie" - } - } - } - } - }, - "401": { - "description": "Unauthorized" - } - }, - "description": "The movie import endpoint is used by the bulk import view in Radarr UI. It allows movies to be bulk added to the Radarr database.", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Movie" - } - } - } - } - }, - "tags": [ - "Movie" - ] - } - }, - "/moviefile": { - "get": { - "summary": "Get Multiple MovieFiles", - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/MovieFile" - } - } - } - } - }, - "401": { - "description": "Unauthorized" - } - }, - "operationId": "get-moviefile", - "description": "The moviefile endpoint allows for retrieval of all moviefile by a list of ids or by the associated movieid. Either the moviefileids OR movieid query parameter must be passed.", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "parameters": [ - { - "schema": { - "type": "array" - }, - "in": "query", - "name": "moviefileids", - "description": "Comma separated list of moviefile ids", - "required": true - }, - { - "schema": { - "type": "string" - }, - "in": "query", - "name": "movieid", - "description": "Database id of movie to retrieve files for", - "required": true - } - ], - "tags": [ - "MovieFile" - ] - } - }, - "/moviefile/{id}": { - "parameters": [ - { - "schema": { - "type": "string" - }, - "name": "id", - "in": "path", - "required": true - } - ], - "get": { - "summary": "Get a MovieFile", - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MovieFile" - } - } - } - }, - "401": { - "description": "Unauthorized" - } - }, - "operationId": "get-moviefile-id", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "description": "Get a movie file object by its database id.", - "tags": [ - "MovieFile" - ] - }, - "delete": { - "summary": "Delete a Movie", - "operationId": "delete-moviefile-id", - "responses": { - "200": { - "description": "OK" - }, - "401": { - "description": "Unauthorized" - } - }, - "description": "Allows for deletion of a moviefile by its database id.", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "tags": [ - "MovieFile" - ] - } - }, - "/importlist/{id}": { - "parameters": [ - { - "schema": { - "type": "string" - }, - "name": "id", - "in": "path", - "required": true - } - ], - "get": { - "summary": "Get an Import List", - "tags": [ - "Import Lists" - ], - "responses": { - "200": { - "description": "OK" - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ImportList" - } - } - } - } - }, - "operationId": "get-importlist-id", - "description": "", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ] - }, - "put": { - "summary": "Edit an Import List", - "operationId": "put-importlist-id", - "responses": { - "200": { - "description": "OK" - }, - "401": { - "description": "Unauthorized" - } - }, - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "tags": [ - "Import Lists" - ] - }, - "delete": { - "summary": "Delete an Import List", - "operationId": "delete-importlist-id", - "responses": { - "200": { - "description": "OK" - }, - "401": { - "description": "Unauthorized" - } - }, - "description": "", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "tags": [ - "Import Lists" - ] - } - }, - "/config/host": { - "get": { - "summary": "Get Host Settings", - "tags": [ - "Settings" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "description": "", - "type": "object", - "properties": { - "bindAddress": { - "type": "string", - "minLength": 1 - }, - "port": { - "type": "integer" - }, - "sslPort": { - "type": "integer" - }, - "enableSsl": { - "type": "boolean" - }, - "launchBrowser": { - "type": "boolean" - }, - "authenticationMethod": { - "type": "string", - "minLength": 1 - }, - "analyticsEnabled": { - "type": "boolean" - }, - "username": { - "type": "string", - "minLength": 1 - }, - "password": { - "type": "string", - "minLength": 1 - }, - "logLevel": { - "type": "string", - "minLength": 1 - }, - "consoleLogLevel": { - "type": "string" - }, - "branch": { - "type": "string", - "minLength": 1 - }, - "apiKey": { - "type": "string", - "minLength": 1 - }, - "sslCertPath": { - "type": "string" - }, - "sslCertPassword": { - "type": "string" - }, - "urlBase": { - "type": "string" - }, - "updateAutomatically": { - "type": "boolean" - }, - "updateMechanism": { - "type": "string", - "minLength": 1 - }, - "updateScriptPath": { - "type": "string" - }, - "proxyEnabled": { - "type": "boolean" - }, - "proxyType": { - "type": "string", - "minLength": 1 - }, - "proxyHostname": { - "type": "string" - }, - "proxyPort": { - "type": "integer" - }, - "proxyUsername": { - "type": "string" - }, - "proxyPassword": { - "type": "string" - }, - "proxyBypassFilter": { - "type": "string" - }, - "proxyBypassLocalAddresses": { - "type": "boolean" - }, - "certificateValidation": { - "type": "string", - "minLength": 1 - }, - "backupFolder": { - "type": "string", - "minLength": 1 - }, - "backupInterval": { - "type": "integer" - }, - "backupRetention": { - "type": "integer" - }, - "id": { - "type": "integer" - } - }, - "required": [ - "bindAddress", - "port", - "sslPort", - "enableSsl", - "launchBrowser", - "authenticationMethod", - "analyticsEnabled", - "username", - "password", - "logLevel", - "consoleLogLevel", - "branch", - "apiKey", - "sslCertPath", - "sslCertPassword", - "urlBase", - "updateAutomatically", - "updateMechanism", - "updateScriptPath", - "proxyEnabled", - "proxyType", - "proxyHostname", - "proxyPort", - "proxyUsername", - "proxyPassword", - "proxyBypassFilter", - "proxyBypassLocalAddresses", - "certificateValidation", - "backupFolder", - "backupInterval", - "backupRetention", - "id" - ] - } - } - } - }, - "401": { - "description": "Unauthorized" - } - }, - "operationId": "get-config-host", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "description": "Get General/Host settings for Radarr." - }, - "put": { - "summary": "Edit Host Settings", - "operationId": "put-config-host", - "responses": { - "200": { - "description": "OK" - }, - "401": { - "description": "Unauthorized" - } - }, - "description": "Edit General/Host settings for Radarr.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "description": "", - "type": "object", - "properties": { - "bindAddress": { - "type": "string", - "minLength": 1 - }, - "port": { - "type": "number" - }, - "sslPort": { - "type": "number" - }, - "enableSsl": { - "type": "boolean" - }, - "launchBrowser": { - "type": "boolean" - }, - "authenticationMethod": { - "type": "string", - "minLength": 1 - }, - "analyticsEnabled": { - "type": "boolean" - }, - "username": { - "type": "string", - "minLength": 1 - }, - "password": { - "type": "string", - "minLength": 1 - }, - "logLevel": { - "type": "string", - "minLength": 1 - }, - "consoleLogLevel": { - "type": "string" - }, - "branch": { - "type": "string", - "minLength": 1 - }, - "apiKey": { - "type": "string", - "minLength": 1 - }, - "sslCertPath": { - "type": "string" - }, - "sslCertPassword": { - "type": "string" - }, - "urlBase": { - "type": "string" - }, - "updateAutomatically": { - "type": "boolean" - }, - "updateMechanism": { - "type": "string", - "minLength": 1 - }, - "updateScriptPath": { - "type": "string" - }, - "proxyEnabled": { - "type": "boolean" - }, - "proxyType": { - "type": "string", - "minLength": 1 - }, - "proxyHostname": { - "type": "string" - }, - "proxyPort": { - "type": "number" - }, - "proxyUsername": { - "type": "string" - }, - "proxyPassword": { - "type": "string" - }, - "proxyBypassFilter": { - "type": "string" - }, - "proxyBypassLocalAddresses": { - "type": "boolean" - }, - "certificateValidation": { - "type": "string", - "minLength": 1 - }, - "backupFolder": { - "type": "string", - "minLength": 1 - }, - "backupInterval": { - "type": "number" - }, - "backupRetention": { - "type": "number" - }, - "id": { - "type": "number" - } - }, - "required": [ - "bindAddress", - "port", - "sslPort", - "enableSsl", - "launchBrowser", - "authenticationMethod", - "analyticsEnabled", - "username", - "password", - "logLevel", - "consoleLogLevel", - "branch", - "apiKey", - "sslCertPath", - "sslCertPassword", - "urlBase", - "updateAutomatically", - "updateMechanism", - "updateScriptPath", - "proxyEnabled", - "proxyType", - "proxyHostname", - "proxyPort", - "proxyUsername", - "proxyPassword", - "proxyBypassFilter", - "proxyBypassLocalAddresses", - "certificateValidation", - "backupFolder", - "backupInterval", - "backupRetention", - "id" - ] - } - } - }, - "description": "" - }, - "tags": [ - "Settings" - ], - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ] - } - }, - "/config/naming": { - "get": { - "summary": "Get Naming Settings", - "tags": [ - "Settings" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "description": "", - "type": "object", - "properties": { - "renameMovies": { - "type": "boolean" - }, - "replaceIllegalCharacters": { - "type": "boolean" - }, - "colonReplacementFormat": { - "type": "string", - "minLength": 1 - }, - "standardMovieFormat": { - "type": "string", - "minLength": 1 - }, - "movieFolderFormat": { - "type": "string", - "minLength": 1 - }, - "includeQuality": { - "type": "boolean" - }, - "replaceSpaces": { - "type": "boolean" - }, - "id": { - "type": "number" - } - }, - "required": [ - "renameMovies", - "replaceIllegalCharacters", - "colonReplacementFormat", - "standardMovieFormat", - "movieFolderFormat", - "includeQuality", - "replaceSpaces", - "id" - ] - } - } - } - }, - "401": { - "description": "Unauthorized" - } - }, - "operationId": "get-config-naming", - "description": "Get Settings for movie file and folder naming.", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ] - }, - "put": { - "summary": "Edit Naming Settings", - "operationId": "put-config-naming", - "responses": { - "200": { - "description": "OK" - }, - "401": { - "description": "Unauthorized" - } - }, - "tags": [ - "Settings" - ], - "description": "Edit Settings for movie file and folder naming.", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "description": "", - "type": "object", - "properties": { - "renameMovies": { - "type": "boolean" - }, - "replaceIllegalCharacters": { - "type": "boolean" - }, - "colonReplacementFormat": { - "type": "string", - "minLength": 1 - }, - "standardMovieFormat": { - "type": "string", - "minLength": 1 - }, - "movieFolderFormat": { - "type": "string", - "minLength": 1 - }, - "includeQuality": { - "type": "boolean" - }, - "replaceSpaces": { - "type": "boolean" - }, - "id": { - "type": "number" - } - }, - "required": [ - "renameMovies", - "replaceIllegalCharacters", - "colonReplacementFormat", - "standardMovieFormat", - "movieFolderFormat", - "includeQuality", - "replaceSpaces", - "id" - ] - } - } - } - } - } - }, - "/queue/{id}": { - "parameters": [ - { - "schema": { - "type": "string" - }, - "name": "id", - "in": "path", - "required": true - } - ], - "delete": { - "summary": "Remove Item from Queue", - "operationId": "delete-queue-id", - "responses": { - "200": { - "description": "OK" - }, - "401": { - "description": "Invalid API Key" - } - }, - "description": "Remove an item from the queue and optionally blocklist it", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "parameters": [ - { - "schema": { - "type": "boolean" - }, - "in": "query", - "name": "removeFromClient" - }, - { - "schema": { - "type": "boolean" - }, - "in": "query", - "name": "blocklist" - } - ], - "tags": [ - "Queue" - ] - } - }, - "/queue/bulk": { - "delete": { - "summary": "Remove Items from Queue", - "operationId": "delete-queue-bulk", - "responses": { - "200": { - "description": "OK" - }, - "401": { - "description": "Invalid API Key" - } - }, - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "parameters": [ - { - "schema": { - "type": "boolean" - }, - "in": "query", - "name": "removeFromClient" - }, - { - "schema": { - "type": "boolean" - }, - "in": "query", - "name": "blocklist" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "description": "", - "type": "object", - "properties": { - "ids": { - "type": "array", - "items": { - "type": "integer" - } - } - }, - "required": [ - "ids" - ] - } - } - }, - "description": "" - }, - "tags": [ - "Queue" - ], - "description": "Remove multiple items from queue by their ids" - } - }, - "/queue/details": { - "get": { - "summary": "Get Queue Item Details", - "tags": [ - "Queue" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "description": "", - "minItems": 1, - "uniqueItems": true, - "items": { - "type": "object", - "properties": { - "languages": { - "type": "array", - "uniqueItems": true, - "minItems": 1, - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "name": { - "type": "string", - "minLength": 1 - } - }, - "required": [ - "id", - "name" - ] - } - }, - "quality": { - "$ref": "#/components/schemas/Quality" - }, - "customFormats": { - "type": "array", - "uniqueItems": true, - "minItems": 1, - "items": { - "$ref": "#/components/schemas/CustomFormat" - } - }, - "size": { - "type": "number" - }, - "title": { - "type": "string", - "minLength": 1 - }, - "sizeleft": { - "type": "number" - }, - "timeleft": { - "type": "string", - "minLength": 1 - }, - "estimatedCompletionTime": { - "type": "string", - "minLength": 1 - }, - "status": { - "type": "string", - "minLength": 1 - }, - "trackedDownloadStatus": { - "type": "string", - "minLength": 1 - }, - "trackedDownloadState": { - "type": "string", - "minLength": 1 - }, - "statusMessages": { - "type": "array", - "uniqueItems": true, - "minItems": 1, - "items": { - "type": "object", - "properties": { - "title": { - "type": "string", - "minLength": 1 - }, - "messages": { - "type": "array", - "items": { - "type": "object" - } - } - }, - "required": [ - "title" - ] - } - }, - "errorMessage": { - "type": "string", - "minLength": 1 - }, - "downloadId": { - "type": "string", - "minLength": 1 - }, - "protocol": { - "type": "string", - "minLength": 1 - }, - "downloadClient": { - "type": "string", - "minLength": 1 - }, - "indexer": { - "type": "string", - "minLength": 1 - }, - "outputPath": { - "type": "string", - "minLength": 1 - }, - "id": { - "type": "integer" - } - }, - "required": [ - "languages", - "quality", - "customFormats", - "size", - "title", - "sizeleft", - "timeleft", - "estimatedCompletionTime", - "status", - "trackedDownloadStatus", - "trackedDownloadState", - "statusMessages", - "errorMessage", - "downloadId", - "protocol", - "downloadClient", - "indexer", - "outputPath", - "id" - ] - } - } - } - } - }, - "401": { - "description": "Invalid API Key" - } - }, - "operationId": "get-queue-details", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "parameters": [ - { - "schema": { - "type": "boolean" - }, - "in": "query", - "name": "includeMovie", - "description": "Include Movie object if linked" - } - ], - "description": "Get details of all items in queue" - } - }, - "/queue/status": { - "get": { - "summary": "Get Queue Status", - "tags": [ - "Queue" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "description": "", - "type": "object", - "properties": { - "totalCount": { - "type": "integer" - }, - "count": { - "type": "integer" - }, - "unknownCount": { - "type": "integer" - }, - "errors": { - "type": "boolean" - }, - "warnings": { - "type": "boolean" - }, - "unknownErrors": { - "type": "boolean" - }, - "unknownWarnings": { - "type": "boolean" - } - }, - "required": [ - "totalCount", - "count", - "unknownCount", - "errors", - "warnings", - "unknownErrors", - "unknownWarnings" - ] - } - } - } - }, - "401": { - "description": "Invalid API Key" - } - }, - "operationId": "get-queue-status", - "description": "Stats on items in queue", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ] - } - }, - "/queue/grab/{id}": { - "parameters": [ - { - "schema": { - "type": "string" - }, - "name": "id", - "in": "path", - "required": true - } - ], - "post": { - "summary": "", - "operationId": "post-queue-grab-id", - "responses": { - "200": { - "description": "OK" - }, - "401": { - "description": "Invalid API Key" - } - }, - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "description": "Perform a Radarr \"force grab\" on a pending queue item by its ID.", - "tags": [ - "Queue" - ] - } - }, - "/rootfolder": { - "get": { - "summary": "Gets root folder", - "responses": { - "200": { - "description": "Successful request", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object" - } - }, - "examples": { - "Response": { - "value": [ - { - "path": "C:\\Downloads\\Movies", - "freeSpace": 282500063232, - "unmappedFolders": [], - "id": 1 - } - ] - } - } - } - } - }, - "401": { - "description": "Invalid API Key" - } - }, - "operationId": "get-rootfolder", - "description": "Query Radarr for root folder information\n\nSettings: Media Management > Root Folders", - "security": [ - { - "X-API-Key": [] - }, - { - "apikey": [] - } - ], - "tags": [ - "Root Folder" - ] - } - } - }, - "components": { - "schemas": { - "Movie": { - "type": "object", - "required": [ - "title" - ], - "properties": { - "id": { - "type": "integer", - "format": "int64" - }, - "title": { - "type": "string", - "example": "Dark Phoenix" - }, - "sortTitle": { - "type": "string", - "example": "dark phoenix" - }, - "sizeOnDisk": { - "type": "number" - }, - "overview": { - "type": "string" - }, - "inCinemas": { - "type": "string" - }, - "physicalRelease": { - "type": "string" - }, - "images": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Image" - } - }, - "website": { - "type": "string", - "example": "http://darkphoenix.com" - }, - "year": { - "type": "integer" - }, - "hasFile": { - "type": "boolean" - }, - "youTubeTrailerId": { - "type": "string" - }, - "studio": { - "type": "string" - }, - "path": { - "type": "string" - }, - "rootFolderPath": { - "type": "string" - }, - "qualityProfileId": { - "type": "integer" - }, - "monitored": { - "type": "boolean" - }, - "minimumAvailability": { - "type": "string", - "enum": [ - "announced", - "inCinemas", - "released" - ] - }, - "isAvailable": { - "type": "boolean" - }, - "folderName": { - "type": "string" - }, - "runtime": { - "type": "integer" - }, - "cleanTitle": { - "type": "string" - }, - "imdbId": { - "type": "string" - }, - "tmdbId": { - "type": "integer" - }, - "titleSlug": { - "type": "string" - }, - "certification": { - "type": "string" - }, - "genres": { - "type": "array", - "items": { - "type": "string" - } - }, - "tags": { - "type": "array", - "items": { - "type": "integer" - } - }, - "added": { - "type": "string" - }, - "ratings": { - "$ref": "#/components/schemas/Rating" - }, - "collection": { - "$ref": "#/components/schemas/Collection" - }, - "status": { - "type": "string", - "description": "movie status", - "enum": [ - "deleted", - "tba", - "announced", - "inCinemas", - "released" - ] - } - }, - "xml": { - "name": "Movie" - } - }, - "Image": { - "type": "object", - "properties": { - "coverType": { - "type": "string", - "enum": ["poster", "fanart"], - "example": "poster" - }, - "url": { - "type": "string", - "summary": "A path that can be used together with the host to find the image - requires API key", - "example": "/radarr/MediaCover/39/poster.jpg?lastWrite=637618111851086964" - }, - "remoteUrl": { - "type": "string", - "summary": "A full URL of the TMDB source", - "example": "https://image.tmdb.org/t/p/original/i0FHyNF9VvQTXOi4yKnZJ1zql1.jpg" - } - }, - "xml": { - "name": "Image" - } - }, - "Collection": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "tmdbId": { - "type": "integer" - }, - "images": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Image" - } - } - }, - "xml": { - "name": "Collection" - } - }, - "Rating": { - "type": "object", - "properties": { - "votes": { - "type": "integer" - }, - "value": { - "type": "number" - } - }, - "xml": { - "name": "Rating" - } - }, - "Tag": { - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "label": { - "type": "string" - } - } - }, - "TagDetail": { - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "label": { - "type": "string" - }, - "delayProfileIds": { - "type": "array", - "items": { - "type": "integer" - } - }, - "notificationIds": { - "type": "array", - "items": { - "type": "integer" - } - }, - "restrictionIds": { - "type": "array", - "items": { - "type": "integer" - } - }, - "netImportIds": { - "type": "array", - "items": { - "type": "integer" - } - }, - "movieIds": { - "type": "array", - "items": { - "type": "integer" - } - } - } - }, - "Indexer": { - "description": "", - "type": "object", - "properties": { - "enableRss": { - "type": "boolean" - }, - "enableAutomaticSearch": { - "type": "boolean" - }, - "enableInteractiveSearch": { - "type": "boolean" - }, - "supportsRss": { - "type": "boolean" - }, - "supportsSearch": { - "type": "boolean" - }, - "protocol": { - "type": "string", - "minLength": 1 - }, - "priority": { - "type": "integer", - "minimum": 0, - "maximum": 50 - }, - "name": { - "type": "string", - "minLength": 1 - }, - "fields": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProviderField" - } - }, - "implementationName": { - "type": "string", - "minLength": 1 - }, - "implementation": { - "type": "string", - "minLength": 1 - }, - "configContract": { - "type": "string", - "minLength": 1 - }, - "infoLink": { - "type": "string", - "minLength": 1 - }, - "tags": { - "type": "array", - "items": { - "type": "object" - } - }, - "id": { - "type": "number" - } - }, - "required": [ - "enableRss", - "enableAutomaticSearch", - "enableInteractiveSearch", - "supportsRss", - "supportsSearch", - "protocol", - "priority", - "name", - "fields", - "implementationName", - "implementation", - "configContract", - "infoLink", - "tags", - "id" - ] - }, - "DownloadClient": { - "description": "", - "type": "object", - "properties": { - "enable": { - "type": "boolean" - }, - "protocol": { - "type": "string", - "minLength": 1 - }, - "priority": { - "type": "integer", - "minimum": 0, - "maximum": 50 - }, - "name": { - "type": "string", - "minLength": 1 - }, - "fields": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProviderField" - } - }, - "implementationName": { - "type": "string", - "minLength": 1 - }, - "implementation": { - "type": "string", - "minLength": 1 - }, - "configContract": { - "type": "string", - "minLength": 1 - }, - "infoLink": { - "type": "string", - "minLength": 1 - }, - "tags": { - "type": "array", - "items": { - "type": "integer" - } - }, - "id": { - "type": "integer" - } - }, - "required": [ - "enable", - "protocol", - "priority", - "name", - "fields", - "implementationName", - "implementation", - "configContract", - "infoLink", - "tags", - "id" - ] - }, - "Notification": { - "description": "", - "type": "object", - "title": "", - "properties": { - "onGrab": { - "type": "boolean" - }, - "onDownload": { - "type": "boolean" - }, - "onUpgrade": { - "type": "boolean" - }, - "onRename": { - "type": "boolean" - }, - "onDelete": { - "type": "boolean" - }, - "onHealthIssue": { - "type": "boolean" - }, - "supportsOnGrab": { - "type": "boolean" - }, - "supportsOnDownload": { - "type": "boolean" - }, - "supportsOnUpgrade": { - "type": "boolean" - }, - "supportsOnRename": { - "type": "boolean" - }, - "supportsOnDelete": { - "type": "boolean" - }, - "supportsOnHealthIssue": { - "type": "boolean" - }, - "includeHealthWarnings": { - "type": "boolean" - }, - "name": { - "type": "string", - "minLength": 1 - }, - "fields": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProviderField" - } - }, - "implementationName": { - "type": "string", - "minLength": 1 - }, - "implementation": { - "type": "string", - "minLength": 1 - }, - "configContract": { - "type": "string", - "minLength": 1 - }, - "infoLink": { - "type": "string", - "minLength": 1 - }, - "message": { - "type": "object", - "required": [ - "message", - "type" - ], - "properties": { - "message": { - "type": "string", - "minLength": 1 - }, - "type": { - "type": "string", - "minLength": 1 - } - } - }, - "tags": { - "type": "array", - "items": { - "type": "integer" - } - }, - "id": { - "type": "integer" - } - }, - "required": [ - "onGrab", - "onDownload", - "onUpgrade", - "onRename", - "onDelete", - "onHealthIssue", - "supportsOnGrab", - "supportsOnDownload", - "supportsOnUpgrade", - "supportsOnRename", - "supportsOnDelete", - "supportsOnHealthIssue", - "includeHealthWarnings", - "name", - "fields", - "implementationName", - "implementation", - "configContract", - "infoLink", - "message", - "tags", - "id" - ] - }, - "Metadata": { - "description": "", - "type": "object", - "properties": { - "enable": { - "type": "boolean" - }, - "name": { - "type": "string", - "minLength": 1 - }, - "fields": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProviderField" - } - }, - "implementationName": { - "type": "string", - "minLength": 1 - }, - "implementation": { - "type": "string", - "minLength": 1 - }, - "configContract": { - "type": "string", - "minLength": 1 - }, - "infoLink": { - "type": "string", - "minLength": 1 - }, - "tags": { - "type": "array", - "items": { - "type": "integer" - } - }, - "id": { - "type": "integer" - } - }, - "required": [ - "enable", - "name", - "fields", - "implementationName", - "implementation", - "configContract", - "infoLink", - "tags", - "id" - ] - }, - "ImportList": { - "description": "", - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "enableAuto": { - "type": "boolean" - }, - "shouldMonitor": { - "type": "boolean" - }, - "rootFolderPath": { - "type": "string", - "minLength": 1 - }, - "qualityProfileId": { - "type": "number" - }, - "searchOnAdd": { - "type": "boolean" - }, - "minimumAvailability": { - "type": "string", - "minLength": 1 - }, - "listType": { - "type": "string", - "minLength": 1 - }, - "listOrder": { - "type": "number" - }, - "name": { - "type": "string", - "minLength": 1 - }, - "fields": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProviderField" - } - }, - "implementationName": { - "type": "string", - "minLength": 1 - }, - "implementation": { - "type": "string", - "minLength": 1 - }, - "configContract": { - "type": "string", - "minLength": 1 - }, - "infoLink": { - "type": "string", - "minLength": 1 - }, - "tags": { - "type": "array", - "items": { - "type": "integer" - } - }, - "id": { - "type": "integer" - } - }, - "required": [ - "enabled", - "enableAuto", - "shouldMonitor", - "rootFolderPath", - "qualityProfileId", - "searchOnAdd", - "minimumAvailability", - "listType", - "listOrder", - "name", - "fields", - "implementationName", - "implementation", - "configContract", - "infoLink", - "tags", - "id" - ] - }, - "ProviderField": { - "description": "", - "type": "object", - "properties": { - "order": { - "type": "integer" - }, - "name": { - "type": "string", - "minLength": 1 - }, - "label": { - "type": "string", - "minLength": 1 - }, - "helpText": { - "type": "string", - "minLength": 1 - }, - "value": { - "type": "string", - "minLength": 1 - }, - "type": { - "type": "string", - "minLength": 1 - }, - "advanced": { - "type": "boolean" - } - }, - "required": [ - "order", - "name", - "label", - "helpText", - "value", - "type", - "advanced" - ] - }, - "History": { - "description": "", - "type": "object", - "properties": { - "movieId": { - "type": "number" - }, - "sourceTitle": { - "type": "string", - "minLength": 1 - }, - "languages": { - "type": "array", - "uniqueItems": true, - "minItems": 1, - "items": { - "type": "object", - "properties": { - "id": { - "type": "number" - }, - "name": { - "type": "string", - "minLength": 1 - } - }, - "required": [ - "id", - "name" - ] - } - }, - "quality": { - "$ref": "#/components/schemas/Quality" - }, - "customFormats": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CustomFormat" - } - }, - "qualityCutoffNotMet": { - "type": "boolean" - }, - "date": { - "type": "string", - "minLength": 1 - }, - "downloadId": { - "type": "string", - "minLength": 1 - }, - "eventType": { - "type": "string", - "minLength": 1 - }, - "data": { - "type": "object" - }, - "id": { - "type": "number" - } - }, - "required": [ - "movieId", - "sourceTitle", - "languages", - "quality", - "customFormats", - "qualityCutoffNotMet", - "date", - "downloadId", - "eventType", - "data", - "id" - ] - }, - "CustomFormat": { - "description": "", - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "name": { - "type": "string", - "minLength": 1 - }, - "includeCustomFormatWhenRenaming": { - "type": "boolean" - }, - "specifications": { - "type": "array", - "uniqueItems": true, - "minItems": 1, - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "minLength": 1 - }, - "implementation": { - "type": "string", - "minLength": 1 - }, - "implementationName": { - "type": "string", - "minLength": 1 - }, - "infoLink": { - "type": "string", - "minLength": 1 - }, - "negate": { - "type": "boolean" - }, - "required": { - "type": "boolean" - }, - "fields": { - "type": "array", - "uniqueItems": true, - "minItems": 1, - "items": { - "$ref": "#/components/schemas/ProviderField" - } - } - }, - "required": [ - "name", - "implementation", - "implementationName", - "infoLink", - "negate", - "required" - ] - } - } - }, - "required": [ - "id", - "name", - "includeCustomFormatWhenRenaming", - "specifications" - ] - }, - "Quality": { - "description": "", - "type": "object", - "properties": { - "quality": { - "type": "object", - "required": [ - "id", - "name", - "source", - "resolution", - "modifier" - ], - "properties": { - "id": { - "type": "integer" - }, - "name": { - "type": "string", - "minLength": 1 - }, - "source": { - "type": "string", - "minLength": 1 - }, - "resolution": { - "type": "integer" - }, - "modifier": { - "type": "string", - "minLength": 1 - } - } - }, - "revision": { - "type": "object", - "required": [ - "version", - "real", - "isRepack" - ], - "properties": { - "version": { - "type": "integer" - }, - "real": { - "type": "integer" - }, - "isRepack": { - "type": "boolean" - } - } - } - }, - "required": [ - "quality", - "revision" - ] - }, - "QualityProfile": { - "description": "", - "type": "object", - "properties": { - "name": { - "type": "string", - "minLength": 1 - }, - "upgradeAllowed": { - "type": "boolean" - }, - "cutoff": { - "type": "integer" - }, - "items": { - "type": "array", - "items": { - "type": "object" - } - }, - "minFormatScore": { - "type": "integer" - }, - "cutoffFormatScore": { - "type": "integer" - }, - "formatItems": { - "type": "array", - "uniqueItems": true, - "minItems": 1, - "items": { - "type": "object", - "properties": { - "format": { - "type": "integer" - }, - "name": { - "type": "string", - "minLength": 1 - }, - "score": { - "type": "integer" - } - }, - "required": [ - "format", - "name", - "score" - ] - } - }, - "language": { - "type": "object", - "required": [ - "id", - "name" - ], - "properties": { - "id": { - "type": "integer" - }, - "name": { - "type": "string", - "minLength": 1 - } - } - }, - "id": { - "type": "integer" - } - }, - "required": [ - "name", - "upgradeAllowed", - "cutoff", - "items", - "minFormatScore", - "cutoffFormatScore", - "formatItems", - "language", - "id" - ] - }, - "Blocklist": { - "description": "", - "type": "object", - "properties": { - "movieId": { - "type": "number" - }, - "sourceTitle": { - "type": "string", - "minLength": 1 - }, - "languages": { - "type": "array", - "uniqueItems": true, - "minItems": 1, - "items": { - "type": "object", - "properties": { - "id": { - "type": "number" - }, - "name": { - "type": "string", - "minLength": 1 - } - }, - "required": [ - "id", - "name" - ] - } - }, - "quality": { - "$ref": "#/components/schemas/Quality" - }, - "customFormats": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CustomFormat" - } - }, - "date": { - "type": "string", - "minLength": 1 - }, - "protocol": { - "type": "string", - "minLength": 1 - }, - "indexer": { - "type": "string", - "minLength": 1 - }, - "message": { - "type": "string", - "minLength": 1 - }, - "id": { - "type": "number" - } - }, - "required": [ - "movieId", - "sourceTitle", - "languages", - "quality", - "customFormats", - "date", - "protocol", - "indexer", - "message", - "id" - ] - }, - "MovieFile": { - "description": "", - "type": "object", - "title": "", - "properties": { - "movieId": { - "type": "integer" - }, - "relativePath": { - "type": "string", - "minLength": 1 - }, - "path": { - "type": "string", - "minLength": 1 - }, - "size": { - "type": "number" - }, - "dateAdded": { - "type": "string", - "minLength": 1 - }, - "indexerFlags": { - "type": "integer" - }, - "quality": { - "$ref": "#/components/schemas/Quality" - }, - "mediaInfo": { - "type": "object", - "required": [ - "audioAdditionalFeatures", - "audioBitrate", - "audioChannels", - "audioCodec", - "audioLanguages", - "audioStreamCount", - "videoBitDepth", - "videoBitrate", - "videoCodec", - "videoFps", - "resolution", - "runTime", - "scanType", - "subtitles" - ], - "properties": { - "audioAdditionalFeatures": { - "type": "string" - }, - "audioBitrate": { - "type": "number" - }, - "audioChannels": { - "type": "number" - }, - "audioCodec": { - "type": "string", - "minLength": 1 - }, - "audioLanguages": { - "type": "string" - }, - "audioStreamCount": { - "type": "number" - }, - "videoBitDepth": { - "type": "number" - }, - "videoBitrate": { - "type": "number" - }, - "videoCodec": { - "type": "string", - "minLength": 1 - }, - "videoFps": { - "type": "number" - }, - "resolution": { - "type": "string", - "minLength": 1 - }, - "runTime": { - "type": "string", - "minLength": 1 - }, - "scanType": { - "type": "string", - "minLength": 1 - }, - "subtitles": { - "type": "string" - } - } - }, - "qualityCutoffNotMet": { - "type": "boolean" - }, - "languages": { - "type": "array", - "uniqueItems": true, - "minItems": 1, - "items": { - "type": "object", - "properties": { - "id": { - "type": "number" - }, - "name": { - "type": "string", - "minLength": 1 - } - }, - "required": [ - "id", - "name" - ] - } - }, - "releaseGroup": { - "type": "string", - "minLength": 1 - }, - "id": { - "type": "integer" - } - }, - "required": [ - "movieId", - "relativePath", - "path", - "size", - "dateAdded", - "indexerFlags", - "quality", - "mediaInfo", - "qualityCutoffNotMet", - "languages", - "releaseGroup", - "id" - ] - } - }, - "securitySchemes": { - "X-API-Key": { - "type": "http", - "scheme": "basic", - "description": "Used when not providing the key via URL" - }, - "apikey": { - "name": "apikey", - "type": "apiKey", - "in": "query", - "description": "Used when not providing the key via header" - } - } - }, - "tags": [ - { - "name": "Movie" - }, - { - "name": "MovieFile" - }, - { - "name": "History" - }, - { - "name": "Blocklist" - }, - { - "name": "Queue" - }, - { - "name": "Indexer" - }, - { - "name": "Download Client" - }, - { - "name": "Import Lists" - }, - { - "name": "Notification" - }, - { - "name": "Tag" - }, - { - "name": "Disk Space" - }, - { - "name": "Settings" - }, - { - "name": "Metadata" - }, - { - "name": "System" - } - ] -}