From 18f77a967b128d31a9f6ec56715cb604e4474256 Mon Sep 17 00:00:00 2001 From: Qstick Date: Sat, 16 Jul 2022 18:18:48 -0500 Subject: [PATCH] New: API Docs --- .gitignore | 3 + src/NzbDrone.Host/Sonarr.Host.csproj | 1 + src/NzbDrone.Host/Startup.cs | 77 + .../Blocklist/BlocklistController.cs | 2 + .../Calendar/CalendarController.cs | 1 + .../Commands/CommandController.cs | 3 + src/Sonarr.Api.V3/Config/ConfigController.cs | 2 + .../CustomFilters/CustomFilterController.cs | 3 + .../CustomFormats/CustomFormatController.cs | 3 + .../DiskSpace/DiskSpaceController.cs | 1 + .../EpisodeFiles/EpisodeFileController.cs | 5 + .../Episodes/EpisodeController.cs | 3 + .../Episodes/RenameEpisodeController.cs | 1 + .../FileSystem/FileSystemController.cs | 3 + src/Sonarr.Api.V3/Health/HealthController.cs | 1 + .../History/HistoryController.cs | 3 + .../ImportListExclusionController.cs | 3 + .../Indexers/ReleaseController.cs | 2 + .../Indexers/ReleasePushController.cs | 1 + src/Sonarr.Api.V3/Logs/LogController.cs | 1 + .../Logs/LogFileControllerBase.cs | 2 + .../ManualImport/ManualImportController.cs | 2 + src/Sonarr.Api.V3/Parse/ParseController.cs | 1 + .../Profiles/Delay/DelayProfileController.cs | 3 + .../Language/LanguageProfileController.cs | 3 + .../LanguageProfileSchemaController.cs | 1 + .../Quality/QualityProfileController.cs | 3 + src/Sonarr.Api.V3/ProviderControllerBase.cs | 6 + .../Qualities/QualityDefinitionController.cs | 1 + .../Queue/QueueActionController.cs | 1 + src/Sonarr.Api.V3/Queue/QueueController.cs | 1 + .../Queue/QueueDetailsController.cs | 1 + .../Queue/QueueStatusController.cs | 1 + .../RemotePathMappingController.cs | 2 + .../RootFolders/RootFolderController.cs | 2 + .../SeasonPass/SeasonPassController.cs | 1 + src/Sonarr.Api.V3/Series/SeriesController.cs | 3 + src/Sonarr.Api.V3/System/SystemController.cs | 3 + src/Sonarr.Api.V3/Tags/TagController.cs | 3 + .../Tags/TagDetailsController.cs | 1 + src/Sonarr.Api.V3/Update/UpdateController.cs | 1 + src/Sonarr.Api.V3/Wanted/CutoffController.cs | 1 + src/Sonarr.Api.V3/Wanted/MissingController.cs | 1 + src/Sonarr.Api.V3/openapi.json | 10641 ++++++++++++++++ src/Sonarr.Http/REST/RestController.cs | 1 + 45 files changed, 10805 insertions(+) create mode 100644 src/Sonarr.Api.V3/openapi.json diff --git a/.gitignore b/.gitignore index f6462057b..a46ab698d 100644 --- a/.gitignore +++ b/.gitignore @@ -160,3 +160,6 @@ Thumbs.db src/.idea/ /distribution/windows/setup/output/* + +# API doc generation +.config/ diff --git a/src/NzbDrone.Host/Sonarr.Host.csproj b/src/NzbDrone.Host/Sonarr.Host.csproj index 0e5540d5d..006777fc7 100644 --- a/src/NzbDrone.Host/Sonarr.Host.csproj +++ b/src/NzbDrone.Host/Sonarr.Host.csproj @@ -6,6 +6,7 @@ + diff --git a/src/NzbDrone.Host/Startup.cs b/src/NzbDrone.Host/Startup.cs index 6bd4baa99..6377d8dae 100644 --- a/src/NzbDrone.Host/Startup.cs +++ b/src/NzbDrone.Host/Startup.cs @@ -9,6 +9,7 @@ using Microsoft.AspNetCore.HttpOverrides; 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; @@ -91,6 +92,73 @@ namespace NzbDrone.Host }) .AddControllersAsServices(); + services.AddSwaggerGen(c => + { + c.SwaggerDoc("v3", new OpenApiInfo + { + Version = "3.0.0", + Title = "Sonarr", + Description = "Sonarr API docs", + License = new OpenApiLicense + { + Name = "GPL-3.0", + Url = new Uri("https://github.com/Sonarr/Sonarr/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:8989" } } + } + }); + + c.AddSecurityDefinition("apikey", apikeyQuery); + + c.AddSecurityRequirement(new OpenApiSecurityRequirement + { + { apikeyQuery, new string[] { } } + }); + }); + services .AddSignalR() .AddJsonProtocol(options => @@ -184,6 +252,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/Sonarr.Api.V3/Blocklist/BlocklistController.cs b/src/Sonarr.Api.V3/Blocklist/BlocklistController.cs index c3c29b916..b5c9392b8 100644 --- a/src/Sonarr.Api.V3/Blocklist/BlocklistController.cs +++ b/src/Sonarr.Api.V3/Blocklist/BlocklistController.cs @@ -22,6 +22,7 @@ namespace Sonarr.Api.V3.Blocklist } [HttpGet] + [Produces("application/json")] public PagingResource GetBlocklist() { var pagingResource = Request.ReadPagingResourceFromRequest(); @@ -37,6 +38,7 @@ namespace Sonarr.Api.V3.Blocklist } [HttpDelete("bulk")] + [Produces("application/json")] public object Remove([FromBody] BlocklistBulkResource resource) { _blocklistService.Delete(resource.Ids); diff --git a/src/Sonarr.Api.V3/Calendar/CalendarController.cs b/src/Sonarr.Api.V3/Calendar/CalendarController.cs index 988a1d8df..ce74a1eac 100644 --- a/src/Sonarr.Api.V3/Calendar/CalendarController.cs +++ b/src/Sonarr.Api.V3/Calendar/CalendarController.cs @@ -22,6 +22,7 @@ namespace Sonarr.Api.V3.Calendar } [HttpGet] + [Produces("application/json")] public List GetCalendar(DateTime? start, DateTime? end, bool unmonitored = false, bool includeSeries = false, bool includeEpisodeFile = false, bool includeEpisodeImages = false) { var startUse = start ?? DateTime.Today; diff --git a/src/Sonarr.Api.V3/Commands/CommandController.cs b/src/Sonarr.Api.V3/Commands/CommandController.cs index 5112162f5..1ced38e51 100644 --- a/src/Sonarr.Api.V3/Commands/CommandController.cs +++ b/src/Sonarr.Api.V3/Commands/CommandController.cs @@ -49,6 +49,8 @@ namespace Sonarr.Api.V3.Commands } [RestPostById] + [Consumes("application/json")] + [Produces("application/json")] public ActionResult StartCommand(CommandResource commandResource) { var commandType = @@ -74,6 +76,7 @@ namespace Sonarr.Api.V3.Commands } [HttpGet] + [Produces("application/json")] public List GetStartedCommands() { return _commandQueueManager.All() diff --git a/src/Sonarr.Api.V3/Config/ConfigController.cs b/src/Sonarr.Api.V3/Config/ConfigController.cs index db4b941f4..9d170e720 100644 --- a/src/Sonarr.Api.V3/Config/ConfigController.cs +++ b/src/Sonarr.Api.V3/Config/ConfigController.cs @@ -23,6 +23,7 @@ namespace Sonarr.Api.V3.Config } [HttpGet] + [Produces("application/json")] public TResource GetConfig() { var resource = ToResource(_configService); @@ -32,6 +33,7 @@ namespace Sonarr.Api.V3.Config } [RestPutById] + [Consumes("application/json")] public virtual ActionResult SaveConfig(TResource resource) { var dictionary = resource.GetType() diff --git a/src/Sonarr.Api.V3/CustomFilters/CustomFilterController.cs b/src/Sonarr.Api.V3/CustomFilters/CustomFilterController.cs index 59bf82174..51f46d100 100644 --- a/src/Sonarr.Api.V3/CustomFilters/CustomFilterController.cs +++ b/src/Sonarr.Api.V3/CustomFilters/CustomFilterController.cs @@ -23,12 +23,14 @@ namespace Sonarr.Api.V3.CustomFilters } [HttpGet] + [Produces("application/json")] public List GetCustomFilters() { return _customFilterService.All().ToResource(); } [RestPostById] + [Consumes("application/json")] public ActionResult AddCustomFilter(CustomFilterResource resource) { var customFilter = _customFilterService.Add(resource.ToModel()); @@ -37,6 +39,7 @@ namespace Sonarr.Api.V3.CustomFilters } [RestPutById] + [Consumes("application/json")] public ActionResult UpdateCustomFilter(CustomFilterResource resource) { _customFilterService.Update(resource.ToModel()); diff --git a/src/Sonarr.Api.V3/CustomFormats/CustomFormatController.cs b/src/Sonarr.Api.V3/CustomFormats/CustomFormatController.cs index eda1e1ccc..bc86a65dc 100644 --- a/src/Sonarr.Api.V3/CustomFormats/CustomFormatController.cs +++ b/src/Sonarr.Api.V3/CustomFormats/CustomFormatController.cs @@ -48,6 +48,7 @@ namespace Sonarr.Api.V3.CustomFormats } [RestPostById] + [Consumes("application/json")] public ActionResult Create(CustomFormatResource customFormatResource) { var model = customFormatResource.ToModel(_specifications); @@ -55,6 +56,7 @@ namespace Sonarr.Api.V3.CustomFormats } [RestPutById] + [Consumes("application/json")] public ActionResult Update(CustomFormatResource resource) { var model = resource.ToModel(_specifications); @@ -64,6 +66,7 @@ namespace Sonarr.Api.V3.CustomFormats } [HttpGet] + [Produces("application/json")] public List GetAll() { return _formatService.All().ToResource(); diff --git a/src/Sonarr.Api.V3/DiskSpace/DiskSpaceController.cs b/src/Sonarr.Api.V3/DiskSpace/DiskSpaceController.cs index 44ce2dd8e..449bb6f0d 100644 --- a/src/Sonarr.Api.V3/DiskSpace/DiskSpaceController.cs +++ b/src/Sonarr.Api.V3/DiskSpace/DiskSpaceController.cs @@ -16,6 +16,7 @@ namespace Sonarr.Api.V3.DiskSpace } [HttpGet] + [Produces("application/json")] public List GetFreeSpace() { return _diskSpaceService.GetFreeSpace().ConvertAll(DiskSpaceResourceMapper.MapToResource); diff --git a/src/Sonarr.Api.V3/EpisodeFiles/EpisodeFileController.cs b/src/Sonarr.Api.V3/EpisodeFiles/EpisodeFileController.cs index ac4a121c6..92b4482ae 100644 --- a/src/Sonarr.Api.V3/EpisodeFiles/EpisodeFileController.cs +++ b/src/Sonarr.Api.V3/EpisodeFiles/EpisodeFileController.cs @@ -58,6 +58,7 @@ namespace Sonarr.Api.V3.EpisodeFiles } [HttpGet] + [Produces("application/json")] public List GetEpisodeFiles(int? seriesId, [FromQuery] List episodeFileIds) { if (!seriesId.HasValue && !episodeFileIds.Any()) @@ -101,6 +102,7 @@ namespace Sonarr.Api.V3.EpisodeFiles } [RestPutById] + [Consumes("application/json")] public ActionResult SetQuality(EpisodeFileResource episodeFileResource) { var episodeFile = _mediaFileService.Get(episodeFileResource.Id); @@ -121,6 +123,7 @@ namespace Sonarr.Api.V3.EpisodeFiles } [HttpPut("editor")] + [Consumes("application/json")] public object SetQuality([FromBody] EpisodeFileListResource resource) { var episodeFiles = _mediaFileService.GetFiles(resource.EpisodeFileIds); @@ -171,6 +174,7 @@ namespace Sonarr.Api.V3.EpisodeFiles } [HttpDelete("bulk")] + [Consumes("application/json")] public object DeleteEpisodeFiles([FromBody] EpisodeFileListResource resource) { var episodeFiles = _mediaFileService.GetFiles(resource.EpisodeFileIds); @@ -185,6 +189,7 @@ namespace Sonarr.Api.V3.EpisodeFiles } [HttpPut("bulk")] + [Consumes("application/json")] public object SetPropertiesBulk([FromBody] List resources) { var episodeFiles = _mediaFileService.GetFiles(resources.Select(r => r.Id)); diff --git a/src/Sonarr.Api.V3/Episodes/EpisodeController.cs b/src/Sonarr.Api.V3/Episodes/EpisodeController.cs index cc13a34b6..19b542638 100644 --- a/src/Sonarr.Api.V3/Episodes/EpisodeController.cs +++ b/src/Sonarr.Api.V3/Episodes/EpisodeController.cs @@ -23,6 +23,7 @@ namespace Sonarr.Api.V3.Episodes } [HttpGet] + [Produces("application/json")] public List GetEpisodes(int? seriesId, int? seasonNumber, [FromQuery]List episodeIds, int? episodeFileId, bool includeImages = false) { if (seriesId.HasValue) @@ -47,6 +48,7 @@ namespace Sonarr.Api.V3.Episodes } [HttpPut("{id}")] + [Consumes("application/json")] public IActionResult SetEpisodeMonitored([FromBody] EpisodeResource resource, [FromRoute] int id) { _episodeService.SetEpisodeMonitored(id, resource.Monitored); @@ -57,6 +59,7 @@ namespace Sonarr.Api.V3.Episodes } [HttpPut("monitor")] + [Consumes("application/json")] public IActionResult SetEpisodesMonitored([FromBody] EpisodesMonitoredResource resource) { var includeImages = Request.GetBooleanQueryParameter("includeImages", false); diff --git a/src/Sonarr.Api.V3/Episodes/RenameEpisodeController.cs b/src/Sonarr.Api.V3/Episodes/RenameEpisodeController.cs index 2195aaa8f..b729be666 100644 --- a/src/Sonarr.Api.V3/Episodes/RenameEpisodeController.cs +++ b/src/Sonarr.Api.V3/Episodes/RenameEpisodeController.cs @@ -16,6 +16,7 @@ namespace Sonarr.Api.V3.Episodes } [HttpGet] + [Produces("application/json")] public List GetEpisodes(int seriesId, int? seasonNumber) { if (seasonNumber.HasValue) diff --git a/src/Sonarr.Api.V3/FileSystem/FileSystemController.cs b/src/Sonarr.Api.V3/FileSystem/FileSystemController.cs index 9fdf5847f..d7c68dfba 100644 --- a/src/Sonarr.Api.V3/FileSystem/FileSystemController.cs +++ b/src/Sonarr.Api.V3/FileSystem/FileSystemController.cs @@ -26,12 +26,14 @@ namespace Sonarr.Api.V3.FileSystem } [HttpGet] + [Produces("application/json")] public IActionResult GetContents(string path, bool includeFiles = false, bool allowFoldersWithoutTrailingSlashes = false) { return Ok(_fileSystemLookupService.LookupContents(path, includeFiles, allowFoldersWithoutTrailingSlashes)); } [HttpGet("type")] + [Produces("application/json")] public object GetEntityType(string path) { if (_diskProvider.FileExists(path)) @@ -44,6 +46,7 @@ namespace Sonarr.Api.V3.FileSystem } [HttpGet("mediafiles")] + [Produces("application/json")] public object GetMediaFiles(string path) { if (!_diskProvider.FolderExists(path)) diff --git a/src/Sonarr.Api.V3/Health/HealthController.cs b/src/Sonarr.Api.V3/Health/HealthController.cs index d3400d05f..4c6007f72 100644 --- a/src/Sonarr.Api.V3/Health/HealthController.cs +++ b/src/Sonarr.Api.V3/Health/HealthController.cs @@ -28,6 +28,7 @@ namespace Sonarr.Api.V3.Health } [HttpGet] + [Produces("application/json")] public List GetHealth() { return _healthCheckService.Results().ToResource(); diff --git a/src/Sonarr.Api.V3/History/HistoryController.cs b/src/Sonarr.Api.V3/History/HistoryController.cs index e43bef339..66244ed47 100644 --- a/src/Sonarr.Api.V3/History/HistoryController.cs +++ b/src/Sonarr.Api.V3/History/HistoryController.cs @@ -57,6 +57,7 @@ namespace Sonarr.Api.V3.History } [HttpGet] + [Produces("application/json")] public PagingResource GetHistory(bool includeSeries, bool includeEpisode) { var pagingResource = Request.ReadPagingResourceFromRequest(); @@ -88,12 +89,14 @@ namespace Sonarr.Api.V3.History } [HttpGet("since")] + [Produces("application/json")] public List GetHistorySince(DateTime date, EpisodeHistoryEventType? eventType = null, bool includeSeries = false, bool includeEpisode = false) { return _historyService.Since(date, eventType).Select(h => MapToResource(h, includeSeries, includeEpisode)).ToList(); } [HttpGet("series")] + [Produces("application/json")] public List GetSeriesHistory(int seriesId, int? seasonNumber, EpisodeHistoryEventType? eventType = null, bool includeSeries = false, bool includeEpisode = false) { if (seasonNumber.HasValue) diff --git a/src/Sonarr.Api.V3/ImportLists/ImportListExclusionController.cs b/src/Sonarr.Api.V3/ImportLists/ImportListExclusionController.cs index e4e483b6e..6d0eb8db1 100644 --- a/src/Sonarr.Api.V3/ImportLists/ImportListExclusionController.cs +++ b/src/Sonarr.Api.V3/ImportLists/ImportListExclusionController.cs @@ -29,12 +29,14 @@ namespace Sonarr.Api.V3.ImportLists } [HttpGet] + [Produces("application/json")] public List GetImportListExclusions() { return _importListExclusionService.All().ToResource(); } [RestPostById] + [Consumes("application/json")] public ActionResult AddImportListExclusion(ImportListExclusionResource resource) { var importListExclusion = _importListExclusionService.Add(resource.ToModel()); @@ -43,6 +45,7 @@ namespace Sonarr.Api.V3.ImportLists } [RestPutById] + [Consumes("application/json")] public ActionResult UpdateImportListExclusion(ImportListExclusionResource resource) { _importListExclusionService.Update(resource.ToModel()); diff --git a/src/Sonarr.Api.V3/Indexers/ReleaseController.cs b/src/Sonarr.Api.V3/Indexers/ReleaseController.cs index 43783ad21..324493908 100644 --- a/src/Sonarr.Api.V3/Indexers/ReleaseController.cs +++ b/src/Sonarr.Api.V3/Indexers/ReleaseController.cs @@ -67,6 +67,7 @@ namespace Sonarr.Api.V3.Indexers } [HttpPost] + [Consumes("application/json")] public object DownloadRelease(ReleaseResource release) { var remoteEpisode = _remoteEpisodeCache.Find(GetCacheKey(release)); @@ -138,6 +139,7 @@ namespace Sonarr.Api.V3.Indexers } [HttpGet] + [Produces("application/json")] public List GetReleases(int? seriesId, int? episodeId, int? seasonNumber) { if (episodeId.HasValue) diff --git a/src/Sonarr.Api.V3/Indexers/ReleasePushController.cs b/src/Sonarr.Api.V3/Indexers/ReleasePushController.cs index cdd10959a..cfe629275 100644 --- a/src/Sonarr.Api.V3/Indexers/ReleasePushController.cs +++ b/src/Sonarr.Api.V3/Indexers/ReleasePushController.cs @@ -44,6 +44,7 @@ namespace Sonarr.Api.V3.Indexers } [HttpPost] + [Consumes("application/json")] public ActionResult> Create(ReleaseResource release) { _logger.Info("Release pushed: {0} - {1}", release.Title, release.DownloadUrl); diff --git a/src/Sonarr.Api.V3/Logs/LogController.cs b/src/Sonarr.Api.V3/Logs/LogController.cs index 6398bf070..3350bcce3 100644 --- a/src/Sonarr.Api.V3/Logs/LogController.cs +++ b/src/Sonarr.Api.V3/Logs/LogController.cs @@ -17,6 +17,7 @@ namespace Sonarr.Api.V3.Logs } [HttpGet] + [Produces("application/json")] public PagingResource GetLogs() { var pagingResource = Request.ReadPagingResourceFromRequest(); diff --git a/src/Sonarr.Api.V3/Logs/LogFileControllerBase.cs b/src/Sonarr.Api.V3/Logs/LogFileControllerBase.cs index 915c11dfe..d305174db 100644 --- a/src/Sonarr.Api.V3/Logs/LogFileControllerBase.cs +++ b/src/Sonarr.Api.V3/Logs/LogFileControllerBase.cs @@ -26,6 +26,7 @@ namespace Sonarr.Api.V3.Logs } [HttpGet] + [Produces("application/json")] public List GetLogFilesResponse() { var result = new List(); @@ -51,6 +52,7 @@ namespace Sonarr.Api.V3.Logs } [HttpGet(@"{filename:regex([[-.a-zA-Z0-9]]+?\.txt)}")] + [Produces("text/plain")] public IActionResult GetLogFileResponse(string filename) { LogManager.Flush(); diff --git a/src/Sonarr.Api.V3/ManualImport/ManualImportController.cs b/src/Sonarr.Api.V3/ManualImport/ManualImportController.cs index da89be25e..bf14cb4b4 100644 --- a/src/Sonarr.Api.V3/ManualImport/ManualImportController.cs +++ b/src/Sonarr.Api.V3/ManualImport/ManualImportController.cs @@ -21,6 +21,7 @@ namespace Sonarr.Api.V3.ManualImport } [HttpGet] + [Produces("application/json")] public List GetMediaFiles(string folder, string downloadId, int? seriesId, int? seasonNumber, bool filterExistingFiles = true) { if (seriesId.HasValue) @@ -32,6 +33,7 @@ namespace Sonarr.Api.V3.ManualImport } [HttpPost] + [Consumes("application/json")] public object ReprocessItems([FromBody] List items) { foreach (var item in items) diff --git a/src/Sonarr.Api.V3/Parse/ParseController.cs b/src/Sonarr.Api.V3/Parse/ParseController.cs index 2683d49e0..8edc5feb9 100644 --- a/src/Sonarr.Api.V3/Parse/ParseController.cs +++ b/src/Sonarr.Api.V3/Parse/ParseController.cs @@ -18,6 +18,7 @@ namespace Sonarr.Api.V3.Parse } [HttpGet] + [Produces("application/json")] public ParseResource Parse(string title, string path) { if (title.IsNullOrWhiteSpace()) diff --git a/src/Sonarr.Api.V3/Profiles/Delay/DelayProfileController.cs b/src/Sonarr.Api.V3/Profiles/Delay/DelayProfileController.cs index efa003868..03b357d62 100644 --- a/src/Sonarr.Api.V3/Profiles/Delay/DelayProfileController.cs +++ b/src/Sonarr.Api.V3/Profiles/Delay/DelayProfileController.cs @@ -34,6 +34,7 @@ namespace Sonarr.Api.V3.Profiles.Delay } [RestPostById] + [Consumes("application/json")] public ActionResult Create(DelayProfileResource resource) { var model = resource.ToModel(); @@ -54,6 +55,7 @@ namespace Sonarr.Api.V3.Profiles.Delay } [RestPutById] + [Consumes("application/json")] public ActionResult Update(DelayProfileResource resource) { var model = resource.ToModel(); @@ -67,6 +69,7 @@ namespace Sonarr.Api.V3.Profiles.Delay } [HttpGet] + [Produces("application/json")] public List GetAll() { return _delayProfileService.All().ToResource(); diff --git a/src/Sonarr.Api.V3/Profiles/Language/LanguageProfileController.cs b/src/Sonarr.Api.V3/Profiles/Language/LanguageProfileController.cs index ed031e216..2bdb91478 100644 --- a/src/Sonarr.Api.V3/Profiles/Language/LanguageProfileController.cs +++ b/src/Sonarr.Api.V3/Profiles/Language/LanguageProfileController.cs @@ -24,6 +24,7 @@ namespace Sonarr.Api.V3.Profiles.Language } [RestPostById] + [Consumes("application/json")] public ActionResult Create(LanguageProfileResource resource) { var model = resource.ToModel(); @@ -38,6 +39,7 @@ namespace Sonarr.Api.V3.Profiles.Language } [RestPutById] + [Consumes("application/json")] public ActionResult Update(LanguageProfileResource resource) { var model = resource.ToModel(); @@ -53,6 +55,7 @@ namespace Sonarr.Api.V3.Profiles.Language } [HttpGet] + [Produces("application/json")] public List GetAll() { return _profileService.All().ToResource(); diff --git a/src/Sonarr.Api.V3/Profiles/Language/LanguageProfileSchemaController.cs b/src/Sonarr.Api.V3/Profiles/Language/LanguageProfileSchemaController.cs index fabb7696a..e0631df72 100644 --- a/src/Sonarr.Api.V3/Profiles/Language/LanguageProfileSchemaController.cs +++ b/src/Sonarr.Api.V3/Profiles/Language/LanguageProfileSchemaController.cs @@ -15,6 +15,7 @@ namespace Sonarr.Api.V3.Profiles.Language } [HttpGet] + [Produces("application/json")] public LanguageProfileResource GetSchema() { var qualityProfile = _profileService.GetDefaultProfile(string.Empty); diff --git a/src/Sonarr.Api.V3/Profiles/Quality/QualityProfileController.cs b/src/Sonarr.Api.V3/Profiles/Quality/QualityProfileController.cs index 18dae403e..d7c24fcf9 100644 --- a/src/Sonarr.Api.V3/Profiles/Quality/QualityProfileController.cs +++ b/src/Sonarr.Api.V3/Profiles/Quality/QualityProfileController.cs @@ -43,6 +43,7 @@ namespace Sonarr.Api.V3.Profiles.Quality } [RestPostById] + [Consumes("application/json")] public ActionResult Create(QualityProfileResource resource) { var model = resource.ToModel(); @@ -57,6 +58,7 @@ namespace Sonarr.Api.V3.Profiles.Quality } [RestPutById] + [Consumes("application/json")] public ActionResult Update(QualityProfileResource resource) { var model = resource.ToModel(); @@ -72,6 +74,7 @@ namespace Sonarr.Api.V3.Profiles.Quality } [HttpGet] + [Produces("application/json")] public List GetAll() { return _profileService.All().ToResource(); diff --git a/src/Sonarr.Api.V3/ProviderControllerBase.cs b/src/Sonarr.Api.V3/ProviderControllerBase.cs index ccc68418d..48ac2a8fd 100644 --- a/src/Sonarr.Api.V3/ProviderControllerBase.cs +++ b/src/Sonarr.Api.V3/ProviderControllerBase.cs @@ -42,6 +42,7 @@ namespace Sonarr.Api.V3 } [HttpGet] + [Produces("application/json")] public List GetAll() { var providerDefinitions = _providerFactory.All().OrderBy(p => p.ImplementationName); @@ -59,6 +60,7 @@ namespace Sonarr.Api.V3 } [RestPostById] + [Consumes("application/json")] public ActionResult CreateProvider(TProviderResource providerResource) { var providerDefinition = GetDefinition(providerResource, true, false, false); @@ -74,6 +76,7 @@ namespace Sonarr.Api.V3 } [RestPutById] + [Consumes("application/json")] public ActionResult UpdateProvider(TProviderResource providerResource) { var providerDefinition = GetDefinition(providerResource, true, false, false); @@ -112,6 +115,7 @@ namespace Sonarr.Api.V3 } [HttpGet("schema")] + [Produces("application/json")] public List GetTemplates() { var defaultDefinitions = _providerFactory.GetDefaultDefinitions().OrderBy(p => p.ImplementationName).ToList(); @@ -135,6 +139,7 @@ namespace Sonarr.Api.V3 [SkipValidation(true, false)] [HttpPost("test")] + [Consumes("application/json")] public object Test([FromBody] TProviderResource providerResource) { var providerDefinition = GetDefinition(providerResource, true, true, true); @@ -171,6 +176,7 @@ namespace Sonarr.Api.V3 [SkipValidation] [HttpPost("action/{name}")] + [Consumes("application/json")] public IActionResult RequestAction(string name, [FromBody] TProviderResource resource) { var providerDefinition = GetDefinition(resource, false, false, false); diff --git a/src/Sonarr.Api.V3/Qualities/QualityDefinitionController.cs b/src/Sonarr.Api.V3/Qualities/QualityDefinitionController.cs index fc10f2860..5742c42e9 100644 --- a/src/Sonarr.Api.V3/Qualities/QualityDefinitionController.cs +++ b/src/Sonarr.Api.V3/Qualities/QualityDefinitionController.cs @@ -55,6 +55,7 @@ namespace Sonarr.Api.V3.Qualities .ToResource()); } + [NonAction] public void Handle(CommandExecutedEvent message) { if (message.Command.Name == "ResetQualityDefinitions") diff --git a/src/Sonarr.Api.V3/Queue/QueueActionController.cs b/src/Sonarr.Api.V3/Queue/QueueActionController.cs index 849fc2b39..8321df02c 100644 --- a/src/Sonarr.Api.V3/Queue/QueueActionController.cs +++ b/src/Sonarr.Api.V3/Queue/QueueActionController.cs @@ -35,6 +35,7 @@ namespace Sonarr.Api.V3.Queue } [HttpPost("grab/bulk")] + [Consumes("application/json")] public object Grab([FromBody] QueueBulkResource resource) { foreach (var id in resource.Ids) diff --git a/src/Sonarr.Api.V3/Queue/QueueController.cs b/src/Sonarr.Api.V3/Queue/QueueController.cs index 072d82292..643f202c3 100644 --- a/src/Sonarr.Api.V3/Queue/QueueController.cs +++ b/src/Sonarr.Api.V3/Queue/QueueController.cs @@ -99,6 +99,7 @@ namespace Sonarr.Api.V3.Queue } [HttpGet] + [Produces("application/json")] public PagingResource GetQueue(bool includeUnknownSeriesItems = false, bool includeSeries = false, bool includeEpisode = false) { var pagingResource = Request.ReadPagingResourceFromRequest(); diff --git a/src/Sonarr.Api.V3/Queue/QueueDetailsController.cs b/src/Sonarr.Api.V3/Queue/QueueDetailsController.cs index 5d478cc25..ed62a277e 100644 --- a/src/Sonarr.Api.V3/Queue/QueueDetailsController.cs +++ b/src/Sonarr.Api.V3/Queue/QueueDetailsController.cs @@ -32,6 +32,7 @@ namespace Sonarr.Api.V3.Queue } [HttpGet] + [Produces("application/json")] public List GetQueue(int? seriesId, [FromQuery]List episodeIds, bool includeSeries = false, bool includeEpisode = false) { var queue = _queueService.GetQueue(); diff --git a/src/Sonarr.Api.V3/Queue/QueueStatusController.cs b/src/Sonarr.Api.V3/Queue/QueueStatusController.cs index 90bee4e6a..39d04f1d3 100644 --- a/src/Sonarr.Api.V3/Queue/QueueStatusController.cs +++ b/src/Sonarr.Api.V3/Queue/QueueStatusController.cs @@ -36,6 +36,7 @@ namespace Sonarr.Api.V3.Queue } [HttpGet] + [Produces("application/json")] public QueueStatusResource GetQueueStatus() { _broadcastDebounce.Pause(); diff --git a/src/Sonarr.Api.V3/RemotePathMappings/RemotePathMappingController.cs b/src/Sonarr.Api.V3/RemotePathMappings/RemotePathMappingController.cs index 6f5011f0d..c08a4eb6c 100644 --- a/src/Sonarr.Api.V3/RemotePathMappings/RemotePathMappingController.cs +++ b/src/Sonarr.Api.V3/RemotePathMappings/RemotePathMappingController.cs @@ -40,6 +40,7 @@ namespace Sonarr.Api.V3.RemotePathMappings } [RestPostById] + [Consumes("application/json")] public ActionResult CreateMapping(RemotePathMappingResource resource) { var model = resource.ToModel(); @@ -48,6 +49,7 @@ namespace Sonarr.Api.V3.RemotePathMappings } [HttpGet] + [Produces("application/json")] public List GetMappings() { return _remotePathMappingService.All().ToResource(); diff --git a/src/Sonarr.Api.V3/RootFolders/RootFolderController.cs b/src/Sonarr.Api.V3/RootFolders/RootFolderController.cs index 1ebb80a7c..701d79fa0 100644 --- a/src/Sonarr.Api.V3/RootFolders/RootFolderController.cs +++ b/src/Sonarr.Api.V3/RootFolders/RootFolderController.cs @@ -49,6 +49,7 @@ namespace Sonarr.Api.V3.RootFolders } [RestPostById] + [Consumes("application/json")] public ActionResult CreateRootFolder(RootFolderResource rootFolderResource) { var model = rootFolderResource.ToModel(); @@ -57,6 +58,7 @@ namespace Sonarr.Api.V3.RootFolders } [HttpGet] + [Produces("application/json")] public List GetRootFolders() { return _rootFolderService.AllWithUnmappedFolders().ToResource(); diff --git a/src/Sonarr.Api.V3/SeasonPass/SeasonPassController.cs b/src/Sonarr.Api.V3/SeasonPass/SeasonPassController.cs index 42e91bd60..f152c76b2 100644 --- a/src/Sonarr.Api.V3/SeasonPass/SeasonPassController.cs +++ b/src/Sonarr.Api.V3/SeasonPass/SeasonPassController.cs @@ -18,6 +18,7 @@ namespace Sonarr.Api.V3.SeasonPass } [HttpPost] + [Consumes("application/json")] public IActionResult UpdateAll(SeasonPassResource resource) { var seriesToUpdate = _seriesService.GetSeries(resource.Series.Select(s => s.Id)); diff --git a/src/Sonarr.Api.V3/Series/SeriesController.cs b/src/Sonarr.Api.V3/Series/SeriesController.cs index e4982540a..efd8903c5 100644 --- a/src/Sonarr.Api.V3/Series/SeriesController.cs +++ b/src/Sonarr.Api.V3/Series/SeriesController.cs @@ -98,6 +98,7 @@ namespace Sonarr.Api.V3.Series } [HttpGet] + [Produces("application/json")] public List AllSeries(int? tvdbId, bool includeSeasonImages = false) { var seriesStats = _seriesStatisticsService.SeriesStatistics(); @@ -129,6 +130,7 @@ namespace Sonarr.Api.V3.Series } [RestPostById] + [Consumes("application/json")] public ActionResult AddSeries(SeriesResource seriesResource) { var series = _addSeriesService.AddSeries(seriesResource.ToModel()); @@ -137,6 +139,7 @@ namespace Sonarr.Api.V3.Series } [RestPutById] + [Consumes("application/json")] public ActionResult UpdateSeries(SeriesResource seriesResource) { var moveFiles = Request.GetBooleanQueryParameter("moveFiles"); diff --git a/src/Sonarr.Api.V3/System/SystemController.cs b/src/Sonarr.Api.V3/System/SystemController.cs index a5b20f4b4..c5da73c4c 100644 --- a/src/Sonarr.Api.V3/System/SystemController.cs +++ b/src/Sonarr.Api.V3/System/SystemController.cs @@ -54,6 +54,7 @@ namespace Sonarr.Api.V3.System } [HttpGet("status")] + [Produces("application/json")] public object GetStatus() { return new @@ -92,6 +93,7 @@ namespace Sonarr.Api.V3.System } [HttpGet("routes")] + [Produces("application/json")] public IActionResult GetRoutes() { using (var sw = new StringWriter()) @@ -103,6 +105,7 @@ namespace Sonarr.Api.V3.System } [HttpGet("routes/duplicate")] + [Produces("application/json")] public object DuplicateRoutes() { return _detector.GetDuplicateEndpoints(_endpointData); diff --git a/src/Sonarr.Api.V3/Tags/TagController.cs b/src/Sonarr.Api.V3/Tags/TagController.cs index b267c0d13..04f76989d 100644 --- a/src/Sonarr.Api.V3/Tags/TagController.cs +++ b/src/Sonarr.Api.V3/Tags/TagController.cs @@ -28,18 +28,21 @@ namespace Sonarr.Api.V3.Tags } [HttpGet] + [Produces("application/json")] public List GetAll() { return _tagService.All().ToResource(); } [RestPostById] + [Consumes("application/json")] public ActionResult Create(TagResource resource) { return Created(_tagService.Add(resource.ToModel()).Id); } [RestPutById] + [Consumes("application/json")] public ActionResult Update(TagResource resource) { _tagService.Update(resource.ToModel()); diff --git a/src/Sonarr.Api.V3/Tags/TagDetailsController.cs b/src/Sonarr.Api.V3/Tags/TagDetailsController.cs index 733801090..834df43ee 100644 --- a/src/Sonarr.Api.V3/Tags/TagDetailsController.cs +++ b/src/Sonarr.Api.V3/Tags/TagDetailsController.cs @@ -22,6 +22,7 @@ namespace Sonarr.Api.V3.Tags } [HttpGet] + [Produces("application/json")] public List GetAll() { return _tagService.Details().ToResource(); diff --git a/src/Sonarr.Api.V3/Update/UpdateController.cs b/src/Sonarr.Api.V3/Update/UpdateController.cs index e1028a6a5..a636d1a4a 100644 --- a/src/Sonarr.Api.V3/Update/UpdateController.cs +++ b/src/Sonarr.Api.V3/Update/UpdateController.cs @@ -22,6 +22,7 @@ namespace Sonarr.Api.V3.Update } [HttpGet] + [Produces("application/json")] public List GetRecentUpdates() { var resources = _recentUpdateProvider.GetRecentUpdatePackages() diff --git a/src/Sonarr.Api.V3/Wanted/CutoffController.cs b/src/Sonarr.Api.V3/Wanted/CutoffController.cs index d50418692..b32d2ac21 100644 --- a/src/Sonarr.Api.V3/Wanted/CutoffController.cs +++ b/src/Sonarr.Api.V3/Wanted/CutoffController.cs @@ -26,6 +26,7 @@ namespace Sonarr.Api.V3.Wanted } [HttpGet] + [Produces("application/json")] public PagingResource GetCutoffUnmetEpisodes(bool includeSeries = false, bool includeEpisodeFile = false, bool includeImages = false) { var pagingResource = Request.ReadPagingResourceFromRequest(); diff --git a/src/Sonarr.Api.V3/Wanted/MissingController.cs b/src/Sonarr.Api.V3/Wanted/MissingController.cs index e1df1b603..1d0886dea 100644 --- a/src/Sonarr.Api.V3/Wanted/MissingController.cs +++ b/src/Sonarr.Api.V3/Wanted/MissingController.cs @@ -23,6 +23,7 @@ namespace Sonarr.Api.V3.Wanted } [HttpGet] + [Produces("application/json")] public PagingResource GetMissingEpisodes(bool includeSeries = false, bool includeImages = false) { var pagingResource = Request.ReadPagingResourceFromRequest(); diff --git a/src/Sonarr.Api.V3/openapi.json b/src/Sonarr.Api.V3/openapi.json new file mode 100644 index 000000000..4ffa657e1 --- /dev/null +++ b/src/Sonarr.Api.V3/openapi.json @@ -0,0 +1,10641 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "Sonarr", + "description": "Sonarr API docs", + "license": { + "name": "GPL-3.0", + "url": "https://github.com/Sonarr/Sonarr/blob/develop/LICENSE" + }, + "version": "3.0.0" + }, + "servers": [ + { + "url": "{protocol}://{hostpath}", + "variables": { + "protocol": { + "default": "http", + "enum": [ + "http", + "https" + ] + }, + "hostpath": { + "default": "localhost:8989" + } + } + } + ], + "paths": { + "/login": { + "post": { + "tags": [ + "Authentication" + ], + "parameters": [ + { + "name": "returnUrl", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "Username": { + "type": "string" + }, + "Password": { + "type": "string" + }, + "RememberMe": { + "type": "string" + } + } + }, + "encoding": { + "Username": { + "style": "form" + }, + "Password": { + "style": "form" + }, + "RememberMe": { + "style": "form" + } + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + }, + "get": { + "tags": [ + "StaticResource" + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/logout": { + "get": { + "tags": [ + "Authentication" + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/system/backup": { + "get": { + "tags": [ + "Backup" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BackupResource" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BackupResource" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BackupResource" + } + } + } + } + } + } + } + }, + "/api/v3/system/backup/{id}": { + "delete": { + "tags": [ + "Backup" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/system/backup/restore/{id}": { + "post": { + "tags": [ + "Backup" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/system/backup/restore/upload": { + "post": { + "tags": [ + "Backup" + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/blocklist": { + "get": { + "tags": [ + "Blocklist" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BlocklistResourcePagingResource" + } + } + } + } + } + } + }, + "/api/v3/blocklist/{id}": { + "delete": { + "tags": [ + "Blocklist" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/blocklist/bulk": { + "delete": { + "tags": [ + "Blocklist" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BlocklistBulkResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/BlocklistBulkResource" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/BlocklistBulkResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/calendar": { + "get": { + "tags": [ + "Calendar" + ], + "parameters": [ + { + "name": "start", + "in": "query", + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "end", + "in": "query", + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "unmonitored", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "includeSeries", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "includeEpisodeFile", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "includeEpisodeImages", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EpisodeResource" + } + } + } + } + } + } + } + }, + "/api/v3/calendar/{id}": { + "get": { + "tags": [ + "Calendar" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EpisodeResource" + } + } + } + } + } + } + }, + "/feed/v3/calendar/sonarr.ics": { + "get": { + "tags": [ + "CalendarFeed" + ], + "parameters": [ + { + "name": "pastDays", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "default": 7 + } + }, + { + "name": "futureDays", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "default": 28 + } + }, + { + "name": "tagList", + "in": "query", + "schema": { + "type": "string", + "default": "" + } + }, + { + "name": "unmonitored", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "premieresOnly", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "asAllDay", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/command": { + "post": { + "tags": [ + "Command" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CommandResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CommandResource" + } + } + } + } + } + }, + "get": { + "tags": [ + "Command" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CommandResource" + } + } + } + } + } + } + } + }, + "/api/v3/command/{id}": { + "delete": { + "tags": [ + "Command" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + }, + "get": { + "tags": [ + "Command" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CommandResource" + } + } + } + } + } + } + }, + "/api/v3/customfilter": { + "get": { + "tags": [ + "CustomFilter" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomFilterResource" + } + } + } + } + } + } + }, + "post": { + "tags": [ + "CustomFilter" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFilterResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/CustomFilterResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFilterResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/CustomFilterResource" + } + } + } + } + } + } + }, + "/api/v3/customfilter/{id}": { + "put": { + "tags": [ + "CustomFilter" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFilterResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/CustomFilterResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFilterResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/CustomFilterResource" + } + } + } + } + } + }, + "delete": { + "tags": [ + "CustomFilter" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + }, + "get": { + "tags": [ + "CustomFilter" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFilterResource" + } + } + } + } + } + } + }, + "/api/v3/customformat": { + "post": { + "tags": [ + "CustomFormat" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFormatResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/CustomFormatResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFormatResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/CustomFormatResource" + } + } + } + } + } + }, + "get": { + "tags": [ + "CustomFormat" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomFormatResource" + } + } + } + } + } + } + } + }, + "/api/v3/customformat/{id}": { + "put": { + "tags": [ + "CustomFormat" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFormatResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/CustomFormatResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFormatResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/CustomFormatResource" + } + } + } + } + } + }, + "delete": { + "tags": [ + "CustomFormat" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + }, + "get": { + "tags": [ + "CustomFormat" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomFormatResource" + } + } + } + } + } + } + }, + "/api/v3/customformat/schema": { + "get": { + "tags": [ + "CustomFormat" + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/wanted/cutoff": { + "get": { + "tags": [ + "Cutoff" + ], + "parameters": [ + { + "name": "includeSeries", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "includeEpisodeFile", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "includeImages", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EpisodeResourcePagingResource" + } + } + } + } + } + } + }, + "/api/v3/wanted/cutoff/{id}": { + "get": { + "tags": [ + "Cutoff" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EpisodeResource" + } + } + } + } + } + } + }, + "/api/v3/delayprofile": { + "post": { + "tags": [ + "DelayProfile" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DelayProfileResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/DelayProfileResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/DelayProfileResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/DelayProfileResource" + } + } + } + } + } + }, + "get": { + "tags": [ + "DelayProfile" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DelayProfileResource" + } + } + } + } + } + } + } + }, + "/api/v3/delayprofile/{id}": { + "delete": { + "tags": [ + "DelayProfile" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + }, + "put": { + "tags": [ + "DelayProfile" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DelayProfileResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/DelayProfileResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/DelayProfileResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/DelayProfileResource" + } + } + } + } + } + }, + "get": { + "tags": [ + "DelayProfile" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DelayProfileResource" + } + } + } + } + } + } + }, + "/api/v3/delayprofile/reorder/{id}": { + "put": { + "tags": [ + "DelayProfile" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "after", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DelayProfileResource" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DelayProfileResource" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DelayProfileResource" + } + } + } + } + } + } + } + }, + "/api/v3/diskspace": { + "get": { + "tags": [ + "DiskSpace" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DiskSpaceResource" + } + } + } + } + } + } + } + }, + "/api/v3/downloadclient": { + "get": { + "tags": [ + "DownloadClient" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DownloadClientResource" + } + } + } + } + } + } + }, + "post": { + "tags": [ + "DownloadClient" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DownloadClientResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/DownloadClientResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/DownloadClientResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/DownloadClientResource" + } + } + } + } + } + } + }, + "/api/v3/downloadclient/{id}": { + "put": { + "tags": [ + "DownloadClient" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DownloadClientResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/DownloadClientResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/DownloadClientResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/DownloadClientResource" + } + } + } + } + } + }, + "delete": { + "tags": [ + "DownloadClient" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + }, + "get": { + "tags": [ + "DownloadClient" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DownloadClientResource" + } + } + } + } + } + } + }, + "/api/v3/downloadclient/schema": { + "get": { + "tags": [ + "DownloadClient" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DownloadClientResource" + } + } + } + } + } + } + } + }, + "/api/v3/downloadclient/test": { + "post": { + "tags": [ + "DownloadClient" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DownloadClientResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/downloadclient/testall": { + "post": { + "tags": [ + "DownloadClient" + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/downloadclient/action/{name}": { + "post": { + "tags": [ + "DownloadClient" + ], + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DownloadClientResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/config/downloadclient": { + "get": { + "tags": [ + "DownloadClientConfig" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DownloadClientConfigResource" + } + } + } + } + } + } + }, + "/api/v3/config/downloadclient/{id}": { + "put": { + "tags": [ + "DownloadClientConfig" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DownloadClientConfigResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/DownloadClientConfigResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/DownloadClientConfigResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/DownloadClientConfigResource" + } + } + } + } + } + }, + "get": { + "tags": [ + "DownloadClientConfig" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DownloadClientConfigResource" + } + } + } + } + } + } + }, + "/api/v3/episode": { + "get": { + "tags": [ + "Episode" + ], + "parameters": [ + { + "name": "seriesId", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "seasonNumber", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "episodeIds", + "in": "query", + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + }, + { + "name": "episodeFileId", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "includeImages", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EpisodeResource" + } + } + } + } + } + } + } + }, + "/api/v3/episode/{id}": { + "put": { + "tags": [ + "Episode" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EpisodeResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + }, + "get": { + "tags": [ + "Episode" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EpisodeResource" + } + } + } + } + } + } + }, + "/api/v3/episode/monitor": { + "put": { + "tags": [ + "Episode" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EpisodesMonitoredResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/episodefile": { + "get": { + "tags": [ + "EpisodeFile" + ], + "parameters": [ + { + "name": "seriesId", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "episodeFileIds", + "in": "query", + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EpisodeFileResource" + } + } + } + } + } + } + } + }, + "/api/v3/episodefile/{id}": { + "put": { + "tags": [ + "EpisodeFile" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EpisodeFileResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/EpisodeFileResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/EpisodeFileResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/EpisodeFileResource" + } + } + } + } + } + }, + "delete": { + "tags": [ + "EpisodeFile" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + }, + "get": { + "tags": [ + "EpisodeFile" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EpisodeFileResource" + } + } + } + } + } + } + }, + "/api/v3/episodefile/editor": { + "put": { + "tags": [ + "EpisodeFile" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EpisodeFileListResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/episodefile/bulk": { + "delete": { + "tags": [ + "EpisodeFile" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EpisodeFileListResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + }, + "put": { + "tags": [ + "EpisodeFile" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EpisodeFileResource" + } + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/filesystem": { + "get": { + "tags": [ + "FileSystem" + ], + "parameters": [ + { + "name": "path", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "includeFiles", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "allowFoldersWithoutTrailingSlashes", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/filesystem/type": { + "get": { + "tags": [ + "FileSystem" + ], + "parameters": [ + { + "name": "path", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/filesystem/mediafiles": { + "get": { + "tags": [ + "FileSystem" + ], + "parameters": [ + { + "name": "path", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/health": { + "get": { + "tags": [ + "Health" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/HealthResource" + } + } + } + } + } + } + } + }, + "/api/v3/health/{id}": { + "get": { + "tags": [ + "Health" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HealthResource" + } + } + } + } + } + } + }, + "/api/v3/history": { + "get": { + "tags": [ + "History" + ], + "parameters": [ + { + "name": "includeSeries", + "in": "query", + "schema": { + "type": "boolean" + } + }, + { + "name": "includeEpisode", + "in": "query", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HistoryResourcePagingResource" + } + } + } + } + } + } + }, + "/api/v3/history/since": { + "get": { + "tags": [ + "History" + ], + "parameters": [ + { + "name": "date", + "in": "query", + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "eventType", + "in": "query", + "schema": { + "$ref": "#/components/schemas/EpisodeHistoryEventType" + } + }, + { + "name": "includeSeries", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "includeEpisode", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/HistoryResource" + } + } + } + } + } + } + } + }, + "/api/v3/history/series": { + "get": { + "tags": [ + "History" + ], + "parameters": [ + { + "name": "seriesId", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "seasonNumber", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "eventType", + "in": "query", + "schema": { + "$ref": "#/components/schemas/EpisodeHistoryEventType" + } + }, + { + "name": "includeSeries", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "includeEpisode", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/HistoryResource" + } + } + } + } + } + } + } + }, + "/api/v3/history/failed/{id}": { + "post": { + "tags": [ + "History" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/config/host": { + "get": { + "tags": [ + "HostConfig" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/HostConfigResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/HostConfigResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/HostConfigResource" + } + } + } + } + } + } + }, + "/api/v3/config/host/{id}": { + "put": { + "tags": [ + "HostConfig" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HostConfigResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/HostConfigResource" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/HostConfigResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/HostConfigResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/HostConfigResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/HostConfigResource" + } + } + } + } + } + }, + "get": { + "tags": [ + "HostConfig" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HostConfigResource" + } + } + } + } + } + } + }, + "/api/v3/importlist": { + "get": { + "tags": [ + "ImportList" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImportListResource" + } + } + } + } + } + } + }, + "post": { + "tags": [ + "ImportList" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImportListResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ImportListResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImportListResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ImportListResource" + } + } + } + } + } + } + }, + "/api/v3/importlist/{id}": { + "put": { + "tags": [ + "ImportList" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImportListResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ImportListResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImportListResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ImportListResource" + } + } + } + } + } + }, + "delete": { + "tags": [ + "ImportList" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + }, + "get": { + "tags": [ + "ImportList" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImportListResource" + } + } + } + } + } + } + }, + "/api/v3/importlist/schema": { + "get": { + "tags": [ + "ImportList" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImportListResource" + } + } + } + } + } + } + } + }, + "/api/v3/importlist/test": { + "post": { + "tags": [ + "ImportList" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImportListResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/importlist/testall": { + "post": { + "tags": [ + "ImportList" + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/importlist/action/{name}": { + "post": { + "tags": [ + "ImportList" + ], + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImportListResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/importlistexclusion": { + "get": { + "tags": [ + "ImportListExclusion" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImportListExclusionResource" + } + } + } + } + } + } + }, + "post": { + "tags": [ + "ImportListExclusion" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImportListExclusionResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ImportListExclusionResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImportListExclusionResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ImportListExclusionResource" + } + } + } + } + } + } + }, + "/api/v3/importlistexclusion/{id}": { + "put": { + "tags": [ + "ImportListExclusion" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImportListExclusionResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ImportListExclusionResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImportListExclusionResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ImportListExclusionResource" + } + } + } + } + } + }, + "delete": { + "tags": [ + "ImportListExclusion" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + }, + "get": { + "tags": [ + "ImportListExclusion" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImportListExclusionResource" + } + } + } + } + } + } + }, + "/api/v3/indexer": { + "get": { + "tags": [ + "Indexer" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IndexerResource" + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Indexer" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IndexerResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/IndexerResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/IndexerResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/IndexerResource" + } + } + } + } + } + } + }, + "/api/v3/indexer/{id}": { + "put": { + "tags": [ + "Indexer" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IndexerResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/IndexerResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/IndexerResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/IndexerResource" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Indexer" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + }, + "get": { + "tags": [ + "Indexer" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IndexerResource" + } + } + } + } + } + } + }, + "/api/v3/indexer/schema": { + "get": { + "tags": [ + "Indexer" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IndexerResource" + } + } + } + } + } + } + } + }, + "/api/v3/indexer/test": { + "post": { + "tags": [ + "Indexer" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IndexerResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/indexer/testall": { + "post": { + "tags": [ + "Indexer" + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/indexer/action/{name}": { + "post": { + "tags": [ + "Indexer" + ], + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IndexerResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/config/indexer": { + "get": { + "tags": [ + "IndexerConfig" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IndexerConfigResource" + } + } + } + } + } + } + }, + "/api/v3/config/indexer/{id}": { + "put": { + "tags": [ + "IndexerConfig" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IndexerConfigResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/IndexerConfigResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/IndexerConfigResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/IndexerConfigResource" + } + } + } + } + } + }, + "get": { + "tags": [ + "IndexerConfig" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IndexerConfigResource" + } + } + } + } + } + } + }, + "/initialize.js": { + "get": { + "tags": [ + "InitializeJs" + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/languageprofile": { + "post": { + "tags": [ + "LanguageProfile" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LanguageProfileResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/LanguageProfileResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/LanguageProfileResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/LanguageProfileResource" + } + } + } + } + } + }, + "get": { + "tags": [ + "LanguageProfile" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LanguageProfileResource" + } + } + } + } + } + } + } + }, + "/api/v3/languageprofile/{id}": { + "delete": { + "tags": [ + "LanguageProfile" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + }, + "put": { + "tags": [ + "LanguageProfile" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LanguageProfileResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/LanguageProfileResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/LanguageProfileResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/LanguageProfileResource" + } + } + } + } + } + }, + "get": { + "tags": [ + "LanguageProfile" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LanguageProfileResource" + } + } + } + } + } + } + }, + "/api/v3/languageprofile/schema": { + "get": { + "tags": [ + "LanguageProfileSchema" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LanguageProfileResource" + } + } + } + } + } + } + }, + "/api/v3/log": { + "get": { + "tags": [ + "Log" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LogResourcePagingResource" + } + } + } + } + } + } + }, + "/api/v3/log/file": { + "get": { + "tags": [ + "LogFile" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LogFileResource" + } + } + } + } + } + } + } + }, + "/api/v3/log/file/{filename}": { + "get": { + "tags": [ + "LogFile" + ], + "parameters": [ + { + "name": "filename", + "in": "path", + "required": true, + "schema": { + "pattern": "[-.a-zA-Z0-9]+?\\.txt", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/manualimport": { + "get": { + "tags": [ + "ManualImport" + ], + "parameters": [ + { + "name": "folder", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "downloadId", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "seriesId", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "seasonNumber", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "filterExistingFiles", + "in": "query", + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ManualImportResource" + } + } + } + } + } + } + }, + "post": { + "tags": [ + "ManualImport" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ManualImportReprocessResource" + } + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/mediacover/{seriesId}/{filename}": { + "get": { + "tags": [ + "MediaCover" + ], + "parameters": [ + { + "name": "seriesId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "filename", + "in": "path", + "required": true, + "schema": { + "pattern": "(.+)\\.(jpg|png|gif)", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/config/mediamanagement": { + "get": { + "tags": [ + "MediaManagementConfig" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MediaManagementConfigResource" + } + } + } + } + } + } + }, + "/api/v3/config/mediamanagement/{id}": { + "put": { + "tags": [ + "MediaManagementConfig" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MediaManagementConfigResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/MediaManagementConfigResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/MediaManagementConfigResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/MediaManagementConfigResource" + } + } + } + } + } + }, + "get": { + "tags": [ + "MediaManagementConfig" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MediaManagementConfigResource" + } + } + } + } + } + } + }, + "/api/v3/metadata": { + "get": { + "tags": [ + "Metadata" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MetadataResource" + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Metadata" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MetadataResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/MetadataResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/MetadataResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/MetadataResource" + } + } + } + } + } + } + }, + "/api/v3/metadata/{id}": { + "put": { + "tags": [ + "Metadata" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MetadataResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/MetadataResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/MetadataResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/MetadataResource" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Metadata" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + }, + "get": { + "tags": [ + "Metadata" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MetadataResource" + } + } + } + } + } + } + }, + "/api/v3/metadata/schema": { + "get": { + "tags": [ + "Metadata" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MetadataResource" + } + } + } + } + } + } + } + }, + "/api/v3/metadata/test": { + "post": { + "tags": [ + "Metadata" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MetadataResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/metadata/testall": { + "post": { + "tags": [ + "Metadata" + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/metadata/action/{name}": { + "post": { + "tags": [ + "Metadata" + ], + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MetadataResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/wanted/missing": { + "get": { + "tags": [ + "Missing" + ], + "parameters": [ + { + "name": "includeSeries", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "includeImages", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EpisodeResourcePagingResource" + } + } + } + } + } + } + }, + "/api/v3/wanted/missing/{id}": { + "get": { + "tags": [ + "Missing" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EpisodeResource" + } + } + } + } + } + } + }, + "/api/v3/config/naming": { + "get": { + "tags": [ + "NamingConfig" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/NamingConfigResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/NamingConfigResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/NamingConfigResource" + } + } + } + } + } + } + }, + "/api/v3/config/naming/{id}": { + "put": { + "tags": [ + "NamingConfig" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NamingConfigResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/NamingConfigResource" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/NamingConfigResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/NamingConfigResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/NamingConfigResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/NamingConfigResource" + } + } + } + } + } + }, + "get": { + "tags": [ + "NamingConfig" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NamingConfigResource" + } + } + } + } + } + } + }, + "/api/v3/config/naming/examples": { + "get": { + "tags": [ + "NamingConfig" + ], + "parameters": [ + { + "name": "RenameEpisodes", + "in": "query", + "schema": { + "type": "boolean" + } + }, + { + "name": "ReplaceIllegalCharacters", + "in": "query", + "schema": { + "type": "boolean" + } + }, + { + "name": "MultiEpisodeStyle", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "StandardEpisodeFormat", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "DailyEpisodeFormat", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "AnimeEpisodeFormat", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "SeriesFolderFormat", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "SeasonFolderFormat", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "SpecialsFolderFormat", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "IncludeSeriesTitle", + "in": "query", + "schema": { + "type": "boolean" + } + }, + { + "name": "IncludeEpisodeTitle", + "in": "query", + "schema": { + "type": "boolean" + } + }, + { + "name": "IncludeQuality", + "in": "query", + "schema": { + "type": "boolean" + } + }, + { + "name": "ReplaceSpaces", + "in": "query", + "schema": { + "type": "boolean" + } + }, + { + "name": "Separator", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "NumberStyle", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "Id", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "ResourceName", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/notification": { + "get": { + "tags": [ + "Notification" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NotificationResource" + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Notification" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/NotificationResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/NotificationResource" + } + } + } + } + } + } + }, + "/api/v3/notification/{id}": { + "put": { + "tags": [ + "Notification" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/NotificationResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/NotificationResource" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Notification" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + }, + "get": { + "tags": [ + "Notification" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationResource" + } + } + } + } + } + } + }, + "/api/v3/notification/schema": { + "get": { + "tags": [ + "Notification" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NotificationResource" + } + } + } + } + } + } + } + }, + "/api/v3/notification/test": { + "post": { + "tags": [ + "Notification" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/notification/testall": { + "post": { + "tags": [ + "Notification" + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/notification/action/{name}": { + "post": { + "tags": [ + "Notification" + ], + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/parse": { + "get": { + "tags": [ + "Parse" + ], + "parameters": [ + { + "name": "title", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ParseResource" + } + } + } + } + } + } + }, + "/ping": { + "get": { + "tags": [ + "Ping" + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/qualitydefinition/{id}": { + "put": { + "tags": [ + "QualityDefinition" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QualityDefinitionResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/QualityDefinitionResource" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/QualityDefinitionResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/QualityDefinitionResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/QualityDefinitionResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/QualityDefinitionResource" + } + } + } + } + } + }, + "get": { + "tags": [ + "QualityDefinition" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QualityDefinitionResource" + } + } + } + } + } + } + }, + "/api/v3/qualitydefinition": { + "get": { + "tags": [ + "QualityDefinition" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/QualityDefinitionResource" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/QualityDefinitionResource" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/QualityDefinitionResource" + } + } + } + } + } + } + } + }, + "/api/v3/qualitydefinition/update": { + "put": { + "tags": [ + "QualityDefinition" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/QualityDefinitionResource" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/QualityDefinitionResource" + } + } + }, + "application/*+json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/QualityDefinitionResource" + } + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/qualityprofile": { + "post": { + "tags": [ + "QualityProfile" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QualityProfileResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/QualityProfileResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/QualityProfileResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/QualityProfileResource" + } + } + } + } + } + }, + "get": { + "tags": [ + "QualityProfile" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/QualityProfileResource" + } + } + } + } + } + } + } + }, + "/api/v3/qualityprofile/{id}": { + "delete": { + "tags": [ + "QualityProfile" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + }, + "put": { + "tags": [ + "QualityProfile" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QualityProfileResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/QualityProfileResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/QualityProfileResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/QualityProfileResource" + } + } + } + } + } + }, + "get": { + "tags": [ + "QualityProfile" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QualityProfileResource" + } + } + } + } + } + } + }, + "/api/v3/qualityprofile/schema": { + "get": { + "tags": [ + "QualityProfileSchema" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/QualityProfileResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/QualityProfileResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/QualityProfileResource" + } + } + } + } + } + } + }, + "/api/v3/queue/{id}": { + "delete": { + "tags": [ + "Queue" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "removeFromClient", + "in": "query", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "blocklist", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + }, + "get": { + "tags": [ + "Queue" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QueueResource" + } + } + } + } + } + } + }, + "/api/v3/queue/bulk": { + "delete": { + "tags": [ + "Queue" + ], + "parameters": [ + { + "name": "removeFromClient", + "in": "query", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "blocklist", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QueueBulkResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/QueueBulkResource" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/QueueBulkResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/queue": { + "get": { + "tags": [ + "Queue" + ], + "parameters": [ + { + "name": "includeUnknownSeriesItems", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "includeSeries", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "includeEpisode", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QueueResourcePagingResource" + } + } + } + } + } + } + }, + "/api/v3/queue/grab/{id}": { + "post": { + "tags": [ + "QueueAction" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/queue/grab/bulk": { + "post": { + "tags": [ + "QueueAction" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QueueBulkResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/queue/details": { + "get": { + "tags": [ + "QueueDetails" + ], + "parameters": [ + { + "name": "seriesId", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "episodeIds", + "in": "query", + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + }, + { + "name": "includeSeries", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "includeEpisode", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/QueueResource" + } + } + } + } + } + } + } + }, + "/api/v3/queue/details/{id}": { + "get": { + "tags": [ + "QueueDetails" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QueueResource" + } + } + } + } + } + } + }, + "/api/v3/queue/status": { + "get": { + "tags": [ + "QueueStatus" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QueueStatusResource" + } + } + } + } + } + } + }, + "/api/v3/queue/status/{id}": { + "get": { + "tags": [ + "QueueStatus" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QueueStatusResource" + } + } + } + } + } + } + }, + "/api/v3/release": { + "post": { + "tags": [ + "Release" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReleaseResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + }, + "get": { + "tags": [ + "Release" + ], + "parameters": [ + { + "name": "seriesId", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "episodeId", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "seasonNumber", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ReleaseResource" + } + } + } + } + } + } + } + }, + "/api/v3/release/{id}": { + "get": { + "tags": [ + "Release" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReleaseResource" + } + } + } + } + } + } + }, + "/api/v3/releaseprofile": { + "post": { + "tags": [ + "ReleaseProfile" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReleaseProfileResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ReleaseProfileResource" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ReleaseProfileResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ReleaseProfileResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReleaseProfileResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ReleaseProfileResource" + } + } + } + } + } + }, + "get": { + "tags": [ + "ReleaseProfile" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ReleaseProfileResource" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ReleaseProfileResource" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ReleaseProfileResource" + } + } + } + } + } + } + } + }, + "/api/v3/releaseprofile/{id}": { + "delete": { + "tags": [ + "ReleaseProfile" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + }, + "put": { + "tags": [ + "ReleaseProfile" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReleaseProfileResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ReleaseProfileResource" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ReleaseProfileResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ReleaseProfileResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReleaseProfileResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ReleaseProfileResource" + } + } + } + } + } + }, + "get": { + "tags": [ + "ReleaseProfile" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReleaseProfileResource" + } + } + } + } + } + } + }, + "/api/v3/release/push": { + "post": { + "tags": [ + "ReleasePush" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReleaseResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ReleaseResource" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ReleaseResource" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ReleaseResource" + } + } + } + } + } + } + } + }, + "/api/v3/release/push/{id}": { + "get": { + "tags": [ + "ReleasePush" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReleaseResource" + } + } + } + } + } + } + }, + "/api/v3/remotepathmapping": { + "post": { + "tags": [ + "RemotePathMapping" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RemotePathMappingResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/RemotePathMappingResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/RemotePathMappingResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/RemotePathMappingResource" + } + } + } + } + } + }, + "get": { + "tags": [ + "RemotePathMapping" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RemotePathMappingResource" + } + } + } + } + } + } + } + }, + "/api/v3/remotepathmapping/{id}": { + "delete": { + "tags": [ + "RemotePathMapping" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + }, + "put": { + "tags": [ + "RemotePathMapping" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RemotePathMappingResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/RemotePathMappingResource" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/RemotePathMappingResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/RemotePathMappingResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/RemotePathMappingResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/RemotePathMappingResource" + } + } + } + } + } + }, + "get": { + "tags": [ + "RemotePathMapping" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RemotePathMappingResource" + } + } + } + } + } + } + }, + "/api/v3/rename": { + "get": { + "tags": [ + "RenameEpisode" + ], + "parameters": [ + { + "name": "seriesId", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "seasonNumber", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RenameEpisodeResource" + } + } + } + } + } + } + } + }, + "/api/v3/rootfolder": { + "post": { + "tags": [ + "RootFolder" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RootFolderResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/RootFolderResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/RootFolderResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/RootFolderResource" + } + } + } + } + } + }, + "get": { + "tags": [ + "RootFolder" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RootFolderResource" + } + } + } + } + } + } + } + }, + "/api/v3/rootfolder/{id}": { + "delete": { + "tags": [ + "RootFolder" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + }, + "get": { + "tags": [ + "RootFolder" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RootFolderResource" + } + } + } + } + } + } + }, + "/api/v3/seasonpass": { + "post": { + "tags": [ + "SeasonPass" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SeasonPassResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/series": { + "get": { + "tags": [ + "Series" + ], + "parameters": [ + { + "name": "tvdbId", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "includeSeasonImages", + "in": "query", + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SeriesResource" + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Series" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SeriesResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/SeriesResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/SeriesResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/SeriesResource" + } + } + } + } + } + } + }, + "/api/v3/series/{id}": { + "put": { + "tags": [ + "Series" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SeriesResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/SeriesResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/SeriesResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/SeriesResource" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Series" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + }, + "get": { + "tags": [ + "Series" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SeriesResource" + } + } + } + } + } + } + }, + "/api/v3/series/editor": { + "put": { + "tags": [ + "SeriesEditor" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SeriesEditorResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/SeriesEditorResource" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/SeriesEditorResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + }, + "delete": { + "tags": [ + "SeriesEditor" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SeriesEditorResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/SeriesEditorResource" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/SeriesEditorResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/series/import": { + "post": { + "tags": [ + "SeriesImport" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SeriesResource" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SeriesResource" + } + } + }, + "application/*+json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SeriesResource" + } + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/series/lookup": { + "get": { + "tags": [ + "SeriesLookup" + ], + "parameters": [ + { + "name": "term", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/content/{path}": { + "get": { + "tags": [ + "StaticResource" + ], + "parameters": [ + { + "name": "path", + "in": "path", + "required": true, + "schema": { + "pattern": "^(?!api/).*", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/": { + "get": { + "tags": [ + "StaticResource" + ], + "parameters": [ + { + "name": "path", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/{path}": { + "get": { + "tags": [ + "StaticResource" + ], + "parameters": [ + { + "name": "path", + "in": "path", + "required": true, + "schema": { + "pattern": "^(?!(api|feed)/).*", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/system/status": { + "get": { + "tags": [ + "System" + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/system/routes": { + "get": { + "tags": [ + "System" + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/system/routes/duplicate": { + "get": { + "tags": [ + "System" + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/system/shutdown": { + "post": { + "tags": [ + "System" + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/system/restart": { + "post": { + "tags": [ + "System" + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/v3/tag": { + "get": { + "tags": [ + "Tag" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TagResource" + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Tag" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/TagResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/TagResource" + } + } + } + } + } + } + }, + "/api/v3/tag/{id}": { + "put": { + "tags": [ + "Tag" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/TagResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/TagResource" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Tag" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + }, + "get": { + "tags": [ + "Tag" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagResource" + } + } + } + } + } + } + }, + "/api/v3/tag/detail": { + "get": { + "tags": [ + "TagDetails" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TagDetailsResource" + } + } + } + } + } + } + } + }, + "/api/v3/tag/detail/{id}": { + "get": { + "tags": [ + "TagDetails" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagDetailsResource" + } + } + } + } + } + } + }, + "/api/v3/system/task": { + "get": { + "tags": [ + "Task" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskResource" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskResource" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TaskResource" + } + } + } + } + } + } + } + }, + "/api/v3/system/task/{id}": { + "get": { + "tags": [ + "Task" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TaskResource" + } + } + } + } + } + } + }, + "/api/v3/config/ui/{id}": { + "put": { + "tags": [ + "UiConfig" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UiConfigResource" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/UiConfigResource" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/UiConfigResource" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/UiConfigResource" + } + } + } + } + } + }, + "get": { + "tags": [ + "UiConfig" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UiConfigResource" + } + } + } + } + } + } + }, + "/api/v3/config/ui": { + "get": { + "tags": [ + "UiConfig" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UiConfigResource" + } + } + } + } + } + } + }, + "/api/v3/update": { + "get": { + "tags": [ + "Update" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UpdateResource" + } + } + } + } + } + } + } + }, + "/api/v3/log/file/update": { + "get": { + "tags": [ + "UpdateLogFile" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LogFileResource" + } + } + } + } + } + } + } + }, + "/api/v3/log/file/update/{filename}": { + "get": { + "tags": [ + "UpdateLogFile" + ], + "parameters": [ + { + "name": "filename", + "in": "path", + "required": true, + "schema": { + "pattern": "[-.a-zA-Z0-9]+?\\.txt", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + } + }, + "components": { + "schemas": { + "AddSeriesOptions": { + "type": "object", + "properties": { + "ignoreEpisodesWithFiles": { + "type": "boolean" + }, + "ignoreEpisodesWithoutFiles": { + "type": "boolean" + }, + "monitor": { + "$ref": "#/components/schemas/MonitorTypes" + }, + "searchForMissingEpisodes": { + "type": "boolean" + }, + "searchForCutoffUnmetEpisodes": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "AlternateTitleResource": { + "type": "object", + "properties": { + "title": { + "type": "string", + "nullable": true + }, + "seasonNumber": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "sceneSeasonNumber": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "sceneOrigin": { + "type": "string", + "nullable": true + }, + "comment": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "ApplyTags": { + "enum": [ + "add", + "remove", + "replace" + ], + "type": "string" + }, + "AuthenticationRequiredType": { + "enum": [ + "enabled", + "disabledForLocalAddresses" + ], + "type": "string" + }, + "AuthenticationType": { + "enum": [ + "none", + "basic", + "forms", + "external" + ], + "type": "string" + }, + "BackupResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string", + "nullable": true + }, + "path": { + "type": "string", + "nullable": true + }, + "type": { + "$ref": "#/components/schemas/BackupType" + }, + "size": { + "type": "integer", + "format": "int64" + }, + "time": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + }, + "BackupType": { + "enum": [ + "scheduled", + "manual", + "update" + ], + "type": "string" + }, + "BlocklistBulkResource": { + "type": "object", + "properties": { + "ids": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "BlocklistResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "seriesId": { + "type": "integer", + "format": "int32" + }, + "episodeIds": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "sourceTitle": { + "type": "string", + "nullable": true + }, + "language": { + "$ref": "#/components/schemas/Language" + }, + "quality": { + "$ref": "#/components/schemas/QualityModel" + }, + "customFormats": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomFormatResource" + }, + "nullable": true + }, + "date": { + "type": "string", + "format": "date-time" + }, + "protocol": { + "$ref": "#/components/schemas/DownloadProtocol" + }, + "indexer": { + "type": "string", + "nullable": true + }, + "message": { + "type": "string", + "nullable": true + }, + "series": { + "$ref": "#/components/schemas/SeriesResource" + } + }, + "additionalProperties": false + }, + "BlocklistResourcePagingResource": { + "type": "object", + "properties": { + "page": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "sortKey": { + "type": "string", + "nullable": true + }, + "sortDirection": { + "$ref": "#/components/schemas/SortDirection" + }, + "filters": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PagingResourceFilter" + }, + "nullable": true + }, + "totalRecords": { + "type": "integer", + "format": "int32" + }, + "records": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BlocklistResource" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "CertificateValidationType": { + "enum": [ + "enabled", + "disabledForLocalAddresses", + "disabled" + ], + "type": "string" + }, + "Command": { + "type": "object", + "properties": { + "sendUpdatesToClient": { + "type": "boolean" + }, + "updateScheduledTask": { + "type": "boolean", + "readOnly": true + }, + "completionMessage": { + "type": "string", + "nullable": true, + "readOnly": true + }, + "requiresDiskAccess": { + "type": "boolean", + "readOnly": true + }, + "isExclusive": { + "type": "boolean", + "readOnly": true + }, + "name": { + "type": "string", + "nullable": true, + "readOnly": true + }, + "lastExecutionTime": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "trigger": { + "$ref": "#/components/schemas/CommandTrigger" + }, + "suppressMessages": { + "type": "boolean" + }, + "clientUserAgent": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "CommandPriority": { + "enum": [ + "normal", + "high", + "low" + ], + "type": "string" + }, + "CommandResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string", + "nullable": true + }, + "commandName": { + "type": "string", + "nullable": true + }, + "message": { + "type": "string", + "nullable": true + }, + "body": { + "$ref": "#/components/schemas/Command" + }, + "priority": { + "$ref": "#/components/schemas/CommandPriority" + }, + "status": { + "$ref": "#/components/schemas/CommandStatus" + }, + "queued": { + "type": "string", + "format": "date-time" + }, + "started": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "ended": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "duration": { + "$ref": "#/components/schemas/TimeSpan" + }, + "exception": { + "type": "string", + "nullable": true + }, + "trigger": { + "$ref": "#/components/schemas/CommandTrigger" + }, + "clientUserAgent": { + "type": "string", + "nullable": true + }, + "stateChangeTime": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "sendUpdatesToClient": { + "type": "boolean" + }, + "updateScheduledTask": { + "type": "boolean" + }, + "lastExecutionTime": { + "type": "string", + "format": "date-time", + "nullable": true + } + }, + "additionalProperties": false + }, + "CommandStatus": { + "enum": [ + "queued", + "started", + "completed", + "failed", + "aborted", + "cancelled", + "orphaned" + ], + "type": "string" + }, + "CommandTrigger": { + "enum": [ + "unspecified", + "manual", + "scheduled" + ], + "type": "string" + }, + "CustomFilterResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "type": { + "type": "string", + "nullable": true + }, + "label": { + "type": "string", + "nullable": true + }, + "filters": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": { } + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "CustomFormatResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string", + "nullable": true + }, + "includeCustomFormatWhenRenaming": { + "type": "boolean" + }, + "specifications": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomFormatSpecificationSchema" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "CustomFormatSpecificationSchema": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string", + "nullable": true + }, + "implementation": { + "type": "string", + "nullable": true + }, + "implementationName": { + "type": "string", + "nullable": true + }, + "infoLink": { + "type": "string", + "nullable": true + }, + "negate": { + "type": "boolean" + }, + "required": { + "type": "boolean" + }, + "fields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Field" + }, + "nullable": true + }, + "presets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomFormatSpecificationSchema" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "DelayProfileResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "enableUsenet": { + "type": "boolean" + }, + "enableTorrent": { + "type": "boolean" + }, + "preferredProtocol": { + "$ref": "#/components/schemas/DownloadProtocol" + }, + "usenetDelay": { + "type": "integer", + "format": "int32" + }, + "torrentDelay": { + "type": "integer", + "format": "int32" + }, + "bypassIfHighestQuality": { + "type": "boolean" + }, + "order": { + "type": "integer", + "format": "int32" + }, + "tags": { + "uniqueItems": true, + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "DiskSpaceResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "path": { + "type": "string", + "nullable": true + }, + "label": { + "type": "string", + "nullable": true + }, + "freeSpace": { + "type": "integer", + "format": "int64" + }, + "totalSpace": { + "type": "integer", + "format": "int64" + } + }, + "additionalProperties": false + }, + "DownloadClientConfigResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "downloadClientWorkingFolders": { + "type": "string", + "nullable": true + }, + "enableCompletedDownloadHandling": { + "type": "boolean" + }, + "autoRedownloadFailed": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "DownloadClientResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string", + "nullable": true + }, + "fields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Field" + }, + "nullable": true + }, + "implementationName": { + "type": "string", + "nullable": true + }, + "implementation": { + "type": "string", + "nullable": true + }, + "configContract": { + "type": "string", + "nullable": true + }, + "infoLink": { + "type": "string", + "nullable": true + }, + "message": { + "$ref": "#/components/schemas/ProviderMessage" + }, + "tags": { + "uniqueItems": true, + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "presets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DownloadClientResource" + }, + "nullable": true + }, + "enable": { + "type": "boolean" + }, + "protocol": { + "$ref": "#/components/schemas/DownloadProtocol" + }, + "priority": { + "type": "integer", + "format": "int32" + }, + "removeCompletedDownloads": { + "type": "boolean" + }, + "removeFailedDownloads": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "DownloadProtocol": { + "enum": [ + "unknown", + "usenet", + "torrent" + ], + "type": "string" + }, + "EpisodeFileListResource": { + "type": "object", + "properties": { + "episodeFileIds": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "language": { + "$ref": "#/components/schemas/Language" + }, + "quality": { + "$ref": "#/components/schemas/QualityModel" + }, + "sceneName": { + "type": "string", + "nullable": true + }, + "releaseGroup": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "EpisodeFileResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "seriesId": { + "type": "integer", + "format": "int32" + }, + "seasonNumber": { + "type": "integer", + "format": "int32" + }, + "relativePath": { + "type": "string", + "nullable": true + }, + "path": { + "type": "string", + "nullable": true + }, + "size": { + "type": "integer", + "format": "int64" + }, + "dateAdded": { + "type": "string", + "format": "date-time" + }, + "sceneName": { + "type": "string", + "nullable": true + }, + "releaseGroup": { + "type": "string", + "nullable": true + }, + "language": { + "$ref": "#/components/schemas/Language" + }, + "quality": { + "$ref": "#/components/schemas/QualityModel" + }, + "customFormats": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomFormatResource" + }, + "nullable": true + }, + "mediaInfo": { + "$ref": "#/components/schemas/MediaInfoResource" + }, + "qualityCutoffNotMet": { + "type": "boolean" + }, + "languageCutoffNotMet": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "EpisodeHistoryEventType": { + "enum": [ + "unknown", + "grabbed", + "seriesFolderImported", + "downloadFolderImported", + "downloadFailed", + "episodeFileDeleted", + "episodeFileRenamed", + "downloadIgnored" + ], + "type": "string" + }, + "EpisodeResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "seriesId": { + "type": "integer", + "format": "int32" + }, + "tvdbId": { + "type": "integer", + "format": "int32" + }, + "episodeFileId": { + "type": "integer", + "format": "int32" + }, + "seasonNumber": { + "type": "integer", + "format": "int32" + }, + "episodeNumber": { + "type": "integer", + "format": "int32" + }, + "title": { + "type": "string", + "nullable": true + }, + "airDate": { + "type": "string", + "nullable": true + }, + "airDateUtc": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "overview": { + "type": "string", + "nullable": true + }, + "episodeFile": { + "$ref": "#/components/schemas/EpisodeFileResource" + }, + "hasFile": { + "type": "boolean" + }, + "monitored": { + "type": "boolean" + }, + "absoluteEpisodeNumber": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "sceneAbsoluteEpisodeNumber": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "sceneEpisodeNumber": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "sceneSeasonNumber": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "unverifiedSceneNumbering": { + "type": "boolean" + }, + "endTime": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "grabDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "seriesTitle": { + "type": "string", + "nullable": true + }, + "series": { + "$ref": "#/components/schemas/SeriesResource" + }, + "images": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MediaCover" + }, + "nullable": true + }, + "grabbed": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "EpisodeResourcePagingResource": { + "type": "object", + "properties": { + "page": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "sortKey": { + "type": "string", + "nullable": true + }, + "sortDirection": { + "$ref": "#/components/schemas/SortDirection" + }, + "filters": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PagingResourceFilter" + }, + "nullable": true + }, + "totalRecords": { + "type": "integer", + "format": "int32" + }, + "records": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EpisodeResource" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "EpisodeTitleRequiredType": { + "enum": [ + "always", + "bulkSeasonReleases", + "never" + ], + "type": "string" + }, + "EpisodesMonitoredResource": { + "type": "object", + "properties": { + "episodeIds": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "monitored": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "Field": { + "type": "object", + "properties": { + "order": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string", + "nullable": true + }, + "label": { + "type": "string", + "nullable": true + }, + "unit": { + "type": "string", + "nullable": true + }, + "helpText": { + "type": "string", + "nullable": true + }, + "helpLink": { + "type": "string", + "nullable": true + }, + "value": { + "nullable": true + }, + "type": { + "type": "string", + "nullable": true + }, + "advanced": { + "type": "boolean" + }, + "selectOptions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SelectOption" + }, + "nullable": true + }, + "selectOptionsProviderAction": { + "type": "string", + "nullable": true + }, + "section": { + "type": "string", + "nullable": true + }, + "hidden": { + "type": "string", + "nullable": true + }, + "privacy": { + "$ref": "#/components/schemas/PrivacyLevel" + } + }, + "additionalProperties": false + }, + "FileDateType": { + "enum": [ + "none", + "localAirDate", + "utcAirDate" + ], + "type": "string" + }, + "HealthCheckResult": { + "enum": [ + "ok", + "notice", + "warning", + "error" + ], + "type": "string" + }, + "HealthResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "source": { + "type": "string", + "nullable": true + }, + "type": { + "$ref": "#/components/schemas/HealthCheckResult" + }, + "message": { + "type": "string", + "nullable": true + }, + "wikiUrl": { + "$ref": "#/components/schemas/HttpUri" + } + }, + "additionalProperties": false + }, + "HistoryResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "episodeId": { + "type": "integer", + "format": "int32" + }, + "seriesId": { + "type": "integer", + "format": "int32" + }, + "sourceTitle": { + "type": "string", + "nullable": true + }, + "language": { + "$ref": "#/components/schemas/Language" + }, + "quality": { + "$ref": "#/components/schemas/QualityModel" + }, + "customFormats": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomFormatResource" + }, + "nullable": true + }, + "qualityCutoffNotMet": { + "type": "boolean" + }, + "languageCutoffNotMet": { + "type": "boolean" + }, + "date": { + "type": "string", + "format": "date-time" + }, + "downloadId": { + "type": "string", + "nullable": true + }, + "eventType": { + "$ref": "#/components/schemas/EpisodeHistoryEventType" + }, + "data": { + "type": "object", + "additionalProperties": { + "type": "string", + "nullable": true + }, + "nullable": true + }, + "episode": { + "$ref": "#/components/schemas/EpisodeResource" + }, + "series": { + "$ref": "#/components/schemas/SeriesResource" + } + }, + "additionalProperties": false + }, + "HistoryResourcePagingResource": { + "type": "object", + "properties": { + "page": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "sortKey": { + "type": "string", + "nullable": true + }, + "sortDirection": { + "$ref": "#/components/schemas/SortDirection" + }, + "filters": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PagingResourceFilter" + }, + "nullable": true + }, + "totalRecords": { + "type": "integer", + "format": "int32" + }, + "records": { + "type": "array", + "items": { + "$ref": "#/components/schemas/HistoryResource" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "HostConfigResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "bindAddress": { + "type": "string", + "nullable": true + }, + "port": { + "type": "integer", + "format": "int32" + }, + "sslPort": { + "type": "integer", + "format": "int32" + }, + "enableSsl": { + "type": "boolean" + }, + "launchBrowser": { + "type": "boolean" + }, + "authenticationMethod": { + "$ref": "#/components/schemas/AuthenticationType" + }, + "authenticationRequired": { + "$ref": "#/components/schemas/AuthenticationRequiredType" + }, + "analyticsEnabled": { + "type": "boolean" + }, + "username": { + "type": "string", + "nullable": true + }, + "password": { + "type": "string", + "nullable": true + }, + "logLevel": { + "type": "string", + "nullable": true + }, + "consoleLogLevel": { + "type": "string", + "nullable": true + }, + "branch": { + "type": "string", + "nullable": true + }, + "apiKey": { + "type": "string", + "nullable": true + }, + "sslCertPath": { + "type": "string", + "nullable": true + }, + "sslCertPassword": { + "type": "string", + "nullable": true + }, + "urlBase": { + "type": "string", + "nullable": true + }, + "instanceName": { + "type": "string", + "nullable": true + }, + "updateAutomatically": { + "type": "boolean" + }, + "updateMechanism": { + "$ref": "#/components/schemas/UpdateMechanism" + }, + "updateScriptPath": { + "type": "string", + "nullable": true + }, + "proxyEnabled": { + "type": "boolean" + }, + "proxyType": { + "$ref": "#/components/schemas/ProxyType" + }, + "proxyHostname": { + "type": "string", + "nullable": true + }, + "proxyPort": { + "type": "integer", + "format": "int32" + }, + "proxyUsername": { + "type": "string", + "nullable": true + }, + "proxyPassword": { + "type": "string", + "nullable": true + }, + "proxyBypassFilter": { + "type": "string", + "nullable": true + }, + "proxyBypassLocalAddresses": { + "type": "boolean" + }, + "certificateValidation": { + "$ref": "#/components/schemas/CertificateValidationType" + }, + "backupFolder": { + "type": "string", + "nullable": true + }, + "backupInterval": { + "type": "integer", + "format": "int32" + }, + "backupRetention": { + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "HttpUri": { + "type": "object", + "properties": { + "fullUri": { + "type": "string", + "nullable": true, + "readOnly": true + }, + "scheme": { + "type": "string", + "nullable": true, + "readOnly": true + }, + "host": { + "type": "string", + "nullable": true, + "readOnly": true + }, + "port": { + "type": "integer", + "format": "int32", + "nullable": true, + "readOnly": true + }, + "path": { + "type": "string", + "nullable": true, + "readOnly": true + }, + "query": { + "type": "string", + "nullable": true, + "readOnly": true + }, + "fragment": { + "type": "string", + "nullable": true, + "readOnly": true + } + }, + "additionalProperties": false + }, + "ImportListExclusionResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "tvdbId": { + "type": "integer", + "format": "int32" + }, + "title": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "ImportListResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string", + "nullable": true + }, + "fields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Field" + }, + "nullable": true + }, + "implementationName": { + "type": "string", + "nullable": true + }, + "implementation": { + "type": "string", + "nullable": true + }, + "configContract": { + "type": "string", + "nullable": true + }, + "infoLink": { + "type": "string", + "nullable": true + }, + "message": { + "$ref": "#/components/schemas/ProviderMessage" + }, + "tags": { + "uniqueItems": true, + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "presets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImportListResource" + }, + "nullable": true + }, + "enableAutomaticAdd": { + "type": "boolean" + }, + "shouldMonitor": { + "$ref": "#/components/schemas/MonitorTypes" + }, + "rootFolderPath": { + "type": "string", + "nullable": true + }, + "qualityProfileId": { + "type": "integer", + "format": "int32" + }, + "languageProfileId": { + "type": "integer", + "format": "int32" + }, + "seriesType": { + "$ref": "#/components/schemas/SeriesTypes" + }, + "seasonFolder": { + "type": "boolean" + }, + "listType": { + "$ref": "#/components/schemas/ImportListType" + }, + "listOrder": { + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "ImportListType": { + "enum": [ + "program", + "plex", + "trakt", + "other" + ], + "type": "string" + }, + "IndexerConfigResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "minimumAge": { + "type": "integer", + "format": "int32" + }, + "retention": { + "type": "integer", + "format": "int32" + }, + "maximumSize": { + "type": "integer", + "format": "int32" + }, + "rssSyncInterval": { + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "IndexerResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string", + "nullable": true + }, + "fields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Field" + }, + "nullable": true + }, + "implementationName": { + "type": "string", + "nullable": true + }, + "implementation": { + "type": "string", + "nullable": true + }, + "configContract": { + "type": "string", + "nullable": true + }, + "infoLink": { + "type": "string", + "nullable": true + }, + "message": { + "$ref": "#/components/schemas/ProviderMessage" + }, + "tags": { + "uniqueItems": true, + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "presets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IndexerResource" + }, + "nullable": true + }, + "enableRss": { + "type": "boolean" + }, + "enableAutomaticSearch": { + "type": "boolean" + }, + "enableInteractiveSearch": { + "type": "boolean" + }, + "supportsRss": { + "type": "boolean" + }, + "supportsSearch": { + "type": "boolean" + }, + "protocol": { + "$ref": "#/components/schemas/DownloadProtocol" + }, + "priority": { + "type": "integer", + "format": "int32" + }, + "downloadClientId": { + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "Language": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "LanguageProfileItemResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "language": { + "$ref": "#/components/schemas/Language" + }, + "allowed": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "LanguageProfileResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string", + "nullable": true + }, + "upgradeAllowed": { + "type": "boolean" + }, + "cutoff": { + "$ref": "#/components/schemas/Language" + }, + "languages": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LanguageProfileItemResource" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "LogFileResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "filename": { + "type": "string", + "nullable": true + }, + "lastWriteTime": { + "type": "string", + "format": "date-time" + }, + "contentsUrl": { + "type": "string", + "nullable": true + }, + "downloadUrl": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "LogResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "time": { + "type": "string", + "format": "date-time" + }, + "exception": { + "type": "string", + "nullable": true + }, + "exceptionType": { + "type": "string", + "nullable": true + }, + "level": { + "type": "string", + "nullable": true + }, + "logger": { + "type": "string", + "nullable": true + }, + "message": { + "type": "string", + "nullable": true + }, + "method": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "LogResourcePagingResource": { + "type": "object", + "properties": { + "page": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "sortKey": { + "type": "string", + "nullable": true + }, + "sortDirection": { + "$ref": "#/components/schemas/SortDirection" + }, + "filters": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PagingResourceFilter" + }, + "nullable": true + }, + "totalRecords": { + "type": "integer", + "format": "int32" + }, + "records": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LogResource" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "ManualImportReprocessResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "path": { + "type": "string", + "nullable": true + }, + "seriesId": { + "type": "integer", + "format": "int32" + }, + "seasonNumber": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "episodes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EpisodeResource" + }, + "nullable": true + }, + "episodeIds": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "quality": { + "$ref": "#/components/schemas/QualityModel" + }, + "language": { + "$ref": "#/components/schemas/Language" + }, + "releaseGroup": { + "type": "string", + "nullable": true + }, + "downloadId": { + "type": "string", + "nullable": true + }, + "rejections": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Rejection" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "ManualImportResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "path": { + "type": "string", + "nullable": true + }, + "relativePath": { + "type": "string", + "nullable": true + }, + "folderName": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string", + "nullable": true + }, + "size": { + "type": "integer", + "format": "int64" + }, + "series": { + "$ref": "#/components/schemas/SeriesResource" + }, + "seasonNumber": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "episodes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EpisodeResource" + }, + "nullable": true + }, + "episodeFileId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "releaseGroup": { + "type": "string", + "nullable": true + }, + "quality": { + "$ref": "#/components/schemas/QualityModel" + }, + "language": { + "$ref": "#/components/schemas/Language" + }, + "qualityWeight": { + "type": "integer", + "format": "int32" + }, + "downloadId": { + "type": "string", + "nullable": true + }, + "rejections": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Rejection" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "MediaCover": { + "type": "object", + "properties": { + "coverType": { + "$ref": "#/components/schemas/MediaCoverTypes" + }, + "url": { + "type": "string", + "nullable": true + }, + "remoteUrl": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "MediaCoverTypes": { + "enum": [ + "unknown", + "poster", + "banner", + "fanart", + "screenshot", + "headshot" + ], + "type": "string" + }, + "MediaInfoResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "audioBitrate": { + "type": "integer", + "format": "int64" + }, + "audioChannels": { + "type": "number", + "format": "double" + }, + "audioCodec": { + "type": "string", + "nullable": true + }, + "audioLanguages": { + "type": "string", + "nullable": true + }, + "audioStreamCount": { + "type": "integer", + "format": "int32" + }, + "videoBitDepth": { + "type": "integer", + "format": "int32" + }, + "videoBitrate": { + "type": "integer", + "format": "int64" + }, + "videoCodec": { + "type": "string", + "nullable": true + }, + "videoFps": { + "type": "number", + "format": "double" + }, + "videoDynamicRange": { + "type": "string", + "nullable": true + }, + "videoDynamicRangeType": { + "type": "string", + "nullable": true + }, + "resolution": { + "type": "string", + "nullable": true + }, + "runTime": { + "type": "string", + "nullable": true + }, + "scanType": { + "type": "string", + "nullable": true + }, + "subtitles": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "MediaManagementConfigResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "autoUnmonitorPreviouslyDownloadedEpisodes": { + "type": "boolean" + }, + "recycleBin": { + "type": "string", + "nullable": true + }, + "recycleBinCleanupDays": { + "type": "integer", + "format": "int32" + }, + "downloadPropersAndRepacks": { + "$ref": "#/components/schemas/ProperDownloadTypes" + }, + "createEmptySeriesFolders": { + "type": "boolean" + }, + "deleteEmptyFolders": { + "type": "boolean" + }, + "fileDate": { + "$ref": "#/components/schemas/FileDateType" + }, + "rescanAfterRefresh": { + "$ref": "#/components/schemas/RescanAfterRefreshType" + }, + "setPermissionsLinux": { + "type": "boolean" + }, + "chmodFolder": { + "type": "string", + "nullable": true + }, + "chownGroup": { + "type": "string", + "nullable": true + }, + "episodeTitleRequired": { + "$ref": "#/components/schemas/EpisodeTitleRequiredType" + }, + "skipFreeSpaceCheckWhenImporting": { + "type": "boolean" + }, + "minimumFreeSpaceWhenImporting": { + "type": "integer", + "format": "int32" + }, + "copyUsingHardlinks": { + "type": "boolean" + }, + "importExtraFiles": { + "type": "boolean" + }, + "extraFileExtensions": { + "type": "string", + "nullable": true + }, + "enableMediaInfo": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "MetadataResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string", + "nullable": true + }, + "fields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Field" + }, + "nullable": true + }, + "implementationName": { + "type": "string", + "nullable": true + }, + "implementation": { + "type": "string", + "nullable": true + }, + "configContract": { + "type": "string", + "nullable": true + }, + "infoLink": { + "type": "string", + "nullable": true + }, + "message": { + "$ref": "#/components/schemas/ProviderMessage" + }, + "tags": { + "uniqueItems": true, + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "presets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MetadataResource" + }, + "nullable": true + }, + "enable": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "MonitorTypes": { + "enum": [ + "unknown", + "all", + "future", + "missing", + "existing", + "firstSeason", + "latestSeason", + "pilot", + "none" + ], + "type": "string" + }, + "MonitoringOptions": { + "type": "object", + "properties": { + "ignoreEpisodesWithFiles": { + "type": "boolean" + }, + "ignoreEpisodesWithoutFiles": { + "type": "boolean" + }, + "monitor": { + "$ref": "#/components/schemas/MonitorTypes" + } + }, + "additionalProperties": false + }, + "NamingConfigResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "renameEpisodes": { + "type": "boolean" + }, + "replaceIllegalCharacters": { + "type": "boolean" + }, + "multiEpisodeStyle": { + "type": "integer", + "format": "int32" + }, + "standardEpisodeFormat": { + "type": "string", + "nullable": true + }, + "dailyEpisodeFormat": { + "type": "string", + "nullable": true + }, + "animeEpisodeFormat": { + "type": "string", + "nullable": true + }, + "seriesFolderFormat": { + "type": "string", + "nullable": true + }, + "seasonFolderFormat": { + "type": "string", + "nullable": true + }, + "specialsFolderFormat": { + "type": "string", + "nullable": true + }, + "includeSeriesTitle": { + "type": "boolean" + }, + "includeEpisodeTitle": { + "type": "boolean" + }, + "includeQuality": { + "type": "boolean" + }, + "replaceSpaces": { + "type": "boolean" + }, + "separator": { + "type": "string", + "nullable": true + }, + "numberStyle": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "NotificationResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string", + "nullable": true + }, + "fields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Field" + }, + "nullable": true + }, + "implementationName": { + "type": "string", + "nullable": true + }, + "implementation": { + "type": "string", + "nullable": true + }, + "configContract": { + "type": "string", + "nullable": true + }, + "infoLink": { + "type": "string", + "nullable": true + }, + "message": { + "$ref": "#/components/schemas/ProviderMessage" + }, + "tags": { + "uniqueItems": true, + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "presets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NotificationResource" + }, + "nullable": true + }, + "link": { + "type": "string", + "nullable": true + }, + "onGrab": { + "type": "boolean" + }, + "onDownload": { + "type": "boolean" + }, + "onUpgrade": { + "type": "boolean" + }, + "onRename": { + "type": "boolean" + }, + "onSeriesDelete": { + "type": "boolean" + }, + "onEpisodeFileDelete": { + "type": "boolean" + }, + "onEpisodeFileDeleteForUpgrade": { + "type": "boolean" + }, + "onHealthIssue": { + "type": "boolean" + }, + "onApplicationUpdate": { + "type": "boolean" + }, + "supportsOnGrab": { + "type": "boolean" + }, + "supportsOnDownload": { + "type": "boolean" + }, + "supportsOnUpgrade": { + "type": "boolean" + }, + "supportsOnRename": { + "type": "boolean" + }, + "supportsOnSeriesDelete": { + "type": "boolean" + }, + "supportsOnEpisodeFileDelete": { + "type": "boolean" + }, + "supportsOnEpisodeFileDeleteForUpgrade": { + "type": "boolean" + }, + "supportsOnHealthIssue": { + "type": "boolean" + }, + "supportsOnApplicationUpdate": { + "type": "boolean" + }, + "includeHealthWarnings": { + "type": "boolean" + }, + "testCommand": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "PagingResourceFilter": { + "type": "object", + "properties": { + "key": { + "type": "string", + "nullable": true + }, + "value": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "ParseResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "title": { + "type": "string", + "nullable": true + }, + "parsedEpisodeInfo": { + "$ref": "#/components/schemas/ParsedEpisodeInfo" + }, + "series": { + "$ref": "#/components/schemas/SeriesResource" + }, + "episodes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EpisodeResource" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "ParsedEpisodeInfo": { + "type": "object", + "properties": { + "releaseTitle": { + "type": "string", + "nullable": true + }, + "seriesTitle": { + "type": "string", + "nullable": true + }, + "seriesTitleInfo": { + "$ref": "#/components/schemas/SeriesTitleInfo" + }, + "quality": { + "$ref": "#/components/schemas/QualityModel" + }, + "seasonNumber": { + "type": "integer", + "format": "int32" + }, + "episodeNumbers": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "absoluteEpisodeNumbers": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "specialAbsoluteEpisodeNumbers": { + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "nullable": true + }, + "airDate": { + "type": "string", + "nullable": true + }, + "language": { + "$ref": "#/components/schemas/Language" + }, + "fullSeason": { + "type": "boolean" + }, + "isPartialSeason": { + "type": "boolean" + }, + "isMultiSeason": { + "type": "boolean" + }, + "isSeasonExtra": { + "type": "boolean" + }, + "special": { + "type": "boolean" + }, + "releaseGroup": { + "type": "string", + "nullable": true + }, + "releaseHash": { + "type": "string", + "nullable": true + }, + "seasonPart": { + "type": "integer", + "format": "int32" + }, + "releaseTokens": { + "type": "string", + "nullable": true + }, + "dailyPart": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "isDaily": { + "type": "boolean", + "readOnly": true + }, + "isAbsoluteNumbering": { + "type": "boolean", + "readOnly": true + }, + "isPossibleSpecialEpisode": { + "type": "boolean", + "readOnly": true + }, + "isPossibleSceneSeasonSpecial": { + "type": "boolean", + "readOnly": true + } + }, + "additionalProperties": false + }, + "PrivacyLevel": { + "enum": [ + "normal", + "password", + "apiKey", + "userName" + ], + "type": "string" + }, + "ProfileFormatItemResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "format": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string", + "nullable": true + }, + "score": { + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "ProperDownloadTypes": { + "enum": [ + "preferAndUpgrade", + "doNotUpgrade", + "doNotPrefer" + ], + "type": "string" + }, + "ProviderMessage": { + "type": "object", + "properties": { + "message": { + "type": "string", + "nullable": true + }, + "type": { + "$ref": "#/components/schemas/ProviderMessageType" + } + }, + "additionalProperties": false + }, + "ProviderMessageType": { + "enum": [ + "info", + "warning", + "error" + ], + "type": "string" + }, + "ProxyType": { + "enum": [ + "http", + "socks4", + "socks5" + ], + "type": "string" + }, + "Quality": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string", + "nullable": true + }, + "source": { + "$ref": "#/components/schemas/QualitySource" + }, + "resolution": { + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "QualityDefinitionResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "quality": { + "$ref": "#/components/schemas/Quality" + }, + "title": { + "type": "string", + "nullable": true + }, + "weight": { + "type": "integer", + "format": "int32" + }, + "minSize": { + "type": "number", + "format": "double", + "nullable": true + }, + "maxSize": { + "type": "number", + "format": "double", + "nullable": true + } + }, + "additionalProperties": false + }, + "QualityModel": { + "type": "object", + "properties": { + "quality": { + "$ref": "#/components/schemas/Quality" + }, + "revision": { + "$ref": "#/components/schemas/Revision" + } + }, + "additionalProperties": false + }, + "QualityProfileQualityItemResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string", + "nullable": true + }, + "quality": { + "$ref": "#/components/schemas/Quality" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/QualityProfileQualityItemResource" + }, + "nullable": true + }, + "allowed": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "QualityProfileResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string", + "nullable": true + }, + "upgradeAllowed": { + "type": "boolean" + }, + "cutoff": { + "type": "integer", + "format": "int32" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/QualityProfileQualityItemResource" + }, + "nullable": true + }, + "minFormatScore": { + "type": "integer", + "format": "int32" + }, + "cutoffFormatScore": { + "type": "integer", + "format": "int32" + }, + "formatItems": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileFormatItemResource" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "QualitySource": { + "enum": [ + "unknown", + "television", + "televisionRaw", + "web", + "webRip", + "dvd", + "bluray", + "blurayRaw" + ], + "type": "string" + }, + "QueueBulkResource": { + "type": "object", + "properties": { + "ids": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "QueueResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "seriesId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "episodeId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "series": { + "$ref": "#/components/schemas/SeriesResource" + }, + "episode": { + "$ref": "#/components/schemas/EpisodeResource" + }, + "language": { + "$ref": "#/components/schemas/Language" + }, + "quality": { + "$ref": "#/components/schemas/QualityModel" + }, + "customFormats": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomFormatResource" + }, + "nullable": true + }, + "size": { + "type": "number", + "format": "double" + }, + "title": { + "type": "string", + "nullable": true + }, + "sizeleft": { + "type": "number", + "format": "double" + }, + "timeleft": { + "$ref": "#/components/schemas/TimeSpan" + }, + "estimatedCompletionTime": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "status": { + "type": "string", + "nullable": true + }, + "trackedDownloadStatus": { + "$ref": "#/components/schemas/TrackedDownloadStatus" + }, + "trackedDownloadState": { + "$ref": "#/components/schemas/TrackedDownloadState" + }, + "statusMessages": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TrackedDownloadStatusMessage" + }, + "nullable": true + }, + "errorMessage": { + "type": "string", + "nullable": true + }, + "downloadId": { + "type": "string", + "nullable": true + }, + "protocol": { + "$ref": "#/components/schemas/DownloadProtocol" + }, + "downloadClient": { + "type": "string", + "nullable": true + }, + "indexer": { + "type": "string", + "nullable": true + }, + "outputPath": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "QueueResourcePagingResource": { + "type": "object", + "properties": { + "page": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "sortKey": { + "type": "string", + "nullable": true + }, + "sortDirection": { + "$ref": "#/components/schemas/SortDirection" + }, + "filters": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PagingResourceFilter" + }, + "nullable": true + }, + "totalRecords": { + "type": "integer", + "format": "int32" + }, + "records": { + "type": "array", + "items": { + "$ref": "#/components/schemas/QueueResource" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "QueueStatusResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "totalCount": { + "type": "integer", + "format": "int32" + }, + "count": { + "type": "integer", + "format": "int32" + }, + "unknownCount": { + "type": "integer", + "format": "int32" + }, + "errors": { + "type": "boolean" + }, + "warnings": { + "type": "boolean" + }, + "unknownErrors": { + "type": "boolean" + }, + "unknownWarnings": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "Ratings": { + "type": "object", + "properties": { + "votes": { + "type": "integer", + "format": "int32" + }, + "value": { + "type": "number", + "format": "double" + } + }, + "additionalProperties": false + }, + "Rejection": { + "type": "object", + "properties": { + "reason": { + "type": "string", + "nullable": true + }, + "type": { + "$ref": "#/components/schemas/RejectionType" + } + }, + "additionalProperties": false + }, + "RejectionType": { + "enum": [ + "permanent", + "temporary" + ], + "type": "string" + }, + "ReleaseProfileResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string", + "nullable": true + }, + "enabled": { + "type": "boolean" + }, + "required": { + "nullable": true + }, + "ignored": { + "nullable": true + }, + "indexerId": { + "type": "integer", + "format": "int32" + }, + "tags": { + "uniqueItems": true, + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "ReleaseResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "guid": { + "type": "string", + "nullable": true + }, + "quality": { + "$ref": "#/components/schemas/QualityModel" + }, + "qualityWeight": { + "type": "integer", + "format": "int32" + }, + "age": { + "type": "integer", + "format": "int32" + }, + "ageHours": { + "type": "number", + "format": "double" + }, + "ageMinutes": { + "type": "number", + "format": "double" + }, + "size": { + "type": "integer", + "format": "int64" + }, + "indexerId": { + "type": "integer", + "format": "int32" + }, + "indexer": { + "type": "string", + "nullable": true + }, + "releaseGroup": { + "type": "string", + "nullable": true + }, + "subGroup": { + "type": "string", + "nullable": true + }, + "releaseHash": { + "type": "string", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "fullSeason": { + "type": "boolean" + }, + "sceneSource": { + "type": "boolean" + }, + "seasonNumber": { + "type": "integer", + "format": "int32" + }, + "language": { + "$ref": "#/components/schemas/Language" + }, + "languageWeight": { + "type": "integer", + "format": "int32" + }, + "airDate": { + "type": "string", + "nullable": true + }, + "seriesTitle": { + "type": "string", + "nullable": true + }, + "episodeNumbers": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "absoluteEpisodeNumbers": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "mappedSeasonNumber": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "mappedEpisodeNumbers": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "mappedAbsoluteEpisodeNumbers": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "approved": { + "type": "boolean" + }, + "temporarilyRejected": { + "type": "boolean" + }, + "rejected": { + "type": "boolean" + }, + "tvdbId": { + "type": "integer", + "format": "int32" + }, + "tvRageId": { + "type": "integer", + "format": "int32" + }, + "rejections": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "publishDate": { + "type": "string", + "format": "date-time" + }, + "commentUrl": { + "type": "string", + "nullable": true + }, + "downloadUrl": { + "type": "string", + "nullable": true + }, + "infoUrl": { + "type": "string", + "nullable": true + }, + "episodeRequested": { + "type": "boolean" + }, + "downloadAllowed": { + "type": "boolean" + }, + "releaseWeight": { + "type": "integer", + "format": "int32" + }, + "customFormats": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomFormatResource" + }, + "nullable": true + }, + "customFormatScore": { + "type": "integer", + "format": "int32" + }, + "sceneMapping": { + "$ref": "#/components/schemas/AlternateTitleResource" + }, + "magnetUrl": { + "type": "string", + "nullable": true + }, + "infoHash": { + "type": "string", + "nullable": true + }, + "seeders": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "leechers": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "protocol": { + "$ref": "#/components/schemas/DownloadProtocol" + }, + "isDaily": { + "type": "boolean" + }, + "isAbsoluteNumbering": { + "type": "boolean" + }, + "isPossibleSpecialEpisode": { + "type": "boolean" + }, + "special": { + "type": "boolean" + }, + "seriesId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "episodeId": { + "type": "integer", + "format": "int32", + "nullable": true + } + }, + "additionalProperties": false + }, + "RemotePathMappingResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "host": { + "type": "string", + "nullable": true + }, + "remotePath": { + "type": "string", + "nullable": true + }, + "localPath": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "RenameEpisodeResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "seriesId": { + "type": "integer", + "format": "int32" + }, + "seasonNumber": { + "type": "integer", + "format": "int32" + }, + "episodeNumbers": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "episodeFileId": { + "type": "integer", + "format": "int32" + }, + "existingPath": { + "type": "string", + "nullable": true + }, + "newPath": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "RescanAfterRefreshType": { + "enum": [ + "always", + "afterManual", + "never" + ], + "type": "string" + }, + "Revision": { + "type": "object", + "properties": { + "version": { + "type": "integer", + "format": "int32" + }, + "real": { + "type": "integer", + "format": "int32" + }, + "isRepack": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "RootFolderResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "path": { + "type": "string", + "nullable": true + }, + "accessible": { + "type": "boolean" + }, + "freeSpace": { + "type": "integer", + "format": "int64", + "nullable": true + }, + "unmappedFolders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UnmappedFolder" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "SeasonPassResource": { + "type": "object", + "properties": { + "series": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SeasonPassSeriesResource" + }, + "nullable": true + }, + "monitoringOptions": { + "$ref": "#/components/schemas/MonitoringOptions" + } + }, + "additionalProperties": false + }, + "SeasonPassSeriesResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "monitored": { + "type": "boolean", + "nullable": true + }, + "seasons": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SeasonResource" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "SeasonResource": { + "type": "object", + "properties": { + "seasonNumber": { + "type": "integer", + "format": "int32" + }, + "monitored": { + "type": "boolean" + }, + "statistics": { + "$ref": "#/components/schemas/SeasonStatisticsResource" + }, + "images": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MediaCover" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "SeasonStatisticsResource": { + "type": "object", + "properties": { + "nextAiring": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "previousAiring": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "episodeFileCount": { + "type": "integer", + "format": "int32" + }, + "episodeCount": { + "type": "integer", + "format": "int32" + }, + "totalEpisodeCount": { + "type": "integer", + "format": "int32" + }, + "sizeOnDisk": { + "type": "integer", + "format": "int64" + }, + "releaseGroups": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "percentOfEpisodes": { + "type": "number", + "format": "double", + "readOnly": true + } + }, + "additionalProperties": false + }, + "SelectOption": { + "type": "object", + "properties": { + "value": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string", + "nullable": true + }, + "order": { + "type": "integer", + "format": "int32" + }, + "hint": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "SeriesEditorResource": { + "type": "object", + "properties": { + "seriesIds": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "monitored": { + "type": "boolean", + "nullable": true + }, + "qualityProfileId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "languageProfileId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "seriesType": { + "$ref": "#/components/schemas/SeriesTypes" + }, + "seasonFolder": { + "type": "boolean", + "nullable": true + }, + "rootFolderPath": { + "type": "string", + "nullable": true + }, + "tags": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "applyTags": { + "$ref": "#/components/schemas/ApplyTags" + }, + "moveFiles": { + "type": "boolean" + }, + "deleteFiles": { + "type": "boolean" + }, + "addImportListExclusion": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "SeriesResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "title": { + "type": "string", + "nullable": true + }, + "alternateTitles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AlternateTitleResource" + }, + "nullable": true + }, + "sortTitle": { + "type": "string", + "nullable": true + }, + "status": { + "$ref": "#/components/schemas/SeriesStatusType" + }, + "ended": { + "type": "boolean", + "readOnly": true + }, + "profileName": { + "type": "string", + "nullable": true + }, + "overview": { + "type": "string", + "nullable": true + }, + "nextAiring": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "previousAiring": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "network": { + "type": "string", + "nullable": true + }, + "airTime": { + "type": "string", + "nullable": true + }, + "images": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MediaCover" + }, + "nullable": true + }, + "remotePoster": { + "type": "string", + "nullable": true + }, + "seasons": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SeasonResource" + }, + "nullable": true + }, + "year": { + "type": "integer", + "format": "int32" + }, + "path": { + "type": "string", + "nullable": true + }, + "qualityProfileId": { + "type": "integer", + "format": "int32" + }, + "languageProfileId": { + "type": "integer", + "format": "int32" + }, + "seasonFolder": { + "type": "boolean" + }, + "monitored": { + "type": "boolean" + }, + "useSceneNumbering": { + "type": "boolean" + }, + "runtime": { + "type": "integer", + "format": "int32" + }, + "tvdbId": { + "type": "integer", + "format": "int32" + }, + "tvRageId": { + "type": "integer", + "format": "int32" + }, + "tvMazeId": { + "type": "integer", + "format": "int32" + }, + "firstAired": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "seriesType": { + "$ref": "#/components/schemas/SeriesTypes" + }, + "cleanTitle": { + "type": "string", + "nullable": true + }, + "imdbId": { + "type": "string", + "nullable": true + }, + "titleSlug": { + "type": "string", + "nullable": true + }, + "rootFolderPath": { + "type": "string", + "nullable": true + }, + "folder": { + "type": "string", + "nullable": true + }, + "certification": { + "type": "string", + "nullable": true + }, + "genres": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "tags": { + "uniqueItems": true, + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "added": { + "type": "string", + "format": "date-time" + }, + "addOptions": { + "$ref": "#/components/schemas/AddSeriesOptions" + }, + "ratings": { + "$ref": "#/components/schemas/Ratings" + }, + "statistics": { + "$ref": "#/components/schemas/SeriesStatisticsResource" + }, + "episodesChanged": { + "type": "boolean", + "nullable": true + } + }, + "additionalProperties": false + }, + "SeriesStatisticsResource": { + "type": "object", + "properties": { + "seasonCount": { + "type": "integer", + "format": "int32" + }, + "episodeFileCount": { + "type": "integer", + "format": "int32" + }, + "episodeCount": { + "type": "integer", + "format": "int32" + }, + "totalEpisodeCount": { + "type": "integer", + "format": "int32" + }, + "sizeOnDisk": { + "type": "integer", + "format": "int64" + }, + "releaseGroups": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "percentOfEpisodes": { + "type": "number", + "format": "double", + "readOnly": true + } + }, + "additionalProperties": false + }, + "SeriesStatusType": { + "enum": [ + "continuing", + "ended", + "upcoming", + "deleted" + ], + "type": "string" + }, + "SeriesTitleInfo": { + "type": "object", + "properties": { + "title": { + "type": "string", + "nullable": true + }, + "titleWithoutYear": { + "type": "string", + "nullable": true + }, + "year": { + "type": "integer", + "format": "int32" + }, + "allTitles": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "SeriesTypes": { + "enum": [ + "standard", + "daily", + "anime" + ], + "type": "string" + }, + "SortDirection": { + "enum": [ + "default", + "ascending", + "descending" + ], + "type": "string" + }, + "TagDetailsResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + }, + "delayProfileIds": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "importListIds": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "notificationIds": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "restrictionIds": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "indexerIds": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + }, + "seriesIds": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "TagResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "label": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "TaskResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string", + "nullable": true + }, + "taskName": { + "type": "string", + "nullable": true + }, + "interval": { + "type": "integer", + "format": "int32" + }, + "lastExecution": { + "type": "string", + "format": "date-time" + }, + "nextExecution": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + }, + "TimeSpan": { + "type": "object", + "properties": { + "ticks": { + "type": "integer", + "format": "int64" + }, + "days": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "hours": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "milliseconds": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "minutes": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "seconds": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "totalDays": { + "type": "number", + "format": "double", + "readOnly": true + }, + "totalHours": { + "type": "number", + "format": "double", + "readOnly": true + }, + "totalMilliseconds": { + "type": "number", + "format": "double", + "readOnly": true + }, + "totalMinutes": { + "type": "number", + "format": "double", + "readOnly": true + }, + "totalSeconds": { + "type": "number", + "format": "double", + "readOnly": true + } + }, + "additionalProperties": false + }, + "TrackedDownloadState": { + "enum": [ + "downloading", + "importPending", + "importing", + "imported", + "failedPending", + "failed", + "ignored" + ], + "type": "string" + }, + "TrackedDownloadStatus": { + "enum": [ + "ok", + "warning", + "error" + ], + "type": "string" + }, + "TrackedDownloadStatusMessage": { + "type": "object", + "properties": { + "title": { + "type": "string", + "nullable": true + }, + "messages": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "UiConfigResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "firstDayOfWeek": { + "type": "integer", + "format": "int32" + }, + "calendarWeekColumnHeader": { + "type": "string", + "nullable": true + }, + "shortDateFormat": { + "type": "string", + "nullable": true + }, + "longDateFormat": { + "type": "string", + "nullable": true + }, + "timeFormat": { + "type": "string", + "nullable": true + }, + "showRelativeDates": { + "type": "boolean" + }, + "enableColorImpairedMode": { + "type": "boolean" + }, + "theme": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "UnmappedFolder": { + "type": "object", + "properties": { + "name": { + "type": "string", + "nullable": true + }, + "path": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "UpdateChanges": { + "type": "object", + "properties": { + "new": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "fixed": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "UpdateMechanism": { + "enum": [ + "builtIn", + "script", + "external", + "apt", + "docker" + ], + "type": "string" + }, + "UpdateResource": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "version": { + "$ref": "#/components/schemas/Version" + }, + "branch": { + "type": "string", + "nullable": true + }, + "releaseDate": { + "type": "string", + "format": "date-time" + }, + "fileName": { + "type": "string", + "nullable": true + }, + "url": { + "type": "string", + "nullable": true + }, + "installed": { + "type": "boolean" + }, + "installedOn": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "installable": { + "type": "boolean" + }, + "latest": { + "type": "boolean" + }, + "changes": { + "$ref": "#/components/schemas/UpdateChanges" + }, + "hash": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "Version": { + "type": "object", + "properties": { + "major": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "minor": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "build": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "revision": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "majorRevision": { + "type": "integer", + "format": "int32", + "readOnly": true + }, + "minorRevision": { + "type": "integer", + "format": "int32", + "readOnly": true + } + }, + "additionalProperties": false + } + }, + "securitySchemes": { + "X-Api-Key": { + "type": "apiKey", + "description": "Apikey passed as header", + "name": "X-Api-Key", + "in": "header" + }, + "apikey": { + "type": "apiKey", + "description": "Apikey passed as header", + "name": "apikey", + "in": "query" + } + } + }, + "security": [ + { + "X-Api-Key": [ ] + }, + { + "apikey": [ ] + } + ] +} \ No newline at end of file diff --git a/src/Sonarr.Http/REST/RestController.cs b/src/Sonarr.Http/REST/RestController.cs index ebb9e1e00..71c951c9e 100644 --- a/src/Sonarr.Http/REST/RestController.cs +++ b/src/Sonarr.Http/REST/RestController.cs @@ -39,6 +39,7 @@ namespace Sonarr.Http.REST } [RestGetById] + [Produces("application/json")] public ActionResult GetResourceByIdWithErrorHandler(int id) { try