diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 26f1454..f5557d8 100755 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,12 +1,12 @@ lockVersion: 2.0.0 id: 5a8dbcbc-e0ee-41f0-9d84-b8b50567d1e9 management: - docChecksum: 48621865085324b8b8eda5901f092a37 + docChecksum: b2624bb972abebc11eff6d460c59de68 docVersion: 0.0.3 - speakeasyVersion: 1.542.1 - generationVersion: 2.597.9 - releaseVersion: 0.14.11 - configChecksum: de264f220936594c4287b1d684db961e + speakeasyVersion: 1.555.2 + generationVersion: 2.620.2 + releaseVersion: 0.15.0 + configChecksum: 71515a94a0f2e543a0c76480036249a6 repoURL: https://github.com/LukeHagar/plexcsharp.git repoSubDirectory: . published: true @@ -14,22 +14,22 @@ features: csharp: additionalDependencies: 0.1.0 constsAndDefaults: 0.0.1 - core: 3.10.16 + core: 3.11.0 deprecations: 2.81.2 enums: 2.82.0 - errors: 0.2.0 + errors: 0.2.1 flattening: 2.81.3 globalSecurity: 2.83.7 globalSecurityCallbacks: 0.1.0 globalSecurityFlattening: 0.1.0 - globalServerURLs: 2.82.3 + globalServerURLs: 2.82.4 intellisenseMarkdownSupport: 0.1.0 methodArguments: 0.2.0 methodServerURLs: 2.82.1 nameOverrides: 2.81.2 nullables: 0.1.1 responseFormat: 0.0.4 - sdkHooks: 0.1.0 + sdkHooks: 0.2.0 unions: 0.2.2 generatedFiles: - .gitattributes @@ -90,10 +90,6 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Errors/GetAllLibrariesErrors.cs - LukeHagar/PlexAPI/SDK/Models/Errors/GetAllLibrariesLibraryErrors.cs - LukeHagar/PlexAPI/SDK/Models/Errors/GetAllLibrariesUnauthorized.cs - - LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryBadRequest.cs - - LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryErrors.cs - - LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryLibraryErrors.cs - - LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryUnauthorized.cs - LukeHagar/PlexAPI/SDK/Models/Errors/GetAvailableClientsBadRequest.cs - LukeHagar/PlexAPI/SDK/Models/Errors/GetAvailableClientsErrors.cs - LukeHagar/PlexAPI/SDK/Models/Errors/GetAvailableClientsServerErrors.cs @@ -154,6 +150,10 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Errors/GetLibraryItemsErrors.cs - LukeHagar/PlexAPI/SDK/Models/Errors/GetLibraryItemsLibraryErrors.cs - LukeHagar/PlexAPI/SDK/Models/Errors/GetLibraryItemsUnauthorized.cs + - LukeHagar/PlexAPI/SDK/Models/Errors/GetLibrarySectionsAllBadRequest.cs + - LukeHagar/PlexAPI/SDK/Models/Errors/GetLibrarySectionsAllErrors.cs + - LukeHagar/PlexAPI/SDK/Models/Errors/GetLibrarySectionsAllLibraryErrors.cs + - LukeHagar/PlexAPI/SDK/Models/Errors/GetLibrarySectionsAllUnauthorized.cs - LukeHagar/PlexAPI/SDK/Models/Errors/GetMediaMetaDataBadRequest.cs - LukeHagar/PlexAPI/SDK/Models/Errors/GetMediaMetaDataErrors.cs - LukeHagar/PlexAPI/SDK/Models/Errors/GetMediaMetaDataLibraryErrors.cs @@ -432,41 +432,6 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllLibrariesResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllLibrariesResponseBody.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllLibrariesType.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryActiveDirection.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryCollection.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryCountry.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryDefaultDirection.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryDirector.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryField.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryFieldType.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryFilter.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryGenre.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryGuids.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryHasThumbnail.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryImage.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryLibraryOptimizedForStreaming.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryLibraryResponseType.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryLibraryType.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMedia.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMediaContainer.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMeta.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMetadata.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryOperator.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryOptimizedForStreaming.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryOptimizedForStreaming1.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryPart.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryQueryParamIncludeMeta.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryQueryParamType.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryRequest.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryResponse.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryResponseBody.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryRole.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibrarySort.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryStream.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryStreamType.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryType.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryUltraBlurColors.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryWriter.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetAvailableClientsMediaContainer.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetAvailableClientsResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetAvailableClientsResponseBody.cs @@ -571,6 +536,41 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsType.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsUltraBlurColors.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsWriter.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllActiveDirection.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllCollection.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllCountry.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllDefaultDirection.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllDirector.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllField.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllFieldType.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllFilter.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllGenre.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllGuids.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllHasThumbnail.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllImage.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllLibraryOptimizedForStreaming.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllLibraryResponseType.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllLibraryType.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllMedia.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllMediaContainer.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllMeta.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllMetadata.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllOperator.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllOptimizedForStreaming.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllOptimizedForStreaming1.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllPart.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllQueryParamIncludeMeta.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllQueryParamType.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllRequest.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllResponse.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllResponseBody.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllRole.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllSort.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllStream.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllStreamType.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllType.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllUltraBlurColors.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllWriter.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaArtsMediaContainer.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaArtsMetadata.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaArtsRequest.cs @@ -790,6 +790,7 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Requests/GetTopWatchedContentGuids.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetTopWatchedContentMediaContainer.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetTopWatchedContentMetadata.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetTopWatchedContentQueryParamIncludeGuids.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetTopWatchedContentQueryParamType.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetTopWatchedContentRequest.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetTopWatchedContentResponse.cs @@ -964,6 +965,7 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Playlists.cs - LukeHagar/PlexAPI/SDK/Plex.cs - LukeHagar/PlexAPI/SDK/PlexAPI.cs + - LukeHagar/PlexAPI/SDK/SDKConfig.cs - LukeHagar/PlexAPI/SDK/Search.cs - LukeHagar/PlexAPI/SDK/Server.cs - LukeHagar/PlexAPI/SDK/Sessions.cs @@ -1037,10 +1039,6 @@ generatedFiles: - docs/Models/Errors/GetAllLibrariesErrors.md - docs/Models/Errors/GetAllLibrariesLibraryErrors.md - docs/Models/Errors/GetAllLibrariesUnauthorized.md - - docs/Models/Errors/GetAllMediaLibraryBadRequest.md - - docs/Models/Errors/GetAllMediaLibraryErrors.md - - docs/Models/Errors/GetAllMediaLibraryLibraryErrors.md - - docs/Models/Errors/GetAllMediaLibraryUnauthorized.md - docs/Models/Errors/GetAvailableClientsBadRequest.md - docs/Models/Errors/GetAvailableClientsErrors.md - docs/Models/Errors/GetAvailableClientsServerErrors.md @@ -1101,6 +1099,10 @@ generatedFiles: - docs/Models/Errors/GetLibraryItemsErrors.md - docs/Models/Errors/GetLibraryItemsLibraryErrors.md - docs/Models/Errors/GetLibraryItemsUnauthorized.md + - docs/Models/Errors/GetLibrarySectionsAllBadRequest.md + - docs/Models/Errors/GetLibrarySectionsAllErrors.md + - docs/Models/Errors/GetLibrarySectionsAllLibraryErrors.md + - docs/Models/Errors/GetLibrarySectionsAllUnauthorized.md - docs/Models/Errors/GetMediaMetaDataBadRequest.md - docs/Models/Errors/GetMediaMetaDataErrors.md - docs/Models/Errors/GetMediaMetaDataLibraryErrors.md @@ -1378,41 +1380,6 @@ generatedFiles: - docs/Models/Requests/GetAllLibrariesResponse.md - docs/Models/Requests/GetAllLibrariesResponseBody.md - docs/Models/Requests/GetAllLibrariesType.md - - docs/Models/Requests/GetAllMediaLibraryActiveDirection.md - - docs/Models/Requests/GetAllMediaLibraryCollection.md - - docs/Models/Requests/GetAllMediaLibraryCountry.md - - docs/Models/Requests/GetAllMediaLibraryDefaultDirection.md - - docs/Models/Requests/GetAllMediaLibraryDirector.md - - docs/Models/Requests/GetAllMediaLibraryField.md - - docs/Models/Requests/GetAllMediaLibraryFieldType.md - - docs/Models/Requests/GetAllMediaLibraryFilter.md - - docs/Models/Requests/GetAllMediaLibraryGenre.md - - docs/Models/Requests/GetAllMediaLibraryGuids.md - - docs/Models/Requests/GetAllMediaLibraryHasThumbnail.md - - docs/Models/Requests/GetAllMediaLibraryImage.md - - docs/Models/Requests/GetAllMediaLibraryLibraryOptimizedForStreaming.md - - docs/Models/Requests/GetAllMediaLibraryLibraryResponseType.md - - docs/Models/Requests/GetAllMediaLibraryLibraryType.md - - docs/Models/Requests/GetAllMediaLibraryMedia.md - - docs/Models/Requests/GetAllMediaLibraryMediaContainer.md - - docs/Models/Requests/GetAllMediaLibraryMeta.md - - docs/Models/Requests/GetAllMediaLibraryMetadata.md - - docs/Models/Requests/GetAllMediaLibraryOperator.md - - docs/Models/Requests/GetAllMediaLibraryOptimizedForStreaming.md - - docs/Models/Requests/GetAllMediaLibraryOptimizedForStreaming1.md - - docs/Models/Requests/GetAllMediaLibraryPart.md - - docs/Models/Requests/GetAllMediaLibraryQueryParamIncludeMeta.md - - docs/Models/Requests/GetAllMediaLibraryQueryParamType.md - - docs/Models/Requests/GetAllMediaLibraryRequest.md - - docs/Models/Requests/GetAllMediaLibraryResponse.md - - docs/Models/Requests/GetAllMediaLibraryResponseBody.md - - docs/Models/Requests/GetAllMediaLibraryRole.md - - docs/Models/Requests/GetAllMediaLibrarySort.md - - docs/Models/Requests/GetAllMediaLibraryStream.md - - docs/Models/Requests/GetAllMediaLibraryStreamType.md - - docs/Models/Requests/GetAllMediaLibraryType.md - - docs/Models/Requests/GetAllMediaLibraryUltraBlurColors.md - - docs/Models/Requests/GetAllMediaLibraryWriter.md - docs/Models/Requests/GetAvailableClientsMediaContainer.md - docs/Models/Requests/GetAvailableClientsResponse.md - docs/Models/Requests/GetAvailableClientsResponseBody.md @@ -1517,6 +1484,41 @@ generatedFiles: - docs/Models/Requests/GetLibraryItemsType.md - docs/Models/Requests/GetLibraryItemsUltraBlurColors.md - docs/Models/Requests/GetLibraryItemsWriter.md + - docs/Models/Requests/GetLibrarySectionsAllActiveDirection.md + - docs/Models/Requests/GetLibrarySectionsAllCollection.md + - docs/Models/Requests/GetLibrarySectionsAllCountry.md + - docs/Models/Requests/GetLibrarySectionsAllDefaultDirection.md + - docs/Models/Requests/GetLibrarySectionsAllDirector.md + - docs/Models/Requests/GetLibrarySectionsAllField.md + - docs/Models/Requests/GetLibrarySectionsAllFieldType.md + - docs/Models/Requests/GetLibrarySectionsAllFilter.md + - docs/Models/Requests/GetLibrarySectionsAllGenre.md + - docs/Models/Requests/GetLibrarySectionsAllGuids.md + - docs/Models/Requests/GetLibrarySectionsAllHasThumbnail.md + - docs/Models/Requests/GetLibrarySectionsAllImage.md + - docs/Models/Requests/GetLibrarySectionsAllLibraryOptimizedForStreaming.md + - docs/Models/Requests/GetLibrarySectionsAllLibraryResponseType.md + - docs/Models/Requests/GetLibrarySectionsAllLibraryType.md + - docs/Models/Requests/GetLibrarySectionsAllMedia.md + - docs/Models/Requests/GetLibrarySectionsAllMediaContainer.md + - docs/Models/Requests/GetLibrarySectionsAllMeta.md + - docs/Models/Requests/GetLibrarySectionsAllMetadata.md + - docs/Models/Requests/GetLibrarySectionsAllOperator.md + - docs/Models/Requests/GetLibrarySectionsAllOptimizedForStreaming.md + - docs/Models/Requests/GetLibrarySectionsAllOptimizedForStreaming1.md + - docs/Models/Requests/GetLibrarySectionsAllPart.md + - docs/Models/Requests/GetLibrarySectionsAllQueryParamIncludeMeta.md + - docs/Models/Requests/GetLibrarySectionsAllQueryParamType.md + - docs/Models/Requests/GetLibrarySectionsAllRequest.md + - docs/Models/Requests/GetLibrarySectionsAllResponse.md + - docs/Models/Requests/GetLibrarySectionsAllResponseBody.md + - docs/Models/Requests/GetLibrarySectionsAllRole.md + - docs/Models/Requests/GetLibrarySectionsAllSort.md + - docs/Models/Requests/GetLibrarySectionsAllStream.md + - docs/Models/Requests/GetLibrarySectionsAllStreamType.md + - docs/Models/Requests/GetLibrarySectionsAllType.md + - docs/Models/Requests/GetLibrarySectionsAllUltraBlurColors.md + - docs/Models/Requests/GetLibrarySectionsAllWriter.md - docs/Models/Requests/GetMediaArtsMediaContainer.md - docs/Models/Requests/GetMediaArtsMetadata.md - docs/Models/Requests/GetMediaArtsRequest.md @@ -1736,6 +1738,7 @@ generatedFiles: - docs/Models/Requests/GetTopWatchedContentGuids.md - docs/Models/Requests/GetTopWatchedContentMediaContainer.md - docs/Models/Requests/GetTopWatchedContentMetadata.md + - docs/Models/Requests/GetTopWatchedContentQueryParamIncludeGuids.md - docs/Models/Requests/GetTopWatchedContentQueryParamType.md - docs/Models/Requests/GetTopWatchedContentRequest.md - docs/Models/Requests/GetTopWatchedContentResponse.md @@ -1933,36 +1936,36 @@ examples: "200": application/json: {} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} getServerPreferences: speakeasy-default-get-server-preferences: responses: "200": - application/json: {"MediaContainer": {"size": 161, "Setting": [{"id": "EnableDatabaseTrace", "label": "", "summary": "", "type": "bool", "default": false, "value": false, "hidden": true, "advanced": false, "group": "", "enumValues": "1:admin only|2:everyone"}, {"id": "EnableDatabaseTrace", "label": "", "summary": "", "type": "bool", "default": false, "value": false, "hidden": true, "advanced": false, "group": "", "enumValues": "1:admin only|2:everyone"}, {"id": "EnableDatabaseTrace", "label": "", "summary": "", "type": "bool", "default": false, "value": false, "hidden": true, "advanced": false, "group": "", "enumValues": "1:admin only|2:everyone"}]}} + application/json: {"MediaContainer": {"size": 161, "Setting": [{"id": "EnableDatabaseTrace", "label": "", "summary": "", "type": "bool", "default": false, "value": false, "hidden": true, "advanced": false, "group": "", "enumValues": "1:admin only|2:everyone"}]}} "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} getAvailableClients: speakeasy-default-get-available-clients: responses: "200": - application/json: {"MediaContainer": {"size": 1, "Server": [{"name": "iPad", "host": "10.10.10.102", "address": "10.10.10.102", "port": 32500, "machineIdentifier": "A2E901F8-E016-43A7-ADFB-EF8CA8A4AC05", "version": "8.17", "protocol": "plex", "product": "Plex for iOS", "deviceClass": "tablet", "protocolVersion": 2, "protocolCapabilities": "playback,playqueues,timeline,provider-playback"}, {"name": "iPad", "host": "10.10.10.102", "address": "10.10.10.102", "port": 32500, "machineIdentifier": "A2E901F8-E016-43A7-ADFB-EF8CA8A4AC05", "version": "8.17", "protocol": "plex", "product": "Plex for iOS", "deviceClass": "tablet", "protocolVersion": 2, "protocolCapabilities": "playback,playqueues,timeline,provider-playback"}, {"name": "iPad", "host": "10.10.10.102", "address": "10.10.10.102", "port": 32500, "machineIdentifier": "A2E901F8-E016-43A7-ADFB-EF8CA8A4AC05", "version": "8.17", "protocol": "plex", "product": "Plex for iOS", "deviceClass": "tablet", "protocolVersion": 2, "protocolCapabilities": "playback,playqueues,timeline,provider-playback"}]}} + application/json: {"MediaContainer": {"size": 1, "Server": [{"name": "iPad", "host": "10.10.10.102", "address": "10.10.10.102", "port": 32500, "machineIdentifier": "A2E901F8-E016-43A7-ADFB-EF8CA8A4AC05", "version": "8.17", "protocol": "plex", "product": "Plex for iOS", "deviceClass": "tablet", "protocolVersion": 2, "protocolCapabilities": "playback,playqueues,timeline,provider-playback"}]}} "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} getDevices: speakeasy-default-get-devices: responses: "200": - application/json: {"MediaContainer": {"size": 151, "identifier": "com.plexapp.system.devices", "Device": [{"id": 1, "name": "iPhone", "platform": "iOS", "createdAt": 1654131230}, {"id": 1, "name": "iPhone", "platform": "iOS", "createdAt": 1654131230}, {"id": 1, "name": "iPhone", "platform": "iOS", "createdAt": 1654131230}]}} + application/json: {"MediaContainer": {"size": 151, "identifier": "com.plexapp.system.devices", "Device": [{"id": 1, "name": "iPhone", "platform": "iOS", "createdAt": 1654131230}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} get-server-identity: speakeasy-default-get-server-identity: responses: @@ -1976,9 +1979,9 @@ examples: "200": application/json: {"MyPlex": {"authToken": "Z5v-PrNASDFpsaCi3CPK7", "username": "example.email@mail.com", "mappingState": "mapped", "signInState": "ok", "publicAddress": "140.20.68.140", "publicPort": 32400, "privateAddress": "10.10.10.47", "privatePort": 32400, "subscriptionFeatures": "federated-auth,hardware_transcoding,home,hwtranscode,item_clusters,kevin-bacon,livetv,loudness,lyrics,music-analysis,music_videos,pass,photo_autotags,photos-v5,photosV6-edit,photosV6-tv-albums,premium_music_metadata,radio,server-manager,session_bandwidth_restrictions,session_kick,shared-radio,sync,trailers,tuner-sharing,type-first,unsupportedtuners,webhooks", "subscriptionState": "Active"}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} getResizedPhoto: speakeasy-default-get-resized-photo: parameters: @@ -1987,12 +1990,12 @@ examples: height: 165 opacity: 100 blur: 0 - minSize: 1 - upscale: 1 + minSize: 0 + upscale: 0 url: "/library/metadata/49564/thumb/1654258204" responses: "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} get-media-providers: @@ -2002,7 +2005,7 @@ examples: X-Plex-Token: "CV5xoxjTpFKUzBTShsaf" responses: "200": - application/json: {"MediaContainer": {"MediaProvider": [{"Feature": [{"type": "", "flavor": "global", "scrobbleKey": "/:/scrobble/new", "unscrobbleKey": "/:/unscrobble/new", "Action": [{"id": "addToContinueWatching", "key": "/actions/addToContinueWatching"}]}, {"type": "", "flavor": "global", "scrobbleKey": "/:/scrobble/new", "unscrobbleKey": "/:/unscrobble/new", "Action": [{"id": "addToContinueWatching", "key": "/actions/addToContinueWatching"}, {"id": "addToContinueWatching", "key": "/actions/addToContinueWatching"}]}, {"type": "", "flavor": "global", "scrobbleKey": "/:/scrobble/new", "unscrobbleKey": "/:/unscrobble/new", "Action": [{"id": "addToContinueWatching", "key": "/actions/addToContinueWatching"}, {"id": "addToContinueWatching", "key": "/actions/addToContinueWatching"}]}]}, {"Feature": [{"type": "", "flavor": "global", "scrobbleKey": "/:/scrobble/new", "unscrobbleKey": "/:/unscrobble/new", "Action": [{"id": "addToContinueWatching", "key": "/actions/addToContinueWatching"}]}]}]}} + application/json: {"MediaContainer": {"MediaProvider": [{"Feature": [{"type": "", "flavor": "global", "scrobbleKey": "/:/scrobble/new", "unscrobbleKey": "/:/unscrobble/new", "Action": [{"id": "addToContinueWatching", "key": "/actions/addToContinueWatching"}]}]}]}} "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": @@ -2011,11 +2014,11 @@ examples: speakeasy-default-get-server-list: responses: "200": - application/json: {"MediaContainer": {"size": 1, "Server": [{"name": "Hera", "host": "10.10.10.47", "address": "10.10.10.47", "port": 32400, "machineIdentifier": "96f2fe7a78c9dc1f16a16bedbe90f98149be16b4", "version": "1.31.3.6868-28fc46b27"}, {"name": "Hera", "host": "10.10.10.47", "address": "10.10.10.47", "port": 32400, "machineIdentifier": "96f2fe7a78c9dc1f16a16bedbe90f98149be16b4", "version": "1.31.3.6868-28fc46b27"}, {"name": "Hera", "host": "10.10.10.47", "address": "10.10.10.47", "port": 32400, "machineIdentifier": "96f2fe7a78c9dc1f16a16bedbe90f98149be16b4", "version": "1.31.3.6868-28fc46b27"}]}} + application/json: {"MediaContainer": {"size": 1, "Server": [{"name": "Hera", "host": "10.10.10.47", "address": "10.10.10.47", "port": 32400, "machineIdentifier": "96f2fe7a78c9dc1f16a16bedbe90f98149be16b4", "version": "1.31.3.6868-28fc46b27"}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} markPlayed: speakeasy-default-mark-played: parameters: @@ -2025,7 +2028,7 @@ examples: "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} markUnplayed: speakeasy-default-mark-unplayed: parameters: @@ -2033,9 +2036,9 @@ examples: key: 59398 responses: "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} updatePlayProgress: "": parameters: @@ -2045,9 +2048,9 @@ examples: state: "played" responses: "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} get-banner-image: speakeasy-default-get-banner-image: parameters: @@ -2062,11 +2065,11 @@ examples: X-Plex-Token: "CV5xoxjTpFKUzBTShsaf" responses: "200": - image/jpeg: "0xEA020BaD1e" + image/jpeg: "0x2c9f39bcE6" "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} get-thumb-image: speakeasy-default-get-thumb-image: parameters: @@ -2081,11 +2084,11 @@ examples: X-Plex-Token: "CV5xoxjTpFKUzBTShsaf" responses: "200": - image/jpeg: "0x456aa8C6f3" + image/jpeg: "0xF9AB3f46FB" "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} getTimeline: "": parameters: @@ -2104,7 +2107,7 @@ examples: "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} startUniversalTranscode: "": parameters: @@ -2127,9 +2130,9 @@ examples: autoAdjustQuality: 0 responses: "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} getServerActivities: speakeasy-default-get-server-activities: responses: @@ -2146,68 +2149,68 @@ examples: activityUUID: "25b71ed5-0f9d-461c-baa7-d404e9e10d3e" responses: "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} getButlerTasks: speakeasy-default-get-butler-tasks: responses: "200": - application/json: {"ButlerTasks": {"ButlerTask": [{"name": "BackupDatabase", "interval": 3, "title": "Backup Database", "description": "Create a backup copy of the server's database in the configured backup directory"}, {"name": "BackupDatabase", "interval": 3, "title": "Backup Database", "description": "Create a backup copy of the server's database in the configured backup directory"}]}} + application/json: {"ButlerTasks": {"ButlerTask": [{"name": "BackupDatabase", "interval": 3, "title": "Backup Database", "description": "Create a backup copy of the server's database in the configured backup directory"}]}} "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} startAllTasks: speakeasy-default-start-all-tasks: responses: "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} stopAllTasks: speakeasy-default-stop-all-tasks: responses: "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} startTask: speakeasy-default-start-task: parameters: path: - taskName: "CleanOldBundles" + taskName: "RefreshPeriodicMetadata" responses: "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} stopTask: speakeasy-default-stop-task: parameters: path: - taskName: "BackupDatabase" + taskName: "CleanOldCacheFiles" responses: "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} getCompanionsData: speakeasy-default-get-companions-data: responses: "200": - application/json: [{"identifier": "tv.plex.sonos", "baseURL": "https://sonos.plex.tv", "title": "Sonos", "linkURL": "https://sonos.plex.tv/link", "provides": "client,player", "token": ""}, {"identifier": "tv.plex.sonos", "baseURL": "https://sonos.plex.tv", "title": "Sonos", "linkURL": "https://sonos.plex.tv/link", "provides": "client,player", "token": ""}] + application/json: [{"identifier": "tv.plex.sonos", "baseURL": "https://sonos.plex.tv", "title": "Sonos", "linkURL": "https://sonos.plex.tv/link", "provides": "client,player", "token": ""}] "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} getUserFriends: speakeasy-default-get-user-friends: responses: "200": application/json: [{"email": "username@email.com", "friendlyName": "exampleUser", "home": true, "id": 0, "restricted": false, "sharedServers": [], "sharedSources": [], "status": "accepted", "thumb": "https://plex.tv/users/7d1916e0d8f6e76b/avatar?c=1694481578", "title": "username123", "username": "username123", "uuid": "7d1916e0d8f6e76b"}] "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} getGeoData: @@ -2216,9 +2219,9 @@ examples: "200": application/json: {"code": "VI", "continent_code": "NA", "country": "United States Virgin Islands", "city": "Amsterdam", "european_union_member": true, "time_zone": "America/St_Thomas", "postal_code": "802", "in_privacy_restricted_country": true, "in_privacy_restricted_region": true, "subdivisions": "Saint Thomas", "coordinates": "18.3381, -64.8941"} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} getHomeData: speakeasy-default-get-home-data: responses: @@ -2239,11 +2242,11 @@ examples: X-Plex-Client-Identifier: "3381b62b-9ab7-4e37-827b-203e9809eb58" responses: "200": - application/json: [{"name": "", "product": "Luxurious Frozen Bike", "productVersion": "", "platform": "", "platformVersion": "", "device": "Mobile", "clientIdentifier": "", "createdAt": "2019-06-24T11:38:02Z", "lastSeenAt": "2019-06-24T11:38:02Z", "provides": "", "ownerId": 575734, "sourceTitle": "", "publicAddress": "", "accessToken": "", "owned": false, "home": false, "synced": false, "relay": true, "presence": false, "httpsRequired": false, "publicAddressMatches": true, "dnsRebindingProtection": true, "natLoopbackSupported": true, "connections": []}] + application/json: [{"name": "", "product": "Ergonomic Plastic Hat", "productVersion": "", "platform": "", "platformVersion": "", "device": "Mobile", "clientIdentifier": "", "createdAt": "2019-06-24T11:38:02Z", "lastSeenAt": "2019-06-24T11:38:02Z", "provides": "", "ownerId": null, "sourceTitle": "", "publicAddress": "", "accessToken": "", "owned": true, "home": false, "synced": false, "relay": true, "presence": false, "httpsRequired": true, "publicAddressMatches": false, "dnsRebindingProtection": true, "natLoopbackSupported": false, "connections": [{"protocol": "http", "address": "5746 Mount Street", "port": 441996, "uri": "https://wide-kick.name/", "local": false, "relay": true, "IPv6": true}]}] "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} getPin: "": parameters: @@ -2259,12 +2262,12 @@ examples: "201": application/json: {"id": 308667304, "code": "7RQZ", "product": "0", "trusted": false, "qr": "https://plex.tv/api/v2/pins/qr/7RQZ", "clientIdentifier": "string", "location": {"code": "VI", "continent_code": "NA", "country": "United States Virgin Islands", "city": "Amsterdam", "european_union_member": true, "time_zone": "America/St_Thomas", "postal_code": "802", "in_privacy_restricted_country": true, "in_privacy_restricted_region": true, "subdivisions": "Saint Thomas", "coordinates": "18.3381, -64.8941"}, "expiresIn": 876, "createdAt": "2024-07-16T17:03:05Z", "expiresAt": "2024-07-16T17:18:05Z", "authToken": null, "newRegistration": null} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} getTokenByPinId: "": parameters: path: - pinID: 408895 + pinID: 232248 header: X-Plex-Client-Identifier: "3381b62b-9ab7-4e37-827b-203e9809eb58" X-Plex-Product: "Plex for Roku" @@ -2278,16 +2281,16 @@ examples: speakeasy-default-get-global-hubs: responses: "200": - application/json: {"MediaContainer": {"size": 8, "allowSync": true, "identifier": "com.plexapp.plugins.library", "Hub": [{"hubKey": "/library/metadata/50768,65523,58188,57341,57302,57070", "key": "/playlists/all?type=15&sort=lastViewedAt:desc&playlistType=video,audio", "title": "Recent Playlists", "type": "playlist", "hubIdentifier": "home.playlists", "context": "hub.home.playlists", "size": 6, "more": true, "style": "shelf", "promoted": true, "Metadata": [{"ratingKey": "57070", "key": "/playlists/57070/items", "guid": "com.plexapp.agents.none://9fee6c5b-3143-4923-813e-57bd0190056c", "type": "playlist", "title": "November Movie Day", "titleSort": "Tracks", "summary": "", "smart": false, "playlistType": "video", "composite": "/playlists/57070/composite/1668787730", "icon": "playlist://image.smart", "viewCount": 2, "lastViewedAt": 1668787732, "duration": 16873000, "leafCount": 3, "addedAt": 1668779618, "updatedAt": 1668787730}, {"ratingKey": "57070", "key": "/playlists/57070/items", "guid": "com.plexapp.agents.none://9fee6c5b-3143-4923-813e-57bd0190056c", "type": "playlist", "title": "November Movie Day", "titleSort": "Tracks", "summary": "", "smart": false, "playlistType": "video", "composite": "/playlists/57070/composite/1668787730", "icon": "playlist://image.smart", "viewCount": 2, "lastViewedAt": 1668787732, "duration": 16873000, "leafCount": 3, "addedAt": 1668779618, "updatedAt": 1668787730}, {"ratingKey": "57070", "key": "/playlists/57070/items", "guid": "com.plexapp.agents.none://9fee6c5b-3143-4923-813e-57bd0190056c", "type": "playlist", "title": "November Movie Day", "titleSort": "Tracks", "summary": "", "smart": false, "playlistType": "video", "composite": "/playlists/57070/composite/1668787730", "icon": "playlist://image.smart", "viewCount": 2, "lastViewedAt": 1668787732, "duration": 16873000, "leafCount": 3, "addedAt": 1668779618, "updatedAt": 1668787730}]}]}} + application/json: {"MediaContainer": {"size": 8, "allowSync": true, "identifier": "com.plexapp.plugins.library", "Hub": [{"hubKey": "/library/metadata/50768,65523,58188,57341,57302,57070", "key": "/playlists/all?type=15&sort=lastViewedAt:desc&playlistType=video,audio", "title": "Recent Playlists", "type": "playlist", "hubIdentifier": "home.playlists", "context": "hub.home.playlists", "size": 6, "more": true, "style": "shelf", "promoted": true, "Metadata": [{"ratingKey": "57070", "key": "/playlists/57070/items", "guid": "com.plexapp.agents.none://9fee6c5b-3143-4923-813e-57bd0190056c", "type": "playlist", "title": "November Movie Day", "titleSort": "Tracks", "summary": "", "smart": false, "playlistType": "video", "composite": "/playlists/57070/composite/1668787730", "icon": "playlist://image.smart", "viewCount": 2, "lastViewedAt": 1668787732, "duration": 16873000, "leafCount": 3, "addedAt": 1668779618, "updatedAt": 1668787730}]}]}} "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} get-recently-added: speakeasy-default-get-recently-added: parameters: query: - contentDirectoryID: 470161 + contentDirectoryID: 39486 sectionID: 2 type: 2 includeMeta: 1 @@ -2295,31 +2298,30 @@ examples: X-Plex-Container-Size: 50 responses: "200": - application/json: {"MediaContainer": {"size": 50, "totalSize": 50, "offset": 0, "allowSync": false, "identifier": "com.plexapp.plugins.library", "Meta": {"Type": [{"key": "/library/sections/2/all?type=2", "type": "filter", "subtype": "clip", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}, {"key": "/library/sections/2/all?type=2", "type": "filter", "subtype": "clip", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}, {"key": "/library/sections/2/all?type=2", "type": "filter", "subtype": "clip", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}], "FieldType": [{"type": "tag", "Operator": [{"key": "=", "title": "is"}]}, {"type": "tag", "Operator": []}, {"type": "tag", "Operator": []}]}, "Metadata": [{"addedAt": 1556281940, "art": "/library/metadata/58683/art/1703239236", "audienceRatingImage": "rottentomatoes://image.rating.upright", "audienceRating": 9.2, "chapterSource": "media", "childCount": 1, "contentRating": "PG-13", "createdAtAccuracy": "epoch,local", "createdAtTZOffset": "0", "duration": 11558112, "grandparentArt": "/library/metadata/66/art/1705716261", "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentKey": "/library/metadata/66", "grandparentRatingKey": "66", "grandparentSlug": "alice-in-borderland-2020", "grandparentTheme": "/library/metadata/66/theme/1705716261", "grandparentThumb": "/library/metadata/66/thumb/1705716261", "grandparentTitle": "Caprica", "guid": "plex://movie/5d7768ba96b655001fdc0408", "index": 1, "key": "/library/metadata/58683", "lastRatedAt": 1721813113, "lastViewedAt": 1682752242, "leafCount": 14, "librarySectionID": 1, "librarySectionKey": "/library/sections/1", "librarySectionTitle": "Movies", "originalTitle": "映画 ブラッククローバー 魔法帝の剣", "originallyAvailableAt": "2022-12-14", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "parentIndex": 1, "parentKey": "/library/metadata/66", "parentRatingKey": "66", "parentSlug": "alice-in-borderland-2020", "parentStudio": "UCP", "parentTheme": "/library/metadata/66/theme/1705716261", "parentThumb": "/library/metadata/66/thumb/1705716261", "parentTitle": "Caprica", "parentYear": 2010, "primaryExtraKey": "/library/metadata/58684", "ratingImage": "rottentomatoes://image.rating.ripe", "ratingKey": "58683", "rating": 7.6, "seasonCount": 2022, "skipCount": 1, "slug": "4-for-texas", "studio": "20th Century Studios", "subtype": "clip", "summary": "Jake Sully lives with his newfound family formed on the extrasolar moon Pandora.\nOnce a familiar threat returns to finish what was previously started, Jake must\nwork with Neytiri and the army of the Na'vi race to protect their home.\n", "tagline": "Return to Pandora.", "theme": "/library/metadata/1/theme/1705636920", "thumb": "/library/metadata/58683/thumb/1703239236", "titleSort": "Whale", "title": "Avatar: The Way of Water", "type": "movie", "updatedAt": 1556281940, "userRating": 10, "viewCount": 1, "viewOffset": 5222500, "viewedLeafCount": 0, "year": 2022, "Image": [{"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}], "UltraBlurColors": {"topLeft": "11333b", "topRight": "0a232d", "bottomRight": "73958", "bottomLeft": "1f5066"}, "Media": [{"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "displayOffset": 50, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "audioProfile": "dts", "has64bitOffsets": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "packetLength": 188, "container": "mkv", "videoProfile": "main 10", "audioProfile": "dts", "has64bitOffsets": false, "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}, {"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "packetLength": 188, "container": "mkv", "videoProfile": "main 10", "audioProfile": "dts", "has64bitOffsets": false, "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}, {"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "displayOffset": 50, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "audioProfile": "dts", "has64bitOffsets": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "packetLength": 188, "container": "mkv", "videoProfile": "main 10", "audioProfile": "dts", "has64bitOffsets": false, "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}], "Genre": [{"id": 259, "filter": "genre=19", "tag": "Crime"}], "Country": [{"id": 259, "tag": "United States of America", "filter": "country=19"}], "Director": [{"tag": "Danny Boyle"}, {"tag": "Danny Boyle"}, {"tag": "Danny Boyle"}], "Writer": [{"id": 126522, "filter": "writer=126522", "tag": "Jamie P. Hanson", "tagKey": "5d77683d85719b001f3a535e"}, {"id": 126522, "filter": "writer=126522", "tag": "Jamie P. Hanson", "tagKey": "5d77683d85719b001f3a535e"}, {"id": 126522, "filter": "writer=126522", "tag": "Jamie P. Hanson", "tagKey": "5d77683d85719b001f3a535e"}], "Role": [{"id": 126522, "filter": "actor=126522", "tag": "Teller", "tagKey": "5d77683d85719b001f3a535e", "role": "Self - Judge", "thumb": "https://metadata-static.plex.tv/7/people/708568fd018d7aa8b1032dcf867747e8.jpg"}], "Producer": [{"id": 126522, "filter": "producer=126522", "tag": "Amelia Knapp", "tagKey": "5d77683d85719b001f3a535e", "thumb": "https://metadata-static.plex.tv/7/people/708568fd018d7aa8b1032dcf867747e8.jpg"}, {"id": 126522, "filter": "producer=126522", "tag": "Amelia Knapp", "tagKey": "5d77683d85719b001f3a535e", "thumb": "https://metadata-static.plex.tv/7/people/708568fd018d7aa8b1032dcf867747e8.jpg"}, {"id": 126522, "filter": "producer=126522", "tag": "Amelia Knapp", "tagKey": "5d77683d85719b001f3a535e", "thumb": "https://metadata-static.plex.tv/7/people/708568fd018d7aa8b1032dcf867747e8.jpg"}], "Rating": [{"image": "imdb://image.rating", "value": 5.1, "type": "audience"}], "Similar": [{"id": 259, "filter": "similar=259", "tag": "Criss Angel Mindfreak"}, {"id": 259, "filter": "similar=259", "tag": "Criss Angel Mindfreak"}, {"id": 259, "filter": "similar=259", "tag": "Criss Angel Mindfreak"}], "Location": [{"path": "/TV Shows/Clarkson's Farm"}], "Guid": [{"id": "tvdb://2337"}, {"id": "tvdb://2337"}], "Collection": [{"tag": "My Awesome Collection"}, {"tag": "My Awesome Collection"}, {"tag": "My Awesome Collection"}]}, {"addedAt": 1556281940, "art": "/library/metadata/58683/art/1703239236", "audienceRatingImage": "rottentomatoes://image.rating.upright", "audienceRating": 9.2, "chapterSource": "media", "childCount": 1, "contentRating": "PG-13", "createdAtAccuracy": "epoch,local", "createdAtTZOffset": "0", "duration": 11558112, "grandparentArt": "/library/metadata/66/art/1705716261", "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentKey": "/library/metadata/66", "grandparentRatingKey": "66", "grandparentSlug": "alice-in-borderland-2020", "grandparentTheme": "/library/metadata/66/theme/1705716261", "grandparentThumb": "/library/metadata/66/thumb/1705716261", "grandparentTitle": "Caprica", "guid": "plex://movie/5d7768ba96b655001fdc0408", "index": 1, "key": "/library/metadata/58683", "lastRatedAt": 1721813113, "lastViewedAt": 1682752242, "leafCount": 14, "librarySectionID": 1, "librarySectionKey": "/library/sections/1", "librarySectionTitle": "Movies", "originalTitle": "映画 ブラッククローバー 魔法帝の剣", "originallyAvailableAt": "2022-12-14", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "parentIndex": 1, "parentKey": "/library/metadata/66", "parentRatingKey": "66", "parentSlug": "alice-in-borderland-2020", "parentStudio": "UCP", "parentTheme": "/library/metadata/66/theme/1705716261", "parentThumb": "/library/metadata/66/thumb/1705716261", "parentTitle": "Caprica", "parentYear": 2010, "primaryExtraKey": "/library/metadata/58684", "ratingImage": "rottentomatoes://image.rating.ripe", "ratingKey": "58683", "rating": 7.6, "seasonCount": 2022, "skipCount": 1, "slug": "4-for-texas", "studio": "20th Century Studios", "subtype": "clip", "summary": "Jake Sully lives with his newfound family formed on the extrasolar moon Pandora.\nOnce a familiar threat returns to finish what was previously started, Jake must\nwork with Neytiri and the army of the Na'vi race to protect their home.\n", "tagline": "Return to Pandora.", "theme": "/library/metadata/1/theme/1705636920", "thumb": "/library/metadata/58683/thumb/1703239236", "titleSort": "Whale", "title": "Avatar: The Way of Water", "type": "movie", "updatedAt": 1556281940, "userRating": 10, "viewCount": 1, "viewOffset": 5222500, "viewedLeafCount": 0, "year": 2022, "Image": [{"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}], "UltraBlurColors": {"topLeft": "11333b", "topRight": "0a232d", "bottomRight": "73958", "bottomLeft": "1f5066"}, "Media": [{"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "displayOffset": 50, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "audioProfile": "dts", "has64bitOffsets": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "packetLength": 188, "container": "mkv", "videoProfile": "main 10", "audioProfile": "dts", "has64bitOffsets": false, "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}, {"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "displayOffset": 50, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "audioProfile": "dts", "has64bitOffsets": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "packetLength": 188, "container": "mkv", "videoProfile": "main 10", "audioProfile": "dts", "has64bitOffsets": false, "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}], "Genre": [{"id": 259, "filter": "genre=19", "tag": "Crime"}, {"id": 259, "filter": "genre=19", "tag": "Crime"}], "Country": [{"id": 259, "tag": "United States of America", "filter": "country=19"}], "Director": [{"tag": "Danny Boyle"}, {"tag": "Danny Boyle"}], "Writer": [{"id": 126522, "filter": "writer=126522", "tag": "Jamie P. Hanson", "tagKey": "5d77683d85719b001f3a535e"}, {"id": 126522, "filter": "writer=126522", "tag": "Jamie P. Hanson", "tagKey": "5d77683d85719b001f3a535e"}], "Role": [{"id": 126522, "filter": "actor=126522", "tag": "Teller", "tagKey": "5d77683d85719b001f3a535e", "role": "Self - Judge", "thumb": "https://metadata-static.plex.tv/7/people/708568fd018d7aa8b1032dcf867747e8.jpg"}], "Producer": [{"id": 126522, "filter": "producer=126522", "tag": "Amelia Knapp", "tagKey": "5d77683d85719b001f3a535e", "thumb": "https://metadata-static.plex.tv/7/people/708568fd018d7aa8b1032dcf867747e8.jpg"}, {"id": 126522, "filter": "producer=126522", "tag": "Amelia Knapp", "tagKey": "5d77683d85719b001f3a535e", "thumb": "https://metadata-static.plex.tv/7/people/708568fd018d7aa8b1032dcf867747e8.jpg"}], "Rating": [{"image": "imdb://image.rating", "value": 5.1, "type": "audience"}], "Similar": [{"id": 259, "filter": "similar=259", "tag": "Criss Angel Mindfreak"}, {"id": 259, "filter": "similar=259", "tag": "Criss Angel Mindfreak"}, {"id": 259, "filter": "similar=259", "tag": "Criss Angel Mindfreak"}], "Location": [{"path": "/TV Shows/Clarkson's Farm"}, {"path": "/TV Shows/Clarkson's Farm"}, {"path": "/TV Shows/Clarkson's Farm"}], "Guid": [{"id": "tvdb://2337"}, {"id": "tvdb://2337"}], "Collection": [{"tag": "My Awesome Collection"}, {"tag": "My Awesome Collection"}]}]}} + application/json: {"MediaContainer": {"size": 50, "totalSize": 50, "offset": 0, "allowSync": false, "identifier": "com.plexapp.plugins.library", "Meta": {"Type": [{"key": "/library/sections/2/all?type=2", "type": "filter", "subtype": "clip", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}], "FieldType": [{"type": "tag", "Operator": [{"key": "=", "title": "is"}]}]}, "Metadata": [{"addedAt": 1556281940, "art": "/library/metadata/58683/art/1703239236", "audienceRatingImage": "rottentomatoes://image.rating.upright", "audienceRating": 9.2, "chapterSource": "media", "childCount": 1, "contentRating": "PG-13", "createdAtAccuracy": "epoch,local", "createdAtTZOffset": "0", "duration": 11558112, "grandparentArt": "/library/metadata/66/art/1705716261", "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentKey": "/library/metadata/66", "grandparentRatingKey": "66", "grandparentSlug": "alice-in-borderland-2020", "grandparentTheme": "/library/metadata/66/theme/1705716261", "grandparentThumb": "/library/metadata/66/thumb/1705716261", "grandparentTitle": "Caprica", "guid": "plex://movie/5d7768ba96b655001fdc0408", "index": 1, "key": "/library/metadata/58683", "lastRatedAt": 1721813113, "lastViewedAt": 1682752242, "leafCount": 14, "librarySectionID": 1, "librarySectionKey": "/library/sections/1", "librarySectionTitle": "Movies", "originalTitle": "映画 ブラッククローバー 魔法帝の剣", "originallyAvailableAt": "2022-12-14", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "parentIndex": 1, "parentKey": "/library/metadata/66", "parentRatingKey": "66", "parentSlug": "alice-in-borderland-2020", "parentStudio": "UCP", "parentTheme": "/library/metadata/66/theme/1705716261", "parentThumb": "/library/metadata/66/thumb/1705716261", "parentTitle": "Caprica", "parentYear": 2010, "primaryExtraKey": "/library/metadata/58684", "ratingImage": "rottentomatoes://image.rating.ripe", "ratingKey": "58683", "rating": 7.6, "seasonCount": 2022, "skipCount": 1, "slug": "4-for-texas", "studio": "20th Century Studios", "subtype": "clip", "summary": "Jake Sully lives with his newfound family formed on the extrasolar moon Pandora.\nOnce a familiar threat returns to finish what was previously started, Jake must\nwork with Neytiri and the army of the Na'vi race to protect their home.\n", "tagline": "Return to Pandora.", "theme": "/library/metadata/1/theme/1705636920", "thumb": "/library/metadata/58683/thumb/1703239236", "titleSort": "Whale", "title": "Avatar: The Way of Water", "type": "movie", "updatedAt": 1556281940, "userRating": 10, "viewCount": 1, "viewOffset": 5222500, "viewedLeafCount": 0, "year": 2022, "Image": [{"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}], "UltraBlurColors": {"topLeft": "11333b", "topRight": "0a232d", "bottomRight": "73958", "bottomLeft": "1f5066"}, "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "displayOffset": 50, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "audioProfile": "dts", "has64bitOffsets": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "packetLength": 188, "container": "mkv", "videoProfile": "main 10", "audioProfile": "dts", "has64bitOffsets": false, "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}], "Genre": [{"id": 259, "filter": "genre=19", "tag": "Crime"}], "Country": [{"id": 259, "tag": "United States of America", "filter": "country=19"}], "Director": [{"id": 126522, "filter": "director=235876", "tag": "Danny Boyle", "tagKey": "5d776831151a60001f24d031", "thumb": "https://metadata-static.plex.tv/8/people/8d65fa96804802e08f2de09fe014408e.jpg"}], "Writer": [{"id": 126522, "filter": "writer=126522", "tag": "Jamie P. Hanson", "tagKey": "5d77683d85719b001f3a535e", "thumb": "https://metadata-static.plex.tv/8/people/8d65fa96804802e08f2de09fe014408e.jpg"}], "Role": [{"id": 126522, "filter": "actor=126522", "tag": "Teller", "tagKey": "5d77683d85719b001f3a535e", "role": "Self - Judge", "thumb": "https://metadata-static.plex.tv/7/people/708568fd018d7aa8b1032dcf867747e8.jpg"}], "Producer": [{"id": 126522, "filter": "producer=126522", "tag": "Amelia Knapp", "tagKey": "5d77683d85719b001f3a535e", "thumb": "https://metadata-static.plex.tv/7/people/708568fd018d7aa8b1032dcf867747e8.jpg"}], "Rating": [{"image": "imdb://image.rating", "value": 5.1, "type": "audience"}], "Similar": [{"id": 259, "filter": "similar=259", "tag": "Criss Angel Mindfreak"}], "Location": [{"path": "/TV Shows/Clarkson's Farm"}], "Collection": [{"tag": "My Awesome Collection"}]}]}} getLibraryHubs: speakeasy-default-get-library-hubs: parameters: path: - sectionId: 6728.76 - query: {} + sectionId: 492.74 responses: "200": - application/json: {"MediaContainer": {"size": 7, "allowSync": true, "identifier": "com.plexapp.plugins.library", "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionUUID": "322a231a-b7f7-49f5-920f-14c61199cd30", "Hub": [{"key": "/library/sections/1/all?sort=lastViewedAt:desc&unwatched=0&viewOffset=0", "title": "Recently Played Movies", "type": "movie", "hubIdentifier": "movie.recentlyviewed.1", "context": "hub.movie.recentlyviewed", "size": 6, "more": true, "style": "shelf", "hubKey": "/library/metadata/66485,66098,57249,11449,5858,14944", "Metadata": [{"ratingKey": "14944", "key": "/library/metadata/14944", "guid": "plex://movie/5d77686eeb5d26001f1eb339", "studio": "Walt Disney Animation Studios", "type": "movie", "title": "Tangled", "librarySectionTitle": "Movies", "librarySectionID": 1, "librarySectionKey": "/library/sections/1", "contentRating": "PG", "summary": "The magically long-haired Rapunzel has spent her entire life in a tower, but now that a runaway thief has stumbled upon her, she is about to discover the world for the first time, and who she really is.", "rating": 8.9, "audienceRating": 8.7, "viewCount": 1, "lastViewedAt": 1704936047, "year": 2010, "tagline": "They're taking adventure to new lengths.", "thumb": "/library/metadata/14944/thumb/1705739847", "art": "/library/metadata/14944/art/1705739847", "duration": 6017237, "originallyAvailableAt": "2010-11-24T00:00:00Z", "addedAt": 1589412494, "updatedAt": 1705739847, "audienceRatingImage": "rottentomatoes://image.rating.upright", "primaryExtraKey": "/library/metadata/14952", "ratingImage": "rottentomatoes://image.rating.ripe", "Media": [{"id": 38247, "duration": 6017237, "bitrate": 2051, "width": 1920, "height": 1080, "aspectRatio": 1.78, "audioChannels": 2, "audioCodec": "aac", "videoCodec": "h264", "videoResolution": "1080", "container": "mp4", "videoFrameRate": "24p", "optimizedForStreaming": 1, "audioProfile": "lc", "has64bitOffsets": false, "videoProfile": "high", "Part": [{"id": 38247, "key": "/library/parts/38247/1589412494/file.mp4", "duration": 6017237, "file": "/movies/Tangled (2010)/Tangled (2010) Bluray-1080p.mp4", "size": 1545647447, "audioProfile": "lc", "container": "mp4", "has64bitOffsets": false, "optimizedForStreaming": true, "videoProfile": "high"}, {"id": 38247, "key": "/library/parts/38247/1589412494/file.mp4", "duration": 6017237, "file": "/movies/Tangled (2010)/Tangled (2010) Bluray-1080p.mp4", "size": 1545647447, "audioProfile": "lc", "container": "mp4", "has64bitOffsets": false, "optimizedForStreaming": true, "videoProfile": "high"}]}, {"id": 38247, "duration": 6017237, "bitrate": 2051, "width": 1920, "height": 1080, "aspectRatio": 1.78, "audioChannels": 2, "audioCodec": "aac", "videoCodec": "h264", "videoResolution": "1080", "container": "mp4", "videoFrameRate": "24p", "optimizedForStreaming": 1, "audioProfile": "lc", "has64bitOffsets": false, "videoProfile": "high", "Part": [{"id": 38247, "key": "/library/parts/38247/1589412494/file.mp4", "duration": 6017237, "file": "/movies/Tangled (2010)/Tangled (2010) Bluray-1080p.mp4", "size": 1545647447, "audioProfile": "lc", "container": "mp4", "has64bitOffsets": false, "optimizedForStreaming": true, "videoProfile": "high"}, {"id": 38247, "key": "/library/parts/38247/1589412494/file.mp4", "duration": 6017237, "file": "/movies/Tangled (2010)/Tangled (2010) Bluray-1080p.mp4", "size": 1545647447, "audioProfile": "lc", "container": "mp4", "has64bitOffsets": false, "optimizedForStreaming": true, "videoProfile": "high"}]}], "Genre": [{"tag": "Animation"}, {"tag": "Animation"}, {"tag": "Animation"}], "Country": [{"tag": "United States of America"}, {"tag": "United States of America"}], "Director": [{"tag": "Nathan Greno"}, {"tag": "Nathan Greno"}], "Role": [{"tag": "Donna Murphy"}], "Writer": [{"tag": "Wilhelm Grimm"}, {"tag": "Wilhelm Grimm"}, {"tag": "Wilhelm Grimm"}], "skipCount": 1, "chapterSource": "media"}, {"ratingKey": "14944", "key": "/library/metadata/14944", "guid": "plex://movie/5d77686eeb5d26001f1eb339", "studio": "Walt Disney Animation Studios", "type": "movie", "title": "Tangled", "librarySectionTitle": "Movies", "librarySectionID": 1, "librarySectionKey": "/library/sections/1", "contentRating": "PG", "summary": "The magically long-haired Rapunzel has spent her entire life in a tower, but now that a runaway thief has stumbled upon her, she is about to discover the world for the first time, and who she really is.", "rating": 8.9, "audienceRating": 8.7, "viewCount": 1, "lastViewedAt": 1704936047, "year": 2010, "tagline": "They're taking adventure to new lengths.", "thumb": "/library/metadata/14944/thumb/1705739847", "art": "/library/metadata/14944/art/1705739847", "duration": 6017237, "originallyAvailableAt": "2010-11-24T00:00:00Z", "addedAt": 1589412494, "updatedAt": 1705739847, "audienceRatingImage": "rottentomatoes://image.rating.upright", "primaryExtraKey": "/library/metadata/14952", "ratingImage": "rottentomatoes://image.rating.ripe", "Media": [{"id": 38247, "duration": 6017237, "bitrate": 2051, "width": 1920, "height": 1080, "aspectRatio": 1.78, "audioChannels": 2, "audioCodec": "aac", "videoCodec": "h264", "videoResolution": "1080", "container": "mp4", "videoFrameRate": "24p", "optimizedForStreaming": 1, "audioProfile": "lc", "has64bitOffsets": false, "videoProfile": "high", "Part": [{"id": 38247, "key": "/library/parts/38247/1589412494/file.mp4", "duration": 6017237, "file": "/movies/Tangled (2010)/Tangled (2010) Bluray-1080p.mp4", "size": 1545647447, "audioProfile": "lc", "container": "mp4", "has64bitOffsets": false, "optimizedForStreaming": true, "videoProfile": "high"}]}], "Genre": [{"tag": "Animation"}, {"tag": "Animation"}], "Country": [{"tag": "United States of America"}, {"tag": "United States of America"}, {"tag": "United States of America"}], "Director": [{"tag": "Nathan Greno"}], "Role": [{"tag": "Donna Murphy"}, {"tag": "Donna Murphy"}, {"tag": "Donna Murphy"}], "Writer": [{"tag": "Wilhelm Grimm"}, {"tag": "Wilhelm Grimm"}, {"tag": "Wilhelm Grimm"}], "skipCount": 1, "chapterSource": "media"}, {"ratingKey": "14944", "key": "/library/metadata/14944", "guid": "plex://movie/5d77686eeb5d26001f1eb339", "studio": "Walt Disney Animation Studios", "type": "movie", "title": "Tangled", "librarySectionTitle": "Movies", "librarySectionID": 1, "librarySectionKey": "/library/sections/1", "contentRating": "PG", "summary": "The magically long-haired Rapunzel has spent her entire life in a tower, but now that a runaway thief has stumbled upon her, she is about to discover the world for the first time, and who she really is.", "rating": 8.9, "audienceRating": 8.7, "viewCount": 1, "lastViewedAt": 1704936047, "year": 2010, "tagline": "They're taking adventure to new lengths.", "thumb": "/library/metadata/14944/thumb/1705739847", "art": "/library/metadata/14944/art/1705739847", "duration": 6017237, "originallyAvailableAt": "2010-11-24T00:00:00Z", "addedAt": 1589412494, "updatedAt": 1705739847, "audienceRatingImage": "rottentomatoes://image.rating.upright", "primaryExtraKey": "/library/metadata/14952", "ratingImage": "rottentomatoes://image.rating.ripe", "Media": [{"id": 38247, "duration": 6017237, "bitrate": 2051, "width": 1920, "height": 1080, "aspectRatio": 1.78, "audioChannels": 2, "audioCodec": "aac", "videoCodec": "h264", "videoResolution": "1080", "container": "mp4", "videoFrameRate": "24p", "optimizedForStreaming": 1, "audioProfile": "lc", "has64bitOffsets": false, "videoProfile": "high", "Part": [{"id": 38247, "key": "/library/parts/38247/1589412494/file.mp4", "duration": 6017237, "file": "/movies/Tangled (2010)/Tangled (2010) Bluray-1080p.mp4", "size": 1545647447, "audioProfile": "lc", "container": "mp4", "has64bitOffsets": false, "optimizedForStreaming": true, "videoProfile": "high"}, {"id": 38247, "key": "/library/parts/38247/1589412494/file.mp4", "duration": 6017237, "file": "/movies/Tangled (2010)/Tangled (2010) Bluray-1080p.mp4", "size": 1545647447, "audioProfile": "lc", "container": "mp4", "has64bitOffsets": false, "optimizedForStreaming": true, "videoProfile": "high"}, {"id": 38247, "key": "/library/parts/38247/1589412494/file.mp4", "duration": 6017237, "file": "/movies/Tangled (2010)/Tangled (2010) Bluray-1080p.mp4", "size": 1545647447, "audioProfile": "lc", "container": "mp4", "has64bitOffsets": false, "optimizedForStreaming": true, "videoProfile": "high"}]}], "Genre": [{"tag": "Animation"}], "Country": [{"tag": "United States of America"}, {"tag": "United States of America"}], "Director": [{"tag": "Nathan Greno"}, {"tag": "Nathan Greno"}, {"tag": "Nathan Greno"}], "Role": [{"tag": "Donna Murphy"}], "Writer": [{"tag": "Wilhelm Grimm"}, {"tag": "Wilhelm Grimm"}, {"tag": "Wilhelm Grimm"}], "skipCount": 1, "chapterSource": "media"}], "promoted": true, "random": true}]}} + application/json: {"MediaContainer": {"size": 7, "allowSync": true, "identifier": "com.plexapp.plugins.library", "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionUUID": "322a231a-b7f7-49f5-920f-14c61199cd30", "Hub": [{"key": "/library/sections/1/all?sort=lastViewedAt:desc&unwatched=0&viewOffset=0", "title": "Recently Played Movies", "type": "movie", "hubIdentifier": "movie.recentlyviewed.1", "context": "hub.movie.recentlyviewed", "size": 6, "more": true, "style": "shelf", "hubKey": "/library/metadata/66485,66098,57249,11449,5858,14944", "Metadata": [{"ratingKey": "14944", "key": "/library/metadata/14944", "guid": "plex://movie/5d77686eeb5d26001f1eb339", "studio": "Walt Disney Animation Studios", "type": "movie", "title": "Tangled", "librarySectionTitle": "Movies", "librarySectionID": 1, "librarySectionKey": "/library/sections/1", "contentRating": "PG", "summary": "The magically long-haired Rapunzel has spent her entire life in a tower, but now that a runaway thief has stumbled upon her, she is about to discover the world for the first time, and who she really is.", "rating": 8.9, "audienceRating": 8.7, "viewCount": 1, "lastViewedAt": 1704936047, "year": 2010, "tagline": "They're taking adventure to new lengths.", "thumb": "/library/metadata/14944/thumb/1705739847", "art": "/library/metadata/14944/art/1705739847", "duration": 6017237, "originallyAvailableAt": "2010-11-24T00:00:00Z", "addedAt": 1589412494, "updatedAt": 1705739847, "audienceRatingImage": "rottentomatoes://image.rating.upright", "primaryExtraKey": "/library/metadata/14952", "ratingImage": "rottentomatoes://image.rating.ripe", "Media": [{"id": 38247, "duration": 6017237, "bitrate": 2051, "width": 1920, "height": 1080, "aspectRatio": 1.78, "audioChannels": 2, "audioCodec": "aac", "videoCodec": "h264", "videoResolution": "1080", "container": "mp4", "videoFrameRate": "24p", "optimizedForStreaming": 1, "audioProfile": "lc", "has64bitOffsets": false, "videoProfile": "high", "Part": [{"id": 38247, "key": "/library/parts/38247/1589412494/file.mp4", "duration": 6017237, "file": "/movies/Tangled (2010)/Tangled (2010) Bluray-1080p.mp4", "size": 1545647447, "audioProfile": "lc", "container": "mp4", "has64bitOffsets": false, "optimizedForStreaming": true, "videoProfile": "high"}]}], "Genre": [{"tag": "Animation"}], "Country": [{"tag": "United States of America"}], "Director": [{"tag": "Nathan Greno"}], "Role": [{"tag": "Donna Murphy"}], "Writer": [{"tag": "Wilhelm Grimm"}], "skipCount": 1, "chapterSource": "media"}], "promoted": true, "random": true}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} performSearch: speakeasy-default-perform-search: parameters: query: - query: "dylan" + query: "arnold" limit: 5 responses: "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} performVoiceSearch: speakeasy-default-perform-voice-search: parameters: @@ -2328,9 +2330,9 @@ examples: limit: 5 responses: "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} getSearchResults: speakeasy-default-get-search-results: parameters: @@ -2338,11 +2340,11 @@ examples: query: "110" responses: "200": - application/json: {"MediaContainer": {"size": 26, "identifier": "com.plexapp.plugins.library", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1680021154, "Metadata": [{"librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionUUID": "322a231a-b7f7-49f5-920f-14c61199cd30", "sourceTitle": "Hera", "ratingKey": 10398, "key": "/library/metadata/10398", "guid": "plex://movie/5d7768284de0ee001fcc8f52", "studio": "Paramount", "type": "movie", "title": "Mission: Impossible", "contentRating": "PG-13", "summary": "When Ethan Hunt the leader of a crack espionage team whose perilous operation has gone awry with no explanation discovers that a mole has penetrated the CIA he's surprised to learn that he's the No. 1 suspect. To clear his name Hunt now must ferret out the real double agent and in the process even the score.", "rating": 6.6, "audienceRating": 7.1, "year": 1996, "tagline": "Expect the impossible.", "thumb": "/library/metadata/10398/thumb/1679505055", "art": "/library/metadata/10398/art/1679505055", "duration": 6612628, "originallyAvailableAt": "1996-05-22T00:00:00Z", "addedAt": 1589234571, "updatedAt": 1679505055, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/10501", "ratingImage": "rottentomatoes://image.rating.ripe", "Media": [{"id": 26610, "duration": 6612628, "bitrate": 4751, "width": 1916, "height": 796, "aspectRatio": 2.35, "audioChannels": 6, "audioCodec": "aac", "videoCodec": "hevc", "videoResolution": 1080, "container": "mkv", "videoFrameRate": "24p", "audioProfile": "lc", "videoProfile": "main 10", "Part": [{"id": 26610, "key": "/library/parts/26610/1589234571/file.mkv", "duration": 6612628, "file": "/movies/Mission Impossible (1996)/Mission Impossible (1996) Bluray-1080p.mkv", "size": 3926903851, "audioProfile": "lc", "container": "mkv", "videoProfile": "main 10"}, {"id": 26610, "key": "/library/parts/26610/1589234571/file.mkv", "duration": 6612628, "file": "/movies/Mission Impossible (1996)/Mission Impossible (1996) Bluray-1080p.mkv", "size": 3926903851, "audioProfile": "lc", "container": "mkv", "videoProfile": "main 10"}]}, {"id": 26610, "duration": 6612628, "bitrate": 4751, "width": 1916, "height": 796, "aspectRatio": 2.35, "audioChannels": 6, "audioCodec": "aac", "videoCodec": "hevc", "videoResolution": 1080, "container": "mkv", "videoFrameRate": "24p", "audioProfile": "lc", "videoProfile": "main 10", "Part": [{"id": 26610, "key": "/library/parts/26610/1589234571/file.mkv", "duration": 6612628, "file": "/movies/Mission Impossible (1996)/Mission Impossible (1996) Bluray-1080p.mkv", "size": 3926903851, "audioProfile": "lc", "container": "mkv", "videoProfile": "main 10"}]}, {"id": 26610, "duration": 6612628, "bitrate": 4751, "width": 1916, "height": 796, "aspectRatio": 2.35, "audioChannels": 6, "audioCodec": "aac", "videoCodec": "hevc", "videoResolution": 1080, "container": "mkv", "videoFrameRate": "24p", "audioProfile": "lc", "videoProfile": "main 10", "Part": [{"id": 26610, "key": "/library/parts/26610/1589234571/file.mkv", "duration": 6612628, "file": "/movies/Mission Impossible (1996)/Mission Impossible (1996) Bluray-1080p.mkv", "size": 3926903851, "audioProfile": "lc", "container": "mkv", "videoProfile": "main 10"}]}], "Genre": [{"tag": "Action"}], "Director": [{"tag": "Brian De Palma"}, {"tag": "Brian De Palma"}, {"tag": "Brian De Palma"}], "Writer": [{"tag": "David Koepp"}, {"tag": "David Koepp"}, {"tag": "David Koepp"}], "Country": [{"tag": "United States of America"}, {"tag": "United States of America"}], "Role": [{"tag": "Tom Cruise"}]}], "Provider": [{"key": "/system/search", "title": "Local Network", "type": "mixed"}, {"key": "/system/search", "title": "Local Network", "type": "mixed"}, {"key": "/system/search", "title": "Local Network", "type": "mixed"}]}} + application/json: {"MediaContainer": {"size": 26, "identifier": "com.plexapp.plugins.library", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1680021154, "Metadata": [{"librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionUUID": "322a231a-b7f7-49f5-920f-14c61199cd30", "sourceTitle": "Hera", "ratingKey": 10398, "key": "/library/metadata/10398", "guid": "plex://movie/5d7768284de0ee001fcc8f52", "studio": "Paramount", "type": "movie", "title": "Mission: Impossible", "contentRating": "PG-13", "summary": "When Ethan Hunt the leader of a crack espionage team whose perilous operation has gone awry with no explanation discovers that a mole has penetrated the CIA he's surprised to learn that he's the No. 1 suspect. To clear his name Hunt now must ferret out the real double agent and in the process even the score.", "rating": 6.6, "audienceRating": 7.1, "year": 1996, "tagline": "Expect the impossible.", "thumb": "/library/metadata/10398/thumb/1679505055", "art": "/library/metadata/10398/art/1679505055", "duration": 6612628, "originallyAvailableAt": "1996-05-22T00:00:00Z", "addedAt": 1589234571, "updatedAt": 1679505055, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/10501", "ratingImage": "rottentomatoes://image.rating.ripe", "Media": [{"id": 26610, "duration": 6612628, "bitrate": 4751, "width": 1916, "height": 796, "aspectRatio": 2.35, "audioChannels": 6, "audioCodec": "aac", "videoCodec": "hevc", "videoResolution": 1080, "container": "mkv", "videoFrameRate": "24p", "audioProfile": "lc", "videoProfile": "main 10", "Part": [{"id": 26610, "key": "/library/parts/26610/1589234571/file.mkv", "duration": 6612628, "file": "/movies/Mission Impossible (1996)/Mission Impossible (1996) Bluray-1080p.mkv", "size": 3926903851, "audioProfile": "lc", "container": "mkv", "videoProfile": "main 10"}]}], "Genre": [{"tag": "Action"}], "Director": [{"tag": "Brian De Palma"}], "Writer": [{"tag": "David Koepp"}], "Country": [{"tag": "United States of America"}], "Role": [{"tag": "Tom Cruise"}]}], "Provider": [{"key": "/system/search", "title": "Local Network", "type": "mixed"}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} getFileHash: speakeasy-default-get-file-hash: parameters: @@ -2350,9 +2352,9 @@ examples: url: "file://C:\\Image.png&type=13" responses: "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} get-recently-added-library: speakeasy-default-get-recently-added-library: parameters: @@ -2366,20 +2368,20 @@ examples: X-Plex-Container-Size: 50 responses: "200": - application/json: {"MediaContainer": {"Type": [{"key": "/library/sections/2/all?type=2", "type": "filter", "subtype": "clip", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}, {"key": "/library/sections/2/all?type=2", "type": "filter", "subtype": "clip", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}], "FieldType": [{"type": "tag", "Operator": [{"key": "=", "title": "is"}]}], "size": 50, "identifier": "com.plexapp.plugins.library", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1680021154, "Metadata": [{"librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionUUID": "322a231a-b7f7-49f5-920f-14c61199cd30", "ratingKey": 59398, "key": "/library/metadata/59398", "guid": "plex://movie/5e161a83bea6ac004126e148", "studio": "Marvel Studios", "type": "movie", "title": "Ant-Man and the Wasp: Quantumania", "contentRating": "PG-13", "summary": "Scott Lang and Hope Van Dyne along with Hank Pym and Janet Van Dyne explore the Quantum Realm where they interact with strange creatures and embark on an adventure that goes beyond the limits of what they thought was possible.", "rating": 4.7, "audienceRating": 8.3, "year": 2023, "tagline": "Witness the beginning of a new dynasty.", "thumb": "/library/metadata/59398/thumb/1681888010", "art": "/library/metadata/59398/art/1681888010", "duration": 7474422, "originallyAvailableAt": "2023-02-15T00:00:00Z", "addedAt": 1681803215, "updatedAt": 1681888010, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/59399", "ratingImage": "rottentomatoes://image.rating.rotten", "Media": [{"id": 120345, "duration": 7474422, "bitrate": 3623, "width": 1920, "height": 804, "aspectRatio": 2.35, "audioChannels": 6, "audioCodec": "ac3", "videoCodec": "h264", "videoResolution": 1080, "container": "mp4", "videoFrameRate": "24p", "optimizedForStreaming": 0, "videoProfile": "high", "Part": [{"id": 120353, "key": "/library/parts/120353/1681803203/file.mp4", "duration": 7474422, "file": "/movies/Ant-Man and the Wasp Quantumania (2023)/Ant-Man.and.the.Wasp.Quantumania.2023.1080p.mp4", "size": 3395307162, "container": "mp4", "hasThumbnail": 1, "videoProfile": "high"}]}], "Genre": [{"tag": "Comedy"}], "Director": [{"tag": "Peyton Reed"}], "Writer": [{"tag": "Jeff Loveness"}], "Country": [{"tag": "United States of America"}, {"tag": "United States of America"}, {"tag": "United States of America"}], "Role": [{"tag": "Paul Rudd"}]}]}} + application/json: {"MediaContainer": {"Type": [{"key": "/library/sections/2/all?type=2", "type": "filter", "subtype": "clip", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}], "FieldType": [{"type": "tag", "Operator": [{"key": "=", "title": "is"}]}], "size": 50, "identifier": "com.plexapp.plugins.library", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1680021154, "Metadata": [{"librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionUUID": "322a231a-b7f7-49f5-920f-14c61199cd30", "ratingKey": 59398, "key": "/library/metadata/59398", "guid": "plex://movie/5e161a83bea6ac004126e148", "studio": "Marvel Studios", "type": "movie", "title": "Ant-Man and the Wasp: Quantumania", "contentRating": "PG-13", "summary": "Scott Lang and Hope Van Dyne along with Hank Pym and Janet Van Dyne explore the Quantum Realm where they interact with strange creatures and embark on an adventure that goes beyond the limits of what they thought was possible.", "rating": 4.7, "audienceRating": 8.3, "year": 2023, "tagline": "Witness the beginning of a new dynasty.", "thumb": "/library/metadata/59398/thumb/1681888010", "art": "/library/metadata/59398/art/1681888010", "duration": 7474422, "originallyAvailableAt": "2023-02-15T00:00:00Z", "addedAt": 1681803215, "updatedAt": 1681888010, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/59399", "ratingImage": "rottentomatoes://image.rating.rotten", "Media": [{"id": 120345, "duration": 7474422, "bitrate": 3623, "width": 1920, "height": 804, "aspectRatio": 2.35, "audioChannels": 6, "audioCodec": "ac3", "videoCodec": "h264", "videoResolution": 1080, "container": "mp4", "videoFrameRate": "24p", "optimizedForStreaming": 0, "videoProfile": "high", "Part": [{"id": 120353, "key": "/library/parts/120353/1681803203/file.mp4", "duration": 7474422, "file": "/movies/Ant-Man and the Wasp Quantumania (2023)/Ant-Man.and.the.Wasp.Quantumania.2023.1080p.mp4", "size": 3395307162, "container": "mp4", "hasThumbnail": 1, "videoProfile": "high"}]}], "Genre": [{"tag": "Comedy"}], "Director": [{"tag": "Peyton Reed"}], "Writer": [{"tag": "Jeff Loveness"}], "Country": [{"tag": "United States of America"}], "Role": [{"tag": "Paul Rudd"}]}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} get-all-libraries: speakeasy-default-get-all-libraries: responses: "200": - application/json: {"MediaContainer": {"size": 50, "allowSync": false, "title1": "TV Series", "Directory": [{"allowSync": false, "art": "/:/resources/show-fanart.jpg", "composite": "/library/sections/1/composite/1743824484", "filters": true, "refreshing": true, "thumb": "/:/resources/show.png", "key": "1", "type": "movie", "title": "Movies", "agent": "tv.plex.agents.movie", "scanner": "Plex Movie", "language": "en-US", "uuid": "e69655a2-ef48-4aba-bb19-01e7d3cc34d6", "updatedAt": 1556281940, "createdAt": 1556281940, "scannedAt": 1556281940, "content": true, "directory": true, "contentChangedAt": 9173960, "hidden": 1, "Location": [{"id": 1, "path": "/Movies"}, {"id": 1, "path": "/Movies"}]}, {"allowSync": false, "art": "/:/resources/show-fanart.jpg", "composite": "/library/sections/1/composite/1743824484", "filters": true, "refreshing": true, "thumb": "/:/resources/show.png", "key": "1", "type": "movie", "title": "Movies", "agent": "tv.plex.agents.movie", "scanner": "Plex Movie", "language": "en-US", "uuid": "e69655a2-ef48-4aba-bb19-01e7d3cc34d6", "updatedAt": 1556281940, "createdAt": 1556281940, "scannedAt": 1556281940, "content": true, "directory": true, "contentChangedAt": 9173960, "hidden": 1, "Location": [{"id": 1, "path": "/Movies"}, {"id": 1, "path": "/Movies"}]}]}} + application/json: {"MediaContainer": {"size": 50, "allowSync": false, "title1": "TV Series", "Directory": [{"allowSync": false, "art": "/:/resources/show-fanart.jpg", "composite": "/library/sections/1/composite/1743824484", "filters": true, "refreshing": true, "thumb": "/:/resources/show.png", "key": "1", "type": "movie", "title": "Movies", "agent": "tv.plex.agents.movie", "scanner": "Plex Movie", "language": "en-US", "uuid": "e69655a2-ef48-4aba-bb19-01e7d3cc34d6", "updatedAt": 1556281940, "createdAt": 1556281940, "scannedAt": 1556281940, "content": true, "directory": true, "contentChangedAt": 9173960, "hidden": 1, "Location": [{"id": 1, "path": "/Movies"}]}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} get-library-details: speakeasy-default-get-library-details: parameters: @@ -2389,9 +2391,9 @@ examples: includeDetails: 0 responses: "200": - application/json: {"MediaContainer": {"size": 29, "allowSync": false, "art": "/:/resources/movie-fanart.jpg", "content": "secondary", "identifier": "com.plexapp.plugins.library", "librarySectionID": 1, "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1701731894, "thumb": "/:/resources/movie.png", "title1": "Movies", "viewGroup": "secondary", "viewMode": 65592, "Directory": [{"key": "search?type=1", "title": "Search...", "secondary": true, "prompt": "Search Movies", "search": true}], "Type": [{"key": "/library/sections/1/all?type=1", "type": "movie", "title": "Movies", "active": false, "Filter": [{"filter": "label", "filterType": "string", "key": "/library/sections/1/label", "title": "Labels", "type": "filter"}], "Sort": [{"default": "asc", "defaultDirection": "desc", "descKey": "random:desc", "firstCharacterKey": "/library/sections/1/firstCharacter", "key": "random", "title": "Randomly"}, {"default": "asc", "defaultDirection": "desc", "descKey": "random:desc", "firstCharacterKey": "/library/sections/1/firstCharacter", "key": "random", "title": "Randomly"}, {"default": "asc", "defaultDirection": "desc", "descKey": "random:desc", "firstCharacterKey": "/library/sections/1/firstCharacter", "key": "random", "title": "Randomly"}], "Field": [{"key": "label", "title": "Label", "type": "tag", "subType": "bitrate"}, {"key": "label", "title": "Label", "type": "tag", "subType": "bitrate"}, {"key": "label", "title": "Label", "type": "tag", "subType": "bitrate"}]}, {"key": "/library/sections/1/all?type=1", "type": "movie", "title": "Movies", "active": false, "Filter": [{"filter": "label", "filterType": "string", "key": "/library/sections/1/label", "title": "Labels", "type": "filter"}, {"filter": "label", "filterType": "string", "key": "/library/sections/1/label", "title": "Labels", "type": "filter"}, {"filter": "label", "filterType": "string", "key": "/library/sections/1/label", "title": "Labels", "type": "filter"}], "Sort": [{"default": "asc", "defaultDirection": "desc", "descKey": "random:desc", "firstCharacterKey": "/library/sections/1/firstCharacter", "key": "random", "title": "Randomly"}, {"default": "asc", "defaultDirection": "desc", "descKey": "random:desc", "firstCharacterKey": "/library/sections/1/firstCharacter", "key": "random", "title": "Randomly"}, {"default": "asc", "defaultDirection": "desc", "descKey": "random:desc", "firstCharacterKey": "/library/sections/1/firstCharacter", "key": "random", "title": "Randomly"}], "Field": [{"key": "label", "title": "Label", "type": "tag", "subType": "bitrate"}, {"key": "label", "title": "Label", "type": "tag", "subType": "bitrate"}, {"key": "label", "title": "Label", "type": "tag", "subType": "bitrate"}]}], "FieldType": [{"type": "resolution", "Operator": [{"key": "=", "title": "is"}, {"key": "=", "title": "is"}, {"key": "=", "title": "is"}]}, {"type": "resolution", "Operator": [{"key": "=", "title": "is"}]}]}} + application/json: {"MediaContainer": {"size": 29, "allowSync": false, "art": "/:/resources/movie-fanart.jpg", "content": "secondary", "identifier": "com.plexapp.plugins.library", "librarySectionID": 1, "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1701731894, "thumb": "/:/resources/movie.png", "title1": "Movies", "viewGroup": "secondary", "viewMode": 65592, "Directory": [{"key": "search?type=1", "title": "Search...", "secondary": true, "prompt": "Search Movies", "search": true}], "Type": [{"key": "/library/sections/1/all?type=1", "type": "movie", "title": "Movies", "active": false, "Filter": [{"filter": "label", "filterType": "string", "key": "/library/sections/1/label", "title": "Labels", "type": "filter"}], "Sort": [{"default": "asc", "defaultDirection": "desc", "descKey": "random:desc", "firstCharacterKey": "/library/sections/1/firstCharacter", "key": "random", "title": "Randomly"}], "Field": [{"key": "label", "title": "Label", "type": "tag", "subType": "bitrate"}]}], "FieldType": [{"type": "resolution", "Operator": [{"key": "=", "title": "is"}]}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} deleteLibrary: @@ -2401,14 +2403,14 @@ examples: sectionKey: 9518 responses: "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} get-library-items: speakeasy-default-get-library-items: parameters: path: - tag: "edition" + tag: "newest" sectionKey: 9518 query: includeGuids: 1 @@ -2418,13 +2420,13 @@ examples: X-Plex-Container-Size: 50 responses: "200": - application/json: {"MediaContainer": {"Type": [{"key": "/library/sections/2/all?type=2", "type": "filter", "subtype": "clip", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}, {"key": "/library/sections/2/all?type=2", "type": "filter", "subtype": "clip", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}, {"key": "/library/sections/2/all?type=2", "type": "filter", "subtype": "clip", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}], "FieldType": [{"type": "tag", "Operator": [{"key": "=", "title": "is"}]}, {"type": "tag", "Operator": []}], "size": 70, "totalSize": 170, "offset": 0, "content": "secondary", "allowSync": true, "nocache": true, "art": "/:/resources/movie-fanart.jpg", "identifier": "com.plexapp.plugins.library", "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionUUID": "322a231a-b7f7-49f5-920f-14c61199cd30", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1701731894, "thumb": "/:/resources/movie.png", "title1": "Movies", "title2": "Recently Released", "viewGroup": "movie", "viewMode": 65592, "mixedParents": true, "Metadata": [{"ratingKey": "58683", "key": "/library/metadata/58683", "guid": "plex://movie/5d7768ba96b655001fdc0408", "studio": "20th Century Studios", "skipChildren": false, "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionKey": "/library/sections/1", "type": "movie", "title": "Avatar: The Way of Water", "slug": "4-for-texas", "contentRating": "PG-13", "summary": "Jake Sully lives with his newfound family formed on the extrasolar moon Pandora. Once a familiar threat returns to finish what was previously started, Jake must work with Neytiri and the army of the Na'vi race to protect their home.", "rating": 7.6, "audienceRating": 9.2, "year": 2022, "seasonCount": 2022, "tagline": "Return to Pandora.", "flattenSeasons": "1", "episodeSort": "0", "enableCreditsMarkerGeneration": "-1", "showOrdering": "absolute", "thumb": "/library/metadata/58683/thumb/1703239236", "art": "/library/metadata/58683/art/1703239236", "banner": "/library/metadata/58683/banner/1703239236", "duration": 11558112, "originallyAvailableAt": "2022-12-14T00:00:00Z", "addedAt": 1556281940, "updatedAt": 1556281940, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/58684", "ratingImage": "rottentomatoes://image.rating.ripe", "grandparentRatingKey": "66", "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentKey": "/library/metadata/66", "grandparentTitle": "Caprica", "grandparentThumb": "/library/metadata/66/thumb/1705716261", "parentSlug": "alice-in-borderland-2020", "grandparentSlug": "alice-in-borderland-2020", "grandparentArt": "/library/metadata/66/art/1705716261", "grandparentTheme": "/library/metadata/66/theme/1705716261", "Media": [{"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 1, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}, {"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 1, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}, {"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 1, "has64bitOffsets": false, "Part": []}], "Genre": [{"tag": "Adventure"}], "Country": [{"tag": "United States of America"}, {"tag": "United States of America"}], "Director": [{"tag": "James Cameron"}, {"tag": "James Cameron"}, {"tag": "James Cameron"}], "Writer": [{"tag": "James Cameron"}], "Collection": [{"tag": "Working NL Subs"}, {"tag": "Working NL Subs"}, {"tag": "Working NL Subs"}], "Role": [{"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}, {"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}, {"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}], "Location": [{"path": "/TV Shows/House"}, {"path": "/TV Shows/House"}], "Guid": [{"id": "imdb://tt13015952"}, {"id": "imdb://tt13015952"}], "UltraBlurColors": {"topLeft": "11333b", "topRight": "0a232d", "bottomRight": "73958", "bottomLeft": "1f5066"}, "Rating": [{"image": "themoviedb://image.rating", "value": 3, "type": "audience"}, {"image": "themoviedb://image.rating", "value": 3, "type": "audience"}, {"image": "themoviedb://image.rating", "value": 3, "type": "audience"}], "Image": [{"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}, {"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}], "titleSort": "Whale", "viewCount": 1, "lastViewedAt": 1682752242, "originalTitle": "映画 ブラッククローバー 魔法帝の剣", "viewOffset": 5222500, "skipCount": 1, "index": 1, "theme": "/library/metadata/1/theme/1705636920", "leafCount": 14, "viewedLeafCount": 0, "childCount": 1, "hasPremiumExtras": "1", "hasPremiumPrimaryExtra": "1", "parentRatingKey": "66", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "parentStudio": "UCP", "parentKey": "/library/metadata/66", "parentTitle": "Caprica", "parentIndex": 1, "parentYear": 2010, "parentThumb": "/library/metadata/66/thumb/1705716261", "parentTheme": "/library/metadata/66/theme/1705716261"}, {"ratingKey": "58683", "key": "/library/metadata/58683", "guid": "plex://movie/5d7768ba96b655001fdc0408", "studio": "20th Century Studios", "skipChildren": false, "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionKey": "/library/sections/1", "type": "movie", "title": "Avatar: The Way of Water", "slug": "4-for-texas", "contentRating": "PG-13", "summary": "Jake Sully lives with his newfound family formed on the extrasolar moon Pandora. Once a familiar threat returns to finish what was previously started, Jake must work with Neytiri and the army of the Na'vi race to protect their home.", "rating": 7.6, "audienceRating": 9.2, "year": 2022, "seasonCount": 2022, "tagline": "Return to Pandora.", "flattenSeasons": "1", "episodeSort": "0", "enableCreditsMarkerGeneration": "-1", "showOrdering": "absolute", "thumb": "/library/metadata/58683/thumb/1703239236", "art": "/library/metadata/58683/art/1703239236", "banner": "/library/metadata/58683/banner/1703239236", "duration": 11558112, "originallyAvailableAt": "2022-12-14T00:00:00Z", "addedAt": 1556281940, "updatedAt": 1556281940, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/58684", "ratingImage": "rottentomatoes://image.rating.ripe", "grandparentRatingKey": "66", "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentKey": "/library/metadata/66", "grandparentTitle": "Caprica", "grandparentThumb": "/library/metadata/66/thumb/1705716261", "parentSlug": "alice-in-borderland-2020", "grandparentSlug": "alice-in-borderland-2020", "grandparentArt": "/library/metadata/66/art/1705716261", "grandparentTheme": "/library/metadata/66/theme/1705716261", "Media": [{"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 1, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}, {"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 1, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}, {"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}], "Genre": [{"tag": "Adventure"}, {"tag": "Adventure"}], "Country": [{"tag": "United States of America"}, {"tag": "United States of America"}], "Director": [{"tag": "James Cameron"}], "Writer": [{"tag": "James Cameron"}], "Collection": [{"tag": "Working NL Subs"}], "Role": [{"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}, {"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}, {"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}], "Location": [{"path": "/TV Shows/House"}, {"path": "/TV Shows/House"}, {"path": "/TV Shows/House"}], "Guid": [{"id": "imdb://tt13015952"}, {"id": "imdb://tt13015952"}], "UltraBlurColors": {"topLeft": "11333b", "topRight": "0a232d", "bottomRight": "73958", "bottomLeft": "1f5066"}, "Rating": [{"image": "themoviedb://image.rating", "value": 3, "type": "audience"}, {"image": "themoviedb://image.rating", "value": 3, "type": "audience"}], "Image": [{"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}, {"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}, {"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}], "titleSort": "Whale", "viewCount": 1, "lastViewedAt": 1682752242, "originalTitle": "映画 ブラッククローバー 魔法帝の剣", "viewOffset": 5222500, "skipCount": 1, "index": 1, "theme": "/library/metadata/1/theme/1705636920", "leafCount": 14, "viewedLeafCount": 0, "childCount": 1, "hasPremiumExtras": "1", "hasPremiumPrimaryExtra": "1", "parentRatingKey": "66", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "parentStudio": "UCP", "parentKey": "/library/metadata/66", "parentTitle": "Caprica", "parentIndex": 1, "parentYear": 2010, "parentThumb": "/library/metadata/66/thumb/1705716261", "parentTheme": "/library/metadata/66/theme/1705716261"}], "Meta": {"Type": [{"key": "/library/sections/2/all?type=2", "type": "show", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}], "FieldType": [{"type": "tag", "Operator": [{"key": "=", "title": "is"}, {"key": "=", "title": "is"}, {"key": "=", "title": "is"}]}, {"type": "tag", "Operator": [{"key": "=", "title": "is"}, {"key": "=", "title": "is"}, {"key": "=", "title": "is"}]}, {"type": "tag", "Operator": [{"key": "=", "title": "is"}]}]}}} + application/json: {"MediaContainer": {"Type": [{"key": "/library/sections/2/all?type=2", "type": "filter", "subtype": "clip", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}], "FieldType": [{"type": "tag", "Operator": [{"key": "=", "title": "is"}]}], "size": 70, "totalSize": 170, "offset": 0, "content": "secondary", "allowSync": true, "nocache": true, "art": "/:/resources/movie-fanart.jpg", "identifier": "com.plexapp.plugins.library", "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionUUID": "322a231a-b7f7-49f5-920f-14c61199cd30", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1701731894, "thumb": "/:/resources/movie.png", "title1": "Movies", "title2": "Recently Released", "viewGroup": "movie", "viewMode": 65592, "mixedParents": true, "Metadata": [{"ratingKey": "58683", "key": "/library/metadata/58683", "guid": "plex://movie/5d7768ba96b655001fdc0408", "studio": "20th Century Studios", "skipChildren": false, "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionKey": "/library/sections/1", "type": "movie", "title": "Avatar: The Way of Water", "slug": "4-for-texas", "contentRating": "PG-13", "summary": "Jake Sully lives with his newfound family formed on the extrasolar moon Pandora. Once a familiar threat returns to finish what was previously started, Jake must work with Neytiri and the army of the Na'vi race to protect their home.", "rating": 7.6, "audienceRating": 9.2, "year": 2022, "seasonCount": 2022, "tagline": "Return to Pandora.", "flattenSeasons": "1", "episodeSort": "0", "enableCreditsMarkerGeneration": "-1", "showOrdering": "absolute", "thumb": "/library/metadata/58683/thumb/1703239236", "art": "/library/metadata/58683/art/1703239236", "banner": "/library/metadata/58683/banner/1703239236", "duration": 11558112, "originallyAvailableAt": "2022-12-14T00:00:00Z", "addedAt": 1556281940, "updatedAt": 1556281940, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/58684", "ratingImage": "rottentomatoes://image.rating.ripe", "grandparentRatingKey": "66", "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentKey": "/library/metadata/66", "grandparentTitle": "Caprica", "grandparentThumb": "/library/metadata/66/thumb/1705716261", "parentSlug": "alice-in-borderland-2020", "grandparentSlug": "alice-in-borderland-2020", "grandparentArt": "/library/metadata/66/art/1705716261", "grandparentTheme": "/library/metadata/66/theme/1705716261", "Media": [{"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 1, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}], "Genre": [{"tag": "Adventure"}], "Country": [{"tag": "United States of America"}], "Director": [{"tag": "James Cameron"}], "Writer": [{"tag": "James Cameron"}], "Collection": [{"tag": "Working NL Subs"}], "Role": [{"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}], "Location": [{"path": "/TV Shows/House"}], "Guid": [{"id": "imdb://tt13015952"}], "UltraBlurColors": {"topLeft": "11333b", "topRight": "0a232d", "bottomRight": "73958", "bottomLeft": "1f5066"}, "Rating": [{"image": "themoviedb://image.rating", "value": 3, "type": "audience"}], "Image": [{"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}], "titleSort": "Whale", "viewCount": 1, "lastViewedAt": 1682752242, "originalTitle": "映画 ブラッククローバー 魔法帝の剣", "viewOffset": 5222500, "skipCount": 1, "index": 1, "theme": "/library/metadata/1/theme/1705636920", "leafCount": 14, "viewedLeafCount": 0, "childCount": 1, "hasPremiumExtras": "1", "hasPremiumPrimaryExtra": "1", "parentRatingKey": "66", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "parentStudio": "UCP", "parentKey": "/library/metadata/66", "parentTitle": "Caprica", "parentIndex": 1, "parentYear": 2010, "parentThumb": "/library/metadata/66/thumb/1705716261", "parentTheme": "/library/metadata/66/theme/1705716261"}], "Meta": {"Type": [{"key": "/library/sections/2/all?type=2", "type": "show", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}], "FieldType": [{"type": "tag", "Operator": []}]}}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} - get-all-media-library: - speakeasy-default-get-all-media-library: + get-library-sections-all: + speakeasy-default-get-library-sections-all: parameters: path: sectionKey: 9518 @@ -2439,11 +2441,11 @@ examples: X-Plex-Container-Size: 50 responses: "200": - application/json: {"MediaContainer": {"size": 50, "totalSize": 50, "offset": 0, "allowSync": false, "art": "/:/resources/show-fanart.jpg", "content": "secondary", "identifier": "com.plexapp.plugins.library", "librarySectionID": 2, "librarySectionTitle": "TV Series", "librarySectionUUID": "e69655a2-ef48-4aba-bb19-0cc34d1e7d36", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1734362201, "thumb": "/:/resources/show.png", "nocache": true, "title1": "TV Series", "title2": "By Starring Actor", "viewGroup": "secondary", "Meta": {"Type": [{"key": "/library/sections/2/all?type=2", "type": "filter", "subtype": "clip", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}, {"key": "/library/sections/2/all?type=2", "type": "filter", "subtype": "clip", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}, {"key": "/library/sections/2/all?type=2", "type": "filter", "subtype": "clip", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}], "FieldType": [{"type": "tag", "Operator": []}]}, "Metadata": [{"ratingKey": "58683", "key": "/library/metadata/58683", "guid": "plex://movie/5d7768ba96b655001fdc0408", "slug": "4-for-texas", "studio": "20th Century Studios", "type": "movie", "title": "Avatar: The Way of Water", "titleSort": "Whale", "contentRating": "PG-13", "summary": "Jake Sully lives with his newfound family formed on the extrasolar moon Pandora.\nOnce a familiar threat returns to finish what was previously started, Jake must\nwork with Neytiri and the army of the Na'vi race to protect their home.\n", "rating": 7.6, "audienceRating": 9.2, "year": 2022, "tagline": "Return to Pandora.", "thumb": "/library/metadata/58683/thumb/1703239236", "art": "/library/metadata/58683/art/1703239236", "theme": "/library/metadata/1/theme/1705636920", "index": 1, "leafCount": 14, "viewedLeafCount": 0, "childCount": 1, "seasonCount": 2022, "duration": 11558112, "originallyAvailableAt": "2022-12-14", "addedAt": 1556281940, "updatedAt": 1556281940, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/58684", "originalTitle": "映画 ブラッククローバー 魔法帝の剣", "parentRatingKey": "66", "grandparentRatingKey": "66", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentSlug": "alice-in-borderland-2020", "grandparentKey": "/library/metadata/66", "parentKey": "/library/metadata/66", "grandparentTitle": "Caprica", "grandparentThumb": "/library/metadata/66/thumb/1705716261", "grandparentTheme": "/library/metadata/66/theme/1705716261", "grandparentArt": "/library/metadata/66/art/1705716261", "parentTitle": "Caprica", "parentIndex": 1, "parentThumb": "/library/metadata/66/thumb/1705716261", "ratingImage": "rottentomatoes://image.rating.ripe", "viewCount": 1, "viewOffset": 5222500, "skipCount": 1, "subtype": "clip", "lastRatedAt": 1721813113, "createdAtAccuracy": "epoch,local", "createdAtTZOffset": "0", "lastViewedAt": 1682752242, "userRating": 10, "Image": [{"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}, {"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}], "UltraBlurColors": {"topLeft": "11333b", "topRight": "0a232d", "bottomRight": "73958", "bottomLeft": "1f5066"}, "Media": [{"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "displayOffset": 50, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "audioProfile": "dts", "has64bitOffsets": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "packetLength": 188, "container": "mkv", "videoProfile": "main 10", "audioProfile": "dts", "has64bitOffsets": false, "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}, {"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "displayOffset": 50, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "audioProfile": "dts", "has64bitOffsets": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "packetLength": 188, "container": "mkv", "videoProfile": "main 10", "audioProfile": "dts", "has64bitOffsets": false, "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}, {"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "displayOffset": 50, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "audioProfile": "dts", "has64bitOffsets": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "packetLength": 188, "container": "mkv", "videoProfile": "main 10", "audioProfile": "dts", "has64bitOffsets": false, "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}, {"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "packetLength": 188, "container": "mkv", "videoProfile": "main 10", "audioProfile": "dts", "has64bitOffsets": false, "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}, {"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "packetLength": 188, "container": "mkv", "videoProfile": "main 10", "audioProfile": "dts", "has64bitOffsets": false, "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}], "Genre": [{"tag": "Crime"}, {"tag": "Crime"}, {"tag": "Crime"}], "Country": [{"tag": "United States of America"}, {"tag": "United States of America"}], "Director": [{"tag": "Danny Boyle"}, {"tag": "Danny Boyle"}], "Writer": [{"tag": "Jamie P. Hanson"}, {"tag": "Jamie P. Hanson"}], "Role": [{"tag": "Teller"}], "Guid": [{"id": "tvdb://2337"}], "Collection": [{"tag": "My Awesome Collection"}, {"tag": "My Awesome Collection"}]}]}} + application/json: {"MediaContainer": {"size": 50, "totalSize": 50, "offset": 0, "allowSync": false, "art": "/:/resources/show-fanart.jpg", "content": "secondary", "identifier": "com.plexapp.plugins.library", "librarySectionID": 2, "librarySectionTitle": "TV Series", "librarySectionUUID": "e69655a2-ef48-4aba-bb19-0cc34d1e7d36", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1734362201, "thumb": "/:/resources/show.png", "nocache": true, "title1": "TV Series", "title2": "By Starring Actor", "viewGroup": "secondary", "Meta": {"Type": [{"key": "/library/sections/2/all?type=2", "type": "filter", "subtype": "clip", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}], "FieldType": [{"type": "tag", "Operator": []}]}, "Metadata": [{"ratingKey": "58683", "key": "/library/metadata/58683", "guid": "plex://movie/5d7768ba96b655001fdc0408", "slug": "4-for-texas", "studio": "20th Century Studios", "type": "movie", "title": "Avatar: The Way of Water", "titleSort": "Whale", "contentRating": "PG-13", "summary": "Jake Sully lives with his newfound family formed on the extrasolar moon Pandora.\nOnce a familiar threat returns to finish what was previously started, Jake must\nwork with Neytiri and the army of the Na'vi race to protect their home.\n", "rating": 7.6, "audienceRating": 9.2, "year": 2022, "tagline": "Return to Pandora.", "thumb": "/library/metadata/58683/thumb/1703239236", "art": "/library/metadata/58683/art/1703239236", "theme": "/library/metadata/1/theme/1705636920", "index": 1, "leafCount": 14, "viewedLeafCount": 0, "childCount": 1, "seasonCount": 2022, "duration": 11558112, "originallyAvailableAt": "2022-12-14", "addedAt": 1556281940, "updatedAt": 1556281940, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/58684", "originalTitle": "映画 ブラッククローバー 魔法帝の剣", "parentRatingKey": "66", "grandparentRatingKey": "66", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentSlug": "alice-in-borderland-2020", "grandparentKey": "/library/metadata/66", "parentKey": "/library/metadata/66", "grandparentTitle": "Caprica", "grandparentThumb": "/library/metadata/66/thumb/1705716261", "grandparentTheme": "/library/metadata/66/theme/1705716261", "grandparentArt": "/library/metadata/66/art/1705716261", "parentTitle": "Caprica", "parentIndex": 1, "parentThumb": "/library/metadata/66/thumb/1705716261", "ratingImage": "rottentomatoes://image.rating.ripe", "viewCount": 1, "viewOffset": 5222500, "skipCount": 1, "subtype": "clip", "lastRatedAt": 1721813113, "createdAtAccuracy": "epoch,local", "createdAtTZOffset": "0", "lastViewedAt": 1682752242, "userRating": 10, "Image": [{"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}], "UltraBlurColors": {"topLeft": "11333b", "topRight": "0a232d", "bottomRight": "73958", "bottomLeft": "1f5066"}, "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "displayOffset": 50, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "audioProfile": "dts", "has64bitOffsets": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "packetLength": 188, "container": "mkv", "videoProfile": "main 10", "audioProfile": "dts", "has64bitOffsets": false, "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}], "Genre": [{"tag": "Crime"}], "Country": [{"tag": "United States of America"}], "Director": [{"tag": "Danny Boyle"}], "Writer": [{"tag": "Jamie P. Hanson"}], "Role": [{"tag": "Teller"}], "Collection": [{"tag": "My Awesome Collection"}]}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} get-refresh-library-metadata: speakeasy-default-get-refresh-library-metadata: parameters: @@ -2453,9 +2455,9 @@ examples: force: 0 responses: "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} get-search-library: speakeasy-default-get-search-library: parameters: @@ -2467,9 +2469,9 @@ examples: "200": application/json: {"MediaContainer": {"size": 2, "allowSync": false, "art": "/:/resources/show-fanart.jpg", "identifier": "com.plexapp.plugins.library", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1698860922, "nocache": true, "thumb": "/:/resources/show.png", "title1": "TV Shows", "title2": "Search for ''", "viewGroup": "season", "viewMode": 65593, "Metadata": [{"ratingKey": "2", "key": "/library/metadata/2/children", "parentRatingKey": "1", "guid": "plex://season/602e67e766dfdb002c0a1b5b", "parentGuid": "plex://show/5d9c086c7d06d9001ffd27aa", "parentStudio": "Mutant Enemy Productions", "type": "season", "title": "Season 1", "parentKey": "/library/metadata/1", "parentTitle": "Firefly", "summary": "Captain Malcolm 'Mal' Reynolds is a former galactic war veteran who is the captain of the transport ship \"Serenity\". Mal and his crew, ensign Zoe Alleyne Washburne; Zoe's husband, pilot Hoban 'Wash' Washburne; muscular mercenary Jayne Cobb; young mechanic Kaylee Frye; former Alliance medical officer Simon Tam; his disturbed teenage sister River (both on the run from the interplanetary government \"The Alliance\"); the beautiful courtesan Inara Serra; and preacher Shepherd Book do any jobs, legal or illegal, they can find as the Serenity crew travels across the outskirts of outer space.", "index": 1, "parentIndex": 1, "parentYear": 2002, "thumb": "/library/metadata/2/thumb/1705636920", "art": "/library/metadata/1/art/1705636920", "parentThumb": "/library/metadata/1/thumb/1705636920", "parentTheme": "/library/metadata/1/theme/1705636920", "addedAt": 1705636916, "updatedAt": 1705636920}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} get-genres-library: speakeasy-default-get-genres-library: parameters: @@ -2483,7 +2485,7 @@ examples: "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} get-countries-library: speakeasy-default-get-countries-library: parameters: @@ -2495,9 +2497,9 @@ examples: "200": application/json: {"MediaContainer": {"size": 50, "allowSync": false, "art": "/:/resources/show-fanart.jpg", "content": "secondary", "identifier": "com.plexapp.plugins.library", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1734362201, "nocache": true, "thumb": "/:/resources/show.png", "title1": "TV Series", "title2": "By Starring Actor", "viewGroup": "secondary", "Directory": [{"fastKey": "/library/sections/2/all?country=15491", "key": "15491", "title": "Japan"}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} get-actors-library: speakeasy-default-get-actors-library: parameters: @@ -2507,11 +2509,11 @@ examples: type: 2 responses: "200": - application/json: {"MediaContainer": {"size": 50, "allowSync": false, "art": "/:/resources/show-fanart.jpg", "identifier": "com.plexapp.plugins.library", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1734362201, "nocache": true, "thumb": "/:/resources/show.png", "title1": "TV Series", "title2": "By Starring Actor", "viewGroup": "secondary", "viewMode": "131131", "Directory": [{"fastKey": "/library/sections/2/all?actor=134671", "thumb": "https://metadata-static.plex.tv/e/people/e2a915b537ef720252b6d408bc1f91b3.jpg", "key": "134671", "title": "Aaron Paul"}, {"fastKey": "/library/sections/2/all?actor=134671", "thumb": "https://metadata-static.plex.tv/e/people/e2a915b537ef720252b6d408bc1f91b3.jpg", "key": "134671", "title": "Aaron Paul"}]}} + application/json: {"MediaContainer": {"size": 50, "allowSync": false, "art": "/:/resources/show-fanart.jpg", "identifier": "com.plexapp.plugins.library", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1734362201, "nocache": true, "thumb": "/:/resources/show.png", "title1": "TV Series", "title2": "By Starring Actor", "viewGroup": "secondary", "viewMode": "131131", "Directory": [{"fastKey": "/library/sections/2/all?actor=134671", "thumb": "https://metadata-static.plex.tv/e/people/e2a915b537ef720252b6d408bc1f91b3.jpg", "key": "134671", "title": "Aaron Paul"}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} get-search-all-libraries: "": parameters: @@ -2524,16 +2526,16 @@ examples: X-Plex-Client-Identifier: "3381b62b-9ab7-4e37-827b-203e9809eb58" responses: "200": - application/json: {"MediaContainer": {"size": 9266.91, "SearchResult": [{"score": 2698.71, "Metadata": {"ratingKey": "58683", "key": "/library/metadata/58683", "guid": "plex://movie/5d7768ba96b655001fdc0408", "studio": "20th Century Studios", "skipChildren": false, "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionKey": "/library/sections/1", "type": "movie", "title": "Avatar: The Way of Water", "slug": "4-for-texas", "contentRating": "PG-13", "summary": "Jake Sully lives with his newfound family formed on the extrasolar moon Pandora. Once a familiar threat returns to finish what was previously started, Jake must work with Neytiri and the army of the Na'vi race to protect their home.", "rating": 7.6, "audienceRating": 9.2, "year": 2022, "seasonCount": 2022, "tagline": "Return to Pandora.", "flattenSeasons": "1", "episodeSort": "0", "enableCreditsMarkerGeneration": "-1", "showOrdering": "absolute", "thumb": "/library/metadata/58683/thumb/1703239236", "art": "/library/metadata/58683/art/1703239236", "banner": "/library/metadata/58683/banner/1703239236", "duration": 11558112, "originallyAvailableAt": "2022-12-14T00:00:00Z", "addedAt": 1556281940, "updatedAt": 1556281940, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/58684", "ratingImage": "rottentomatoes://image.rating.ripe", "grandparentRatingKey": "66", "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentKey": "/library/metadata/66", "grandparentTitle": "Caprica", "grandparentThumb": "/library/metadata/66/thumb/1705716261", "parentSlug": "alice-in-borderland-2020", "grandparentSlug": "alice-in-borderland-2020", "grandparentArt": "/library/metadata/66/art/1705716261", "grandparentTheme": "/library/metadata/66/theme/1705716261", "Media": [{"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 0, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "0", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}, {"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 0, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "0", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}, {"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "0", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}, {"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "0", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}, {"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 0, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "0", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}, {"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "0", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}, {"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "0", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}], "Genre": [{"tag": "Adventure"}, {"tag": "Adventure"}, {"tag": "Adventure"}], "Country": [{"tag": "United States of America"}, {"tag": "United States of America"}], "Director": [{"tag": "James Cameron"}], "Writer": [{"tag": "James Cameron"}, {"tag": "James Cameron"}], "Collection": [{"tag": "Working NL Subs"}], "Role": [{"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}, {"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}], "Location": [{"path": "/TV Shows/House"}, {"path": "/TV Shows/House"}, {"path": "/TV Shows/House"}], "Guid": [{"id": "imdb://tt13015952"}], "UltraBlurColors": {"topLeft": "11333b", "topRight": "0a232d", "bottomRight": "73958", "bottomLeft": "1f5066"}, "Rating": [{"image": "themoviedb://image.rating", "value": 3, "type": "audience"}], "Image": [{"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}], "titleSort": "Whale", "viewCount": 1, "lastViewedAt": 1682752242, "originalTitle": "映画 ブラッククローバー 魔法帝の剣", "viewOffset": 5222500, "skipCount": 1, "index": 1, "theme": "/library/metadata/1/theme/1705636920", "leafCount": 14, "viewedLeafCount": 0, "childCount": 1, "hasPremiumExtras": "1", "hasPremiumPrimaryExtra": "1", "parentRatingKey": "66", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "parentStudio": "UCP", "parentKey": "/library/metadata/66", "parentTitle": "Caprica", "parentIndex": 1, "parentYear": 2010, "parentThumb": "/library/metadata/66/thumb/1705716261", "parentTheme": "/library/metadata/66/theme/1705716261"}}, {"score": 8744.37, "Metadata": {"ratingKey": "58683", "key": "/library/metadata/58683", "guid": "plex://movie/5d7768ba96b655001fdc0408", "studio": "20th Century Studios", "skipChildren": false, "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionKey": "/library/sections/1", "type": "movie", "title": "Avatar: The Way of Water", "slug": "4-for-texas", "contentRating": "PG-13", "summary": "Jake Sully lives with his newfound family formed on the extrasolar moon Pandora. Once a familiar threat returns to finish what was previously started, Jake must work with Neytiri and the army of the Na'vi race to protect their home.", "rating": 7.6, "audienceRating": 9.2, "year": 2022, "seasonCount": 2022, "tagline": "Return to Pandora.", "flattenSeasons": "1", "episodeSort": "0", "enableCreditsMarkerGeneration": "-1", "showOrdering": "absolute", "thumb": "/library/metadata/58683/thumb/1703239236", "art": "/library/metadata/58683/art/1703239236", "banner": "/library/metadata/58683/banner/1703239236", "duration": 11558112, "originallyAvailableAt": "2022-12-14T00:00:00Z", "addedAt": 1556281940, "updatedAt": 1556281940, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/58684", "ratingImage": "rottentomatoes://image.rating.ripe", "grandparentRatingKey": "66", "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentKey": "/library/metadata/66", "grandparentTitle": "Caprica", "grandparentThumb": "/library/metadata/66/thumb/1705716261", "parentSlug": "alice-in-borderland-2020", "grandparentSlug": "alice-in-borderland-2020", "grandparentArt": "/library/metadata/66/art/1705716261", "grandparentTheme": "/library/metadata/66/theme/1705716261", "Media": [{"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 0, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "0", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}, {"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 0, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "0", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}, {"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "0", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}, {"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "0", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}, {"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 0, "has64bitOffsets": false, "Part": []}], "Genre": [{"tag": "Adventure"}, {"tag": "Adventure"}], "Country": [{"tag": "United States of America"}], "Director": [{"tag": "James Cameron"}, {"tag": "James Cameron"}, {"tag": "James Cameron"}], "Writer": [{"tag": "James Cameron"}, {"tag": "James Cameron"}], "Collection": [{"tag": "Working NL Subs"}, {"tag": "Working NL Subs"}], "Role": [{"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}], "Location": [{"path": "/TV Shows/House"}], "Guid": [{"id": "imdb://tt13015952"}, {"id": "imdb://tt13015952"}], "UltraBlurColors": {"topLeft": "11333b", "topRight": "0a232d", "bottomRight": "73958", "bottomLeft": "1f5066"}, "Rating": [{"image": "themoviedb://image.rating", "value": 3, "type": "audience"}, {"image": "themoviedb://image.rating", "value": 3, "type": "audience"}], "Image": [{"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}, {"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}, {"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}], "titleSort": "Whale", "viewCount": 1, "lastViewedAt": 1682752242, "originalTitle": "映画 ブラッククローバー 魔法帝の剣", "viewOffset": 5222500, "skipCount": 1, "index": 1, "theme": "/library/metadata/1/theme/1705636920", "leafCount": 14, "viewedLeafCount": 0, "childCount": 1, "hasPremiumExtras": "1", "hasPremiumPrimaryExtra": "1", "parentRatingKey": "66", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "parentStudio": "UCP", "parentKey": "/library/metadata/66", "parentTitle": "Caprica", "parentIndex": 1, "parentYear": 2010, "parentThumb": "/library/metadata/66/thumb/1705716261", "parentTheme": "/library/metadata/66/theme/1705716261"}}, {"score": 6729.16, "Metadata": {"ratingKey": "58683", "key": "/library/metadata/58683", "guid": "plex://movie/5d7768ba96b655001fdc0408", "studio": "20th Century Studios", "skipChildren": false, "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionKey": "/library/sections/1", "type": "movie", "title": "Avatar: The Way of Water", "slug": "4-for-texas", "contentRating": "PG-13", "summary": "Jake Sully lives with his newfound family formed on the extrasolar moon Pandora. Once a familiar threat returns to finish what was previously started, Jake must work with Neytiri and the army of the Na'vi race to protect their home.", "rating": 7.6, "audienceRating": 9.2, "year": 2022, "seasonCount": 2022, "tagline": "Return to Pandora.", "flattenSeasons": "1", "episodeSort": "0", "enableCreditsMarkerGeneration": "-1", "showOrdering": "absolute", "thumb": "/library/metadata/58683/thumb/1703239236", "art": "/library/metadata/58683/art/1703239236", "banner": "/library/metadata/58683/banner/1703239236", "duration": 11558112, "originallyAvailableAt": "2022-12-14T00:00:00Z", "addedAt": 1556281940, "updatedAt": 1556281940, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/58684", "ratingImage": "rottentomatoes://image.rating.ripe", "grandparentRatingKey": "66", "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentKey": "/library/metadata/66", "grandparentTitle": "Caprica", "grandparentThumb": "/library/metadata/66/thumb/1705716261", "parentSlug": "alice-in-borderland-2020", "grandparentSlug": "alice-in-borderland-2020", "grandparentArt": "/library/metadata/66/art/1705716261", "grandparentTheme": "/library/metadata/66/theme/1705716261", "Media": [{"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 0, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "0", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}, {"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "0", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}, {"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 0, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "0", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}, {"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "0", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}, {"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "0", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}], "Genre": [{"tag": "Adventure"}, {"tag": "Adventure"}, {"tag": "Adventure"}], "Country": [{"tag": "United States of America"}], "Director": [{"tag": "James Cameron"}, {"tag": "James Cameron"}], "Writer": [{"tag": "James Cameron"}, {"tag": "James Cameron"}, {"tag": "James Cameron"}], "Collection": [{"tag": "Working NL Subs"}, {"tag": "Working NL Subs"}, {"tag": "Working NL Subs"}], "Role": [{"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}, {"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}], "Location": [{"path": "/TV Shows/House"}], "Guid": [{"id": "imdb://tt13015952"}, {"id": "imdb://tt13015952"}, {"id": "imdb://tt13015952"}], "UltraBlurColors": {"topLeft": "11333b", "topRight": "0a232d", "bottomRight": "73958", "bottomLeft": "1f5066"}, "Rating": [{"image": "themoviedb://image.rating", "value": 3, "type": "audience"}, {"image": "themoviedb://image.rating", "value": 3, "type": "audience"}], "Image": [{"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}, {"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}, {"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}], "titleSort": "Whale", "viewCount": 1, "lastViewedAt": 1682752242, "originalTitle": "映画 ブラッククローバー 魔法帝の剣", "viewOffset": 5222500, "skipCount": 1, "index": 1, "theme": "/library/metadata/1/theme/1705636920", "leafCount": 14, "viewedLeafCount": 0, "childCount": 1, "hasPremiumExtras": "1", "hasPremiumPrimaryExtra": "1", "parentRatingKey": "66", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "parentStudio": "UCP", "parentKey": "/library/metadata/66", "parentTitle": "Caprica", "parentIndex": 1, "parentYear": 2010, "parentThumb": "/library/metadata/66/thumb/1705716261", "parentTheme": "/library/metadata/66/theme/1705716261"}}]}} + application/json: {"MediaContainer": {"size": 5709.89, "SearchResult": []}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} get-media-meta-data: speakeasy-default-get-media-meta-data: parameters: path: - ratingKey: 9518 + ratingKey: "21119,21617" query: includeConcerts: true includeExtras: true @@ -2550,11 +2552,11 @@ examples: asyncRefreshLocalMediaAgent: true responses: "200": - application/json: {"MediaContainer": {"size": 50, "allowSync": false, "identifier": "com.plexapp.plugins.library", "librarySectionID": 2, "librarySectionTitle": "TV Series", "librarySectionUUID": "e69655a2-ef48-4aba-bb19-0cc34d1e7d36", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1734362201, "Metadata": [{"ratingKey": "58683", "key": "/library/metadata/58683", "guid": "plex://movie/5d7768ba96b655001fdc0408", "slug": "4-for-texas", "studio": "20th Century Studios", "type": "movie", "title": "Avatar: The Way of Water", "titleSort": "Whale", "contentRating": "PG-13", "summary": "Jake Sully lives with his newfound family formed on the extrasolar moon Pandora.\nOnce a familiar threat returns to finish what was previously started, Jake must\nwork with Neytiri and the army of the Na'vi race to protect their home.\n", "rating": 7.6, "audienceRating": 9.2, "year": 2022, "tagline": "Return to Pandora.", "thumb": "/library/metadata/58683/thumb/1703239236", "art": "/library/metadata/58683/art/1703239236", "theme": "/library/metadata/1/theme/1705636920", "index": 1, "leafCount": 14, "viewedLeafCount": 0, "childCount": 1, "seasonCount": 2022, "duration": 11558112, "originallyAvailableAt": "2022-12-14", "addedAt": 1556281940, "updatedAt": 1556281940, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/58684", "originalTitle": "映画 ブラッククローバー 魔法帝の剣", "parentRatingKey": "66", "grandparentRatingKey": "66", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentSlug": "alice-in-borderland-2020", "grandparentKey": "/library/metadata/66", "parentKey": "/library/metadata/66", "grandparentTitle": "Caprica", "grandparentThumb": "/library/metadata/66/thumb/1705716261", "grandparentTheme": "/library/metadata/66/theme/1705716261", "grandparentArt": "/library/metadata/66/art/1705716261", "parentTitle": "Caprica", "parentIndex": 1, "parentThumb": "/library/metadata/66/thumb/1705716261", "ratingImage": "rottentomatoes://image.rating.ripe", "viewCount": 1, "viewOffset": 5222500, "skipCount": 1, "subtype": "clip", "lastRatedAt": 1721813113, "createdAtAccuracy": "epoch,local", "createdAtTZOffset": "0", "lastViewedAt": 1682752242, "userRating": 10, "Image": [{"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}, {"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}], "UltraBlurColors": {"topLeft": "11333b", "topRight": "0a232d", "bottomRight": "73958", "bottomLeft": "1f5066"}, "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionKey": "/library/sections/1", "Media": [{"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "displayOffset": 50, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "audioProfile": "dts", "has64bitOffsets": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "packetLength": 188, "container": "mkv", "videoProfile": "main 10", "audioProfile": "dts", "has64bitOffsets": false, "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}, {"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "packetLength": 188, "container": "mkv", "videoProfile": "main 10", "audioProfile": "dts", "has64bitOffsets": false, "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}, {"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "displayOffset": 50, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "audioProfile": "dts", "has64bitOffsets": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "packetLength": 188, "container": "mkv", "videoProfile": "main 10", "audioProfile": "dts", "has64bitOffsets": false, "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}, {"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "displayOffset": 50, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "audioProfile": "dts", "has64bitOffsets": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "packetLength": 188, "container": "mkv", "videoProfile": "main 10", "audioProfile": "dts", "has64bitOffsets": false, "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}], "Genre": [{"id": 259, "tag": "Crime", "filter": "genre=19"}], "Country": [{"id": 259, "tag": "United States of America", "filter": "country=19"}, {"id": 259, "tag": "United States of America", "filter": "country=19"}], "Director": [{"id": 126522, "tag": "Danny Boyle", "filter": "director=235876", "tagKey": "5d776831151a60001f24d031", "thumb": "https://metadata-static.plex.tv/8/people/8d65fa96804802e08f2de09fe014408e.jpg"}], "Writer": [{"id": 126522, "tag": "Jamie P. Hanson", "filter": "writer=126522", "thumb": "https://metadata-static.plex.tv/8/people/8d65fa96804802e08f2de09fe014408e.jpg", "tagKey": "5d77683d85719b001f3a535e"}, {"id": 126522, "tag": "Jamie P. Hanson", "filter": "writer=126522", "thumb": "https://metadata-static.plex.tv/8/people/8d65fa96804802e08f2de09fe014408e.jpg", "tagKey": "5d77683d85719b001f3a535e"}], "Producer": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Role": [{"id": 126522, "tag": "Teller", "role": "Self - Judge", "filter": "actor=126522", "tagKey": "5d77683d85719b001f3a535e", "thumb": "https://metadata-static.plex.tv/7/people/708568fd018d7aa8b1032dcf867747e8.jpg"}, {"id": 126522, "tag": "Teller", "role": "Self - Judge", "filter": "actor=126522", "tagKey": "5d77683d85719b001f3a535e", "thumb": "https://metadata-static.plex.tv/7/people/708568fd018d7aa8b1032dcf867747e8.jpg"}, {"id": 126522, "tag": "Teller", "role": "Self - Judge", "filter": "actor=126522", "tagKey": "5d77683d85719b001f3a535e", "thumb": "https://metadata-static.plex.tv/7/people/708568fd018d7aa8b1032dcf867747e8.jpg"}], "Guid": [{"id": "imdb://tt3032476"}, {"id": "imdb://tt3032476"}], "Rating": [{"image": "imdb://image.rating", "value": 9, "type": "audience"}], "Similar": [{"id": 26, "filter": "similar=26", "tag": "Breaking Bad"}, {"id": 26, "filter": "similar=26", "tag": "Breaking Bad"}, {"id": 26, "filter": "similar=26", "tag": "Breaking Bad"}], "Location": [{"path": "/TV Shows/Better Call Saul"}], "Chapter": [{"id": 4, "filter": "thumb=4", "index": 1, "startTimeOffset": 0, "endTimeOffset": 100100, "thumb": "/library/media/46883/chapterImages/1"}, {"id": 4, "filter": "thumb=4", "index": 1, "startTimeOffset": 0, "endTimeOffset": 100100, "thumb": "/library/media/46883/chapterImages/1"}, {"id": 4, "filter": "thumb=4", "index": 1, "startTimeOffset": 0, "endTimeOffset": 100100, "thumb": "/library/media/46883/chapterImages/1"}], "Marker": [{"id": 306970, "type": "credits", "startTimeOffset": 4176050, "endTimeOffset": 4393389, "final": true, "Attributes": {"id": 306970, "version": 4}}, {"id": 306970, "type": "credits", "startTimeOffset": 4176050, "endTimeOffset": 4393389, "final": true, "Attributes": {"id": 306970, "version": 4}}, {"id": 306970, "type": "credits", "startTimeOffset": 4176050, "endTimeOffset": 4393389, "final": true, "Attributes": {"id": 306970, "version": 4}}], "Extras": {"size": 1}}, {"ratingKey": "58683", "key": "/library/metadata/58683", "guid": "plex://movie/5d7768ba96b655001fdc0408", "slug": "4-for-texas", "studio": "20th Century Studios", "type": "movie", "title": "Avatar: The Way of Water", "titleSort": "Whale", "contentRating": "PG-13", "summary": "Jake Sully lives with his newfound family formed on the extrasolar moon Pandora.\nOnce a familiar threat returns to finish what was previously started, Jake must\nwork with Neytiri and the army of the Na'vi race to protect their home.\n", "rating": 7.6, "audienceRating": 9.2, "year": 2022, "tagline": "Return to Pandora.", "thumb": "/library/metadata/58683/thumb/1703239236", "art": "/library/metadata/58683/art/1703239236", "theme": "/library/metadata/1/theme/1705636920", "index": 1, "leafCount": 14, "viewedLeafCount": 0, "childCount": 1, "seasonCount": 2022, "duration": 11558112, "originallyAvailableAt": "2022-12-14", "addedAt": 1556281940, "updatedAt": 1556281940, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/58684", "originalTitle": "映画 ブラッククローバー 魔法帝の剣", "parentRatingKey": "66", "grandparentRatingKey": "66", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentSlug": "alice-in-borderland-2020", "grandparentKey": "/library/metadata/66", "parentKey": "/library/metadata/66", "grandparentTitle": "Caprica", "grandparentThumb": "/library/metadata/66/thumb/1705716261", "grandparentTheme": "/library/metadata/66/theme/1705716261", "grandparentArt": "/library/metadata/66/art/1705716261", "parentTitle": "Caprica", "parentIndex": 1, "parentThumb": "/library/metadata/66/thumb/1705716261", "ratingImage": "rottentomatoes://image.rating.ripe", "viewCount": 1, "viewOffset": 5222500, "skipCount": 1, "subtype": "clip", "lastRatedAt": 1721813113, "createdAtAccuracy": "epoch,local", "createdAtTZOffset": "0", "lastViewedAt": 1682752242, "userRating": 10, "Image": [{"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}], "UltraBlurColors": {"topLeft": "11333b", "topRight": "0a232d", "bottomRight": "73958", "bottomLeft": "1f5066"}, "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionKey": "/library/sections/1", "Media": [{"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "displayOffset": 50, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "audioProfile": "dts", "has64bitOffsets": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "packetLength": 188, "container": "mkv", "videoProfile": "main 10", "audioProfile": "dts", "has64bitOffsets": false, "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}, {"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "packetLength": 188, "container": "mkv", "videoProfile": "main 10", "audioProfile": "dts", "has64bitOffsets": false, "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}, {"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "displayOffset": 50, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "audioProfile": "dts", "has64bitOffsets": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "packetLength": 188, "container": "mkv", "videoProfile": "main 10", "audioProfile": "dts", "has64bitOffsets": false, "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}], "Genre": [{"id": 259, "tag": "Crime", "filter": "genre=19"}, {"id": 259, "tag": "Crime", "filter": "genre=19"}, {"id": 259, "tag": "Crime", "filter": "genre=19"}], "Country": [{"id": 259, "tag": "United States of America", "filter": "country=19"}], "Director": [{"id": 126522, "tag": "Danny Boyle", "filter": "director=235876", "tagKey": "5d776831151a60001f24d031", "thumb": "https://metadata-static.plex.tv/8/people/8d65fa96804802e08f2de09fe014408e.jpg"}, {"id": 126522, "tag": "Danny Boyle", "filter": "director=235876", "tagKey": "5d776831151a60001f24d031", "thumb": "https://metadata-static.plex.tv/8/people/8d65fa96804802e08f2de09fe014408e.jpg"}], "Writer": [{"id": 126522, "tag": "Jamie P. Hanson", "filter": "writer=126522", "thumb": "https://metadata-static.plex.tv/8/people/8d65fa96804802e08f2de09fe014408e.jpg", "tagKey": "5d77683d85719b001f3a535e"}, {"id": 126522, "tag": "Jamie P. Hanson", "filter": "writer=126522", "thumb": "https://metadata-static.plex.tv/8/people/8d65fa96804802e08f2de09fe014408e.jpg", "tagKey": "5d77683d85719b001f3a535e"}], "Producer": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Role": [{"id": 126522, "tag": "Teller", "role": "Self - Judge", "filter": "actor=126522", "tagKey": "5d77683d85719b001f3a535e", "thumb": "https://metadata-static.plex.tv/7/people/708568fd018d7aa8b1032dcf867747e8.jpg"}, {"id": 126522, "tag": "Teller", "role": "Self - Judge", "filter": "actor=126522", "tagKey": "5d77683d85719b001f3a535e", "thumb": "https://metadata-static.plex.tv/7/people/708568fd018d7aa8b1032dcf867747e8.jpg"}, {"id": 126522, "tag": "Teller", "role": "Self - Judge", "filter": "actor=126522", "tagKey": "5d77683d85719b001f3a535e", "thumb": "https://metadata-static.plex.tv/7/people/708568fd018d7aa8b1032dcf867747e8.jpg"}], "Guid": [{"id": "imdb://tt3032476"}], "Rating": [{"image": "imdb://image.rating", "value": 9, "type": "audience"}], "Similar": [{"id": 26, "filter": "similar=26", "tag": "Breaking Bad"}, {"id": 26, "filter": "similar=26", "tag": "Breaking Bad"}], "Location": [{"path": "/TV Shows/Better Call Saul"}, {"path": "/TV Shows/Better Call Saul"}, {"path": "/TV Shows/Better Call Saul"}], "Chapter": [{"id": 4, "filter": "thumb=4", "index": 1, "startTimeOffset": 0, "endTimeOffset": 100100, "thumb": "/library/media/46883/chapterImages/1"}, {"id": 4, "filter": "thumb=4", "index": 1, "startTimeOffset": 0, "endTimeOffset": 100100, "thumb": "/library/media/46883/chapterImages/1"}], "Marker": [{"id": 306970, "type": "credits", "startTimeOffset": 4176050, "endTimeOffset": 4393389, "final": true, "Attributes": {"id": 306970, "version": 4}}, {"id": 306970, "type": "credits", "startTimeOffset": 4176050, "endTimeOffset": 4393389, "final": true, "Attributes": {"id": 306970, "version": 4}}, {"id": 306970, "type": "credits", "startTimeOffset": 4176050, "endTimeOffset": 4393389, "final": true, "Attributes": {"id": 306970, "version": 4}}], "Extras": {"size": 1}}, {"ratingKey": "58683", "key": "/library/metadata/58683", "guid": "plex://movie/5d7768ba96b655001fdc0408", "slug": "4-for-texas", "studio": "20th Century Studios", "type": "movie", "title": "Avatar: The Way of Water", "titleSort": "Whale", "contentRating": "PG-13", "summary": "Jake Sully lives with his newfound family formed on the extrasolar moon Pandora.\nOnce a familiar threat returns to finish what was previously started, Jake must\nwork with Neytiri and the army of the Na'vi race to protect their home.\n", "rating": 7.6, "audienceRating": 9.2, "year": 2022, "tagline": "Return to Pandora.", "thumb": "/library/metadata/58683/thumb/1703239236", "art": "/library/metadata/58683/art/1703239236", "theme": "/library/metadata/1/theme/1705636920", "index": 1, "leafCount": 14, "viewedLeafCount": 0, "childCount": 1, "seasonCount": 2022, "duration": 11558112, "originallyAvailableAt": "2022-12-14", "addedAt": 1556281940, "updatedAt": 1556281940, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/58684", "originalTitle": "映画 ブラッククローバー 魔法帝の剣", "parentRatingKey": "66", "grandparentRatingKey": "66", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentSlug": "alice-in-borderland-2020", "grandparentKey": "/library/metadata/66", "parentKey": "/library/metadata/66", "grandparentTitle": "Caprica", "grandparentThumb": "/library/metadata/66/thumb/1705716261", "grandparentTheme": "/library/metadata/66/theme/1705716261", "grandparentArt": "/library/metadata/66/art/1705716261", "parentTitle": "Caprica", "parentIndex": 1, "parentThumb": "/library/metadata/66/thumb/1705716261", "ratingImage": "rottentomatoes://image.rating.ripe", "viewCount": 1, "viewOffset": 5222500, "skipCount": 1, "subtype": "clip", "lastRatedAt": 1721813113, "createdAtAccuracy": "epoch,local", "createdAtTZOffset": "0", "lastViewedAt": 1682752242, "userRating": 10, "Image": [{"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}, {"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}], "UltraBlurColors": {"topLeft": "11333b", "topRight": "0a232d", "bottomRight": "73958", "bottomLeft": "1f5066"}, "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionKey": "/library/sections/1", "Media": [{"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "displayOffset": 50, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "audioProfile": "dts", "has64bitOffsets": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "packetLength": 188, "container": "mkv", "videoProfile": "main 10", "audioProfile": "dts", "has64bitOffsets": false, "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}, {"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "packetLength": 188, "container": "mkv", "videoProfile": "main 10", "audioProfile": "dts", "has64bitOffsets": false, "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}, {"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "packetLength": 188, "container": "mkv", "videoProfile": "main 10", "audioProfile": "dts", "has64bitOffsets": false, "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}], "Genre": [{"id": 259, "tag": "Crime", "filter": "genre=19"}], "Country": [{"id": 259, "tag": "United States of America", "filter": "country=19"}], "Director": [{"id": 126522, "tag": "Danny Boyle", "filter": "director=235876", "tagKey": "5d776831151a60001f24d031", "thumb": "https://metadata-static.plex.tv/8/people/8d65fa96804802e08f2de09fe014408e.jpg"}, {"id": 126522, "tag": "Danny Boyle", "filter": "director=235876", "tagKey": "5d776831151a60001f24d031", "thumb": "https://metadata-static.plex.tv/8/people/8d65fa96804802e08f2de09fe014408e.jpg"}, {"id": 126522, "tag": "Danny Boyle", "filter": "director=235876", "tagKey": "5d776831151a60001f24d031", "thumb": "https://metadata-static.plex.tv/8/people/8d65fa96804802e08f2de09fe014408e.jpg"}], "Writer": [{"id": 126522, "tag": "Jamie P. Hanson", "filter": "writer=126522", "thumb": "https://metadata-static.plex.tv/8/people/8d65fa96804802e08f2de09fe014408e.jpg", "tagKey": "5d77683d85719b001f3a535e"}, {"id": 126522, "tag": "Jamie P. Hanson", "filter": "writer=126522", "thumb": "https://metadata-static.plex.tv/8/people/8d65fa96804802e08f2de09fe014408e.jpg", "tagKey": "5d77683d85719b001f3a535e"}, {"id": 126522, "tag": "Jamie P. Hanson", "filter": "writer=126522", "thumb": "https://metadata-static.plex.tv/8/people/8d65fa96804802e08f2de09fe014408e.jpg", "tagKey": "5d77683d85719b001f3a535e"}], "Producer": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Role": [{"id": 126522, "tag": "Teller", "role": "Self - Judge", "filter": "actor=126522", "tagKey": "5d77683d85719b001f3a535e", "thumb": "https://metadata-static.plex.tv/7/people/708568fd018d7aa8b1032dcf867747e8.jpg"}, {"id": 126522, "tag": "Teller", "role": "Self - Judge", "filter": "actor=126522", "tagKey": "5d77683d85719b001f3a535e", "thumb": "https://metadata-static.plex.tv/7/people/708568fd018d7aa8b1032dcf867747e8.jpg"}, {"id": 126522, "tag": "Teller", "role": "Self - Judge", "filter": "actor=126522", "tagKey": "5d77683d85719b001f3a535e", "thumb": "https://metadata-static.plex.tv/7/people/708568fd018d7aa8b1032dcf867747e8.jpg"}], "Guid": [{"id": "imdb://tt3032476"}, {"id": "imdb://tt3032476"}], "Rating": [{"image": "imdb://image.rating", "value": 9, "type": "audience"}], "Similar": [{"id": 26, "filter": "similar=26", "tag": "Breaking Bad"}, {"id": 26, "filter": "similar=26", "tag": "Breaking Bad"}], "Location": [{"path": "/TV Shows/Better Call Saul"}, {"path": "/TV Shows/Better Call Saul"}], "Chapter": [{"id": 4, "filter": "thumb=4", "index": 1, "startTimeOffset": 0, "endTimeOffset": 100100, "thumb": "/library/media/46883/chapterImages/1"}, {"id": 4, "filter": "thumb=4", "index": 1, "startTimeOffset": 0, "endTimeOffset": 100100, "thumb": "/library/media/46883/chapterImages/1"}, {"id": 4, "filter": "thumb=4", "index": 1, "startTimeOffset": 0, "endTimeOffset": 100100, "thumb": "/library/media/46883/chapterImages/1"}], "Marker": [{"id": 306970, "type": "credits", "startTimeOffset": 4176050, "endTimeOffset": 4393389, "final": true, "Attributes": {"id": 306970, "version": 4}}], "Extras": {"size": 1}}]}} + application/json: {"MediaContainer": {"size": 50, "allowSync": false, "identifier": "com.plexapp.plugins.library", "librarySectionID": 2, "librarySectionTitle": "TV Series", "librarySectionUUID": "e69655a2-ef48-4aba-bb19-0cc34d1e7d36", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1734362201, "Metadata": [{"ratingKey": "58683", "key": "/library/metadata/58683", "guid": "plex://movie/5d7768ba96b655001fdc0408", "slug": "4-for-texas", "studio": "20th Century Studios", "type": "movie", "title": "Avatar: The Way of Water", "titleSort": "Whale", "contentRating": "PG-13", "summary": "Jake Sully lives with his newfound family formed on the extrasolar moon Pandora.\nOnce a familiar threat returns to finish what was previously started, Jake must\nwork with Neytiri and the army of the Na'vi race to protect their home.\n", "rating": 7.6, "audienceRating": 9.2, "year": 2022, "tagline": "Return to Pandora.", "thumb": "/library/metadata/58683/thumb/1703239236", "art": "/library/metadata/58683/art/1703239236", "theme": "/library/metadata/1/theme/1705636920", "index": 1, "leafCount": 14, "viewedLeafCount": 0, "childCount": 1, "seasonCount": 2022, "duration": 11558112, "originallyAvailableAt": "2022-12-14", "addedAt": 1556281940, "updatedAt": 1556281940, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/58684", "originalTitle": "映画 ブラッククローバー 魔法帝の剣", "parentRatingKey": "66", "grandparentRatingKey": "66", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentSlug": "alice-in-borderland-2020", "grandparentKey": "/library/metadata/66", "parentKey": "/library/metadata/66", "grandparentTitle": "Caprica", "grandparentThumb": "/library/metadata/66/thumb/1705716261", "grandparentTheme": "/library/metadata/66/theme/1705716261", "grandparentArt": "/library/metadata/66/art/1705716261", "parentTitle": "Caprica", "parentIndex": 1, "parentThumb": "/library/metadata/66/thumb/1705716261", "ratingImage": "rottentomatoes://image.rating.ripe", "viewCount": 1, "viewOffset": 5222500, "skipCount": 1, "subtype": "clip", "lastRatedAt": 1721813113, "createdAtAccuracy": "epoch,local", "createdAtTZOffset": "0", "lastViewedAt": 1682752242, "userRating": 10, "Image": [{"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}], "UltraBlurColors": {"topLeft": "11333b", "topRight": "0a232d", "bottomRight": "73958", "bottomLeft": "1f5066"}, "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionKey": "/library/sections/1", "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "displayOffset": 50, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "audioProfile": "dts", "has64bitOffsets": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "packetLength": 188, "container": "mkv", "videoProfile": "main 10", "audioProfile": "dts", "has64bitOffsets": false, "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "format": "srt", "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "closedCaptions": true, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "key": "/library/streams/216389", "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "embeddedInVideo": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}], "Genre": [{"id": 259, "tag": "Crime", "filter": "genre=19"}], "Country": [{"id": 259, "tag": "United States of America", "filter": "country=19"}], "Director": [{"id": 126522, "tag": "Danny Boyle", "filter": "director=235876", "tagKey": "5d776831151a60001f24d031", "thumb": "https://metadata-static.plex.tv/8/people/8d65fa96804802e08f2de09fe014408e.jpg"}], "Writer": [{"id": 126522, "tag": "Jamie P. Hanson", "filter": "writer=126522", "thumb": "https://metadata-static.plex.tv/8/people/8d65fa96804802e08f2de09fe014408e.jpg", "tagKey": "5d77683d85719b001f3a535e"}], "Producer": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Role": [{"id": 126522, "tag": "Teller", "role": "Self - Judge", "filter": "actor=126522", "tagKey": "5d77683d85719b001f3a535e", "thumb": "https://metadata-static.plex.tv/7/people/708568fd018d7aa8b1032dcf867747e8.jpg"}], "Rating": [{"image": "imdb://image.rating", "value": 9, "type": "audience"}], "Similar": [{"id": 26, "filter": "similar=26", "tag": "Breaking Bad"}], "Location": [{"path": "/TV Shows/Better Call Saul"}], "Chapter": [{"id": 4, "filter": "thumb=4", "index": 1, "startTimeOffset": 0, "endTimeOffset": 100100, "thumb": "/library/media/46883/chapterImages/1"}], "Marker": [{"id": 306970, "type": "credits", "startTimeOffset": 4176050, "endTimeOffset": 4393389, "final": true, "Attributes": {"id": 306970, "version": 4}}], "Extras": {"size": 1}}]}} "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} get-media-arts: speakeasy-default-get-media-arts: parameters: @@ -2562,7 +2564,7 @@ examples: ratingKey: 16099 responses: "200": - application/json: {"MediaContainer": {"size": 50, "mediaTagVersion": 1734362201, "mediaTagPrefix": "/system/bundle/media/flags/", "identifier": "com.plexapp.plugins.library", "Metadata": [{"key": "https://image.tmdb.org/t/p/original/ixgFmf1X59PUZam2qbAfskx2gQr.jpg", "provider": "tmdb", "ratingKey": "https://image.tmdb.org/t/p/original/ixgFmf1X59PUZam2qbAfskx2gQr.jpg", "selected": true, "thumb": "https://images.plex.tv/photo?height=270&width=480&minSize=1&upscale=1&url=https%3A%2F%2Fimage%2Etmdb%2Eorg%2Ft%2Fp%2Foriginal%2FixgFmf1X59PUZam2qbAfskx2gQr%2Ejpg"}, {"key": "https://image.tmdb.org/t/p/original/ixgFmf1X59PUZam2qbAfskx2gQr.jpg", "provider": "tmdb", "ratingKey": "https://image.tmdb.org/t/p/original/ixgFmf1X59PUZam2qbAfskx2gQr.jpg", "selected": true, "thumb": "https://images.plex.tv/photo?height=270&width=480&minSize=1&upscale=1&url=https%3A%2F%2Fimage%2Etmdb%2Eorg%2Ft%2Fp%2Foriginal%2FixgFmf1X59PUZam2qbAfskx2gQr%2Ejpg"}, {"key": "https://image.tmdb.org/t/p/original/ixgFmf1X59PUZam2qbAfskx2gQr.jpg", "provider": "tmdb", "ratingKey": "https://image.tmdb.org/t/p/original/ixgFmf1X59PUZam2qbAfskx2gQr.jpg", "selected": true, "thumb": "https://images.plex.tv/photo?height=270&width=480&minSize=1&upscale=1&url=https%3A%2F%2Fimage%2Etmdb%2Eorg%2Ft%2Fp%2Foriginal%2FixgFmf1X59PUZam2qbAfskx2gQr%2Ejpg"}]}} + application/json: {"MediaContainer": {"size": 50, "mediaTagVersion": 1734362201, "mediaTagPrefix": "/system/bundle/media/flags/", "identifier": "com.plexapp.plugins.library", "Metadata": [{"key": "https://image.tmdb.org/t/p/original/ixgFmf1X59PUZam2qbAfskx2gQr.jpg", "provider": "tmdb", "ratingKey": "https://image.tmdb.org/t/p/original/ixgFmf1X59PUZam2qbAfskx2gQr.jpg", "selected": true, "thumb": "https://images.plex.tv/photo?height=270&width=480&minSize=1&upscale=1&url=https%3A%2F%2Fimage%2Etmdb%2Eorg%2Ft%2Fp%2Foriginal%2FixgFmf1X59PUZam2qbAfskx2gQr%2Ejpg"}]}} post-media-arts: speakeasy-default-post-media-arts: parameters: @@ -2577,7 +2579,7 @@ examples: ratingKey: 16099 responses: "200": - application/json: {"MediaContainer": {"size": 50, "mediaTagVersion": 1734362201, "mediaTagPrefix": "/system/bundle/media/flags/", "identifier": "com.plexapp.plugins.library", "Metadata": [{"key": "https://image.tmdb.org/t/p/original/hntBJjqbv4m0Iyniqaztv9xaudI.jpg", "provider": "tmdb", "ratingKey": "https://image.tmdb.org/t/p/original/hntBJjqbv4m0Iyniqaztv9xaudI.jpg", "selected": true, "thumb": "https://images.plex.tv/photo?height=336&width=225&minSize=1&upscale=1&url=https%3A%2F%2Fimage%2Etmdb%2Eorg%2Ft%2Fp%2Foriginal%2FhntBJjqbv4m0Iyniqaztv9xaudI%2Ejpg"}, {"key": "https://image.tmdb.org/t/p/original/hntBJjqbv4m0Iyniqaztv9xaudI.jpg", "provider": "tmdb", "ratingKey": "https://image.tmdb.org/t/p/original/hntBJjqbv4m0Iyniqaztv9xaudI.jpg", "selected": true, "thumb": "https://images.plex.tv/photo?height=336&width=225&minSize=1&upscale=1&url=https%3A%2F%2Fimage%2Etmdb%2Eorg%2Ft%2Fp%2Foriginal%2FhntBJjqbv4m0Iyniqaztv9xaudI%2Ejpg"}]}} + application/json: {"MediaContainer": {"size": 50, "mediaTagVersion": 1734362201, "mediaTagPrefix": "/system/bundle/media/flags/", "identifier": "com.plexapp.plugins.library", "Metadata": []}} post-media-poster: speakeasy-default-post-media-poster: parameters: @@ -2589,20 +2591,20 @@ examples: include-stream: parameters: path: - ratingKey: 1539.14 + ratingKey: 2403.67 query: includeElements: "Stream" responses: "200": - application/json: {"MediaContainer": {"size": 3, "allowSync": true, "art": "/library/metadata/30072/art/1705739923", "identifier": "com.plexapp.plugins.library", "key": "30072", "librarySectionID": 2, "librarySectionTitle": "TV Shows", "librarySectionUUID": "4bb2521c-8ba9-459b-aaee-8ab8bc35eabd", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1701731894, "nocache": true, "parentIndex": 1, "parentTitle": "Reacher", "parentYear": 2022, "summary": "When retired Military Police Officer Jack Reacher is arrested for a murder he did not commit, he finds himself in the middle of a deadly conspiracy full of dirty cops, shady businessmen, and scheming politicians. With nothing but his wits, he must figure out what is happening in Margrave, Georgia.", "theme": "/library/metadata/30072/theme/1705739923", "thumb": "/library/metadata/30072/thumb/1705739923", "title1": "TV Shows", "title2": "Reacher", "viewGroup": "season", "viewMode": 65593, "Directory": [{"leafCount": 16, "thumb": "/library/metadata/30072/thumb/1705739923", "viewedLeafCount": 16, "key": "/library/metadata/30072/allLeaves", "title": "All episodes"}], "Metadata": [{"ratingKey": "66488", "key": "/library/metadata/66488/children", "parentRatingKey": "30072", "guid": "plex://season/652aea6549508477c34c6000", "parentGuid": "plex://show/5d9c09190aaccd001f8f42f0", "parentStudio": "Amazon Studios", "type": "season", "title": "Season 2", "parentKey": "/library/metadata/30072", "parentTitle": "Reacher", "summary": "Based on\"Bad Luck and Trouble,\" when members of Reacher's old military unit start turning up dead, Reacher has just one thing on his mind-revenge.", "index": 2, "parentIndex": 1, "viewCount": 11, "lastViewedAt": 1705646565, "parentYear": 2022, "thumb": "/library/metadata/66488/thumb/1703065033", "art": "/library/metadata/30072/art/1705739923", "parentThumb": "/library/metadata/30072/thumb/1705739923", "parentTheme": "/library/metadata/30072/theme/1705739923", "leafCount": 8, "viewedLeafCount": 8, "addedAt": 1702602021, "updatedAt": 1703065033, "userRating": 9, "skipCount": 1, "lastRatedAt": 1703881224}, {"ratingKey": "66488", "key": "/library/metadata/66488/children", "parentRatingKey": "30072", "guid": "plex://season/652aea6549508477c34c6000", "parentGuid": "plex://show/5d9c09190aaccd001f8f42f0", "parentStudio": "Amazon Studios", "type": "season", "title": "Season 2", "parentKey": "/library/metadata/30072", "parentTitle": "Reacher", "summary": "Based on\"Bad Luck and Trouble,\" when members of Reacher's old military unit start turning up dead, Reacher has just one thing on his mind-revenge.", "index": 2, "parentIndex": 1, "viewCount": 11, "lastViewedAt": 1705646565, "parentYear": 2022, "thumb": "/library/metadata/66488/thumb/1703065033", "art": "/library/metadata/30072/art/1705739923", "parentThumb": "/library/metadata/30072/thumb/1705739923", "parentTheme": "/library/metadata/30072/theme/1705739923", "leafCount": 8, "viewedLeafCount": 8, "addedAt": 1702602021, "updatedAt": 1703065033, "userRating": 9, "skipCount": 1, "lastRatedAt": 1703881224}]}} + application/json: {"MediaContainer": {"size": 3, "allowSync": true, "art": "/library/metadata/30072/art/1705739923", "identifier": "com.plexapp.plugins.library", "key": "30072", "librarySectionID": 2, "librarySectionTitle": "TV Shows", "librarySectionUUID": "4bb2521c-8ba9-459b-aaee-8ab8bc35eabd", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1701731894, "nocache": true, "parentIndex": 1, "parentTitle": "Reacher", "parentYear": 2022, "summary": "When retired Military Police Officer Jack Reacher is arrested for a murder he did not commit, he finds himself in the middle of a deadly conspiracy full of dirty cops, shady businessmen, and scheming politicians. With nothing but his wits, he must figure out what is happening in Margrave, Georgia.", "theme": "/library/metadata/30072/theme/1705739923", "thumb": "/library/metadata/30072/thumb/1705739923", "title1": "TV Shows", "title2": "Reacher", "viewGroup": "season", "viewMode": 65593, "Directory": [{"leafCount": 16, "thumb": "/library/metadata/30072/thumb/1705739923", "viewedLeafCount": 16, "key": "/library/metadata/30072/allLeaves", "title": "All episodes"}], "Metadata": [{"ratingKey": "66488", "key": "/library/metadata/66488/children", "parentRatingKey": "30072", "guid": "plex://season/652aea6549508477c34c6000", "parentGuid": "plex://show/5d9c09190aaccd001f8f42f0", "parentStudio": "Amazon Studios", "type": "season", "title": "Season 2", "parentKey": "/library/metadata/30072", "parentTitle": "Reacher", "summary": "Based on\"Bad Luck and Trouble,\" when members of Reacher's old military unit start turning up dead, Reacher has just one thing on his mind-revenge.", "index": 2, "parentIndex": 1, "viewCount": 11, "lastViewedAt": 1705646565, "parentYear": 2022, "thumb": "/library/metadata/66488/thumb/1703065033", "art": "/library/metadata/30072/art/1705739923", "parentThumb": "/library/metadata/30072/thumb/1705739923", "parentTheme": "/library/metadata/30072/theme/1705739923", "leafCount": 8, "viewedLeafCount": 8, "addedAt": 1702602021, "updatedAt": 1703065033, "userRating": 9, "skipCount": 1, "lastRatedAt": 1703881224}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} include-stream-otheritem: parameters: path: - ratingKey: 2900.64 + ratingKey: 5846.06 query: includeElements: "Stream,OtherItem" responses: @@ -2615,34 +2617,34 @@ examples: include-stream-otheritem-anotheritem: parameters: path: - ratingKey: 8466.85 + ratingKey: 8273.28 query: includeElements: "Stream,OtherItem,AnotherItem" responses: "200": - application/json: {"MediaContainer": {"size": 3, "allowSync": true, "art": "/library/metadata/30072/art/1705739923", "identifier": "com.plexapp.plugins.library", "key": "30072", "librarySectionID": 2, "librarySectionTitle": "TV Shows", "librarySectionUUID": "4bb2521c-8ba9-459b-aaee-8ab8bc35eabd", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1701731894, "nocache": true, "parentIndex": 1, "parentTitle": "Reacher", "parentYear": 2022, "summary": "When retired Military Police Officer Jack Reacher is arrested for a murder he did not commit, he finds himself in the middle of a deadly conspiracy full of dirty cops, shady businessmen, and scheming politicians. With nothing but his wits, he must figure out what is happening in Margrave, Georgia.", "theme": "/library/metadata/30072/theme/1705739923", "thumb": "/library/metadata/30072/thumb/1705739923", "title1": "TV Shows", "title2": "Reacher", "viewGroup": "season", "viewMode": 65593, "Directory": [{"leafCount": 16, "thumb": "/library/metadata/30072/thumb/1705739923", "viewedLeafCount": 16, "key": "/library/metadata/30072/allLeaves", "title": "All episodes"}], "Metadata": [{"ratingKey": "66488", "key": "/library/metadata/66488/children", "parentRatingKey": "30072", "guid": "plex://season/652aea6549508477c34c6000", "parentGuid": "plex://show/5d9c09190aaccd001f8f42f0", "parentStudio": "Amazon Studios", "type": "season", "title": "Season 2", "parentKey": "/library/metadata/30072", "parentTitle": "Reacher", "summary": "Based on\"Bad Luck and Trouble,\" when members of Reacher's old military unit start turning up dead, Reacher has just one thing on his mind-revenge.", "index": 2, "parentIndex": 1, "viewCount": 11, "lastViewedAt": 1705646565, "parentYear": 2022, "thumb": "/library/metadata/66488/thumb/1703065033", "art": "/library/metadata/30072/art/1705739923", "parentThumb": "/library/metadata/30072/thumb/1705739923", "parentTheme": "/library/metadata/30072/theme/1705739923", "leafCount": 8, "viewedLeafCount": 8, "addedAt": 1702602021, "updatedAt": 1703065033, "userRating": 9, "skipCount": 1, "lastRatedAt": 1703881224}, {"ratingKey": "66488", "key": "/library/metadata/66488/children", "parentRatingKey": "30072", "guid": "plex://season/652aea6549508477c34c6000", "parentGuid": "plex://show/5d9c09190aaccd001f8f42f0", "parentStudio": "Amazon Studios", "type": "season", "title": "Season 2", "parentKey": "/library/metadata/30072", "parentTitle": "Reacher", "summary": "Based on\"Bad Luck and Trouble,\" when members of Reacher's old military unit start turning up dead, Reacher has just one thing on his mind-revenge.", "index": 2, "parentIndex": 1, "viewCount": 11, "lastViewedAt": 1705646565, "parentYear": 2022, "thumb": "/library/metadata/66488/thumb/1703065033", "art": "/library/metadata/30072/art/1705739923", "parentThumb": "/library/metadata/30072/thumb/1705739923", "parentTheme": "/library/metadata/30072/theme/1705739923", "leafCount": 8, "viewedLeafCount": 8, "addedAt": 1702602021, "updatedAt": 1703065033, "userRating": 9, "skipCount": 1, "lastRatedAt": 1703881224}]}} + application/json: {"MediaContainer": {"size": 3, "allowSync": true, "art": "/library/metadata/30072/art/1705739923", "identifier": "com.plexapp.plugins.library", "key": "30072", "librarySectionID": 2, "librarySectionTitle": "TV Shows", "librarySectionUUID": "4bb2521c-8ba9-459b-aaee-8ab8bc35eabd", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1701731894, "nocache": true, "parentIndex": 1, "parentTitle": "Reacher", "parentYear": 2022, "summary": "When retired Military Police Officer Jack Reacher is arrested for a murder he did not commit, he finds himself in the middle of a deadly conspiracy full of dirty cops, shady businessmen, and scheming politicians. With nothing but his wits, he must figure out what is happening in Margrave, Georgia.", "theme": "/library/metadata/30072/theme/1705739923", "thumb": "/library/metadata/30072/thumb/1705739923", "title1": "TV Shows", "title2": "Reacher", "viewGroup": "season", "viewMode": 65593, "Directory": [{"leafCount": 16, "thumb": "/library/metadata/30072/thumb/1705739923", "viewedLeafCount": 16, "key": "/library/metadata/30072/allLeaves", "title": "All episodes"}], "Metadata": [{"ratingKey": "66488", "key": "/library/metadata/66488/children", "parentRatingKey": "30072", "guid": "plex://season/652aea6549508477c34c6000", "parentGuid": "plex://show/5d9c09190aaccd001f8f42f0", "parentStudio": "Amazon Studios", "type": "season", "title": "Season 2", "parentKey": "/library/metadata/30072", "parentTitle": "Reacher", "summary": "Based on\"Bad Luck and Trouble,\" when members of Reacher's old military unit start turning up dead, Reacher has just one thing on his mind-revenge.", "index": 2, "parentIndex": 1, "viewCount": 11, "lastViewedAt": 1705646565, "parentYear": 2022, "thumb": "/library/metadata/66488/thumb/1703065033", "art": "/library/metadata/30072/art/1705739923", "parentThumb": "/library/metadata/30072/thumb/1705739923", "parentTheme": "/library/metadata/30072/theme/1705739923", "leafCount": 8, "viewedLeafCount": 8, "addedAt": 1702602021, "updatedAt": 1703065033, "userRating": 9, "skipCount": 1, "lastRatedAt": 1703881224}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} getTopWatchedContent: - "": + speakeasy-default-get-top-watched-content: parameters: query: - includeGuids: 1 type: 2 + includeGuids: 1 responses: "200": - application/json: {"MediaContainer": {"size": 1, "allowSync": true, "identifier": "com.plexapp.plugins.library", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1698860922, "Metadata": [{"ratingKey": "17", "key": "/library/metadata/17", "guid": "plex://movie/5d77683f6f4521001ea9dc53", "slug": "waterloo-road", "studio": "Universal Pictures", "type": "movie", "title": "Serenity", "librarySectionTitle": "Movies", "librarySectionID": 1, "librarySectionKey": "/library/sections/1", "contentRating": "PG-13", "summary": "Serenity continues the story of the TV series it was based upon (\"Firefly\"). River Tam had a secret - one in which she's not even aware - so dangerous, no one's safe, as an Alliance operative's sent to capture her, and all others are considered irrelevant to his job.", "index": 1, "audienceRating": 9.1, "year": 2005, "tagline": "They aim to misbehave.", "thumb": "/library/metadata/17/thumb/1705637165", "art": "/library/metadata/17/art/1705637165", "duration": 141417, "originallyAvailableAt": "2005-09-29T00:00:00Z", "leafCount": 222, "viewedLeafCount": 100, "childCount": 13, "addedAt": 1705637164, "updatedAt": 1705637165, "globalViewCount": 80, "audienceRatingImage": "rottentomatoes://image.rating.upright", "Genre": [{"id": 184, "filter": "genre=184", "tag": "Thriller"}], "Country": [{"id": 116, "filter": "country=116", "tag": "United States of America"}, {"id": 116, "filter": "country=116", "tag": "United States of America"}], "Guid": [{"id": "tvdb://2337"}], "Role": [{"id": 220, "filter": "actor=220", "tag": "Dennis Keiffer", "tagKey": "5d77683554f42c001f8c4708", "role": "Bar Guy (uncredited)", "thumb": "https://metadata-static.plex.tv/6/people/648e9a7ea1d537bccfcd7615134b78ce.jpg"}, {"id": 220, "filter": "actor=220", "tag": "Dennis Keiffer", "tagKey": "5d77683554f42c001f8c4708", "role": "Bar Guy (uncredited)", "thumb": "https://metadata-static.plex.tv/6/people/648e9a7ea1d537bccfcd7615134b78ce.jpg"}], "User": [{"id": 220}, {"id": 220}, {"id": 220}]}, {"ratingKey": "17", "key": "/library/metadata/17", "guid": "plex://movie/5d77683f6f4521001ea9dc53", "slug": "waterloo-road", "studio": "Universal Pictures", "type": "movie", "title": "Serenity", "librarySectionTitle": "Movies", "librarySectionID": 1, "librarySectionKey": "/library/sections/1", "contentRating": "PG-13", "summary": "Serenity continues the story of the TV series it was based upon (\"Firefly\"). River Tam had a secret - one in which she's not even aware - so dangerous, no one's safe, as an Alliance operative's sent to capture her, and all others are considered irrelevant to his job.", "index": 1, "audienceRating": 9.1, "year": 2005, "tagline": "They aim to misbehave.", "thumb": "/library/metadata/17/thumb/1705637165", "art": "/library/metadata/17/art/1705637165", "duration": 141417, "originallyAvailableAt": "2005-09-29T00:00:00Z", "leafCount": 222, "viewedLeafCount": 100, "childCount": 13, "addedAt": 1705637164, "updatedAt": 1705637165, "globalViewCount": 80, "audienceRatingImage": "rottentomatoes://image.rating.upright", "Genre": [{"id": 184, "filter": "genre=184", "tag": "Thriller"}], "Country": [{"id": 116, "filter": "country=116", "tag": "United States of America"}, {"id": 116, "filter": "country=116", "tag": "United States of America"}], "Guid": [{"id": "tvdb://2337"}, {"id": "tvdb://2337"}], "Role": [{"id": 220, "filter": "actor=220", "tag": "Dennis Keiffer", "tagKey": "5d77683554f42c001f8c4708", "role": "Bar Guy (uncredited)", "thumb": "https://metadata-static.plex.tv/6/people/648e9a7ea1d537bccfcd7615134b78ce.jpg"}], "User": [{"id": 220}, {"id": 220}]}]}} + application/json: {"MediaContainer": {"size": 50, "allowSync": false, "identifier": "com.plexapp.plugins.library", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1734362201, "Metadata": [{"ratingKey": "17", "key": "/library/metadata/17", "guid": "plex://movie/5d77683f6f4521001ea9dc53", "slug": "waterloo-road", "studio": "Universal Pictures", "type": "movie", "title": "Serenity", "librarySectionTitle": "Movies", "librarySectionID": 1, "librarySectionKey": "/library/sections/1", "contentRating": "PG-13", "summary": "Serenity continues the story of the TV series it was based upon (\"Firefly\"). River Tam had a secret - one in which she's not even aware - so dangerous, no one's safe, as an Alliance operative's sent to capture her, and all others are considered irrelevant to his job.", "index": 1, "audienceRating": 9.1, "year": 2005, "tagline": "They aim to misbehave.", "thumb": "/library/metadata/17/thumb/1705637165", "art": "/library/metadata/17/art/1705637165", "duration": 141417, "originallyAvailableAt": "2005-09-29T00:00:00Z", "leafCount": 222, "viewedLeafCount": 100, "childCount": 13, "addedAt": 1705637164, "updatedAt": 1705637165, "globalViewCount": 80, "audienceRatingImage": "rottentomatoes://image.rating.upright", "Genre": [{"id": 184, "filter": "genre=184", "tag": "Thriller"}], "Country": [{"id": 116, "filter": "country=116", "tag": "United States of America"}], "Guid": [{"id": "tvdb://2337"}], "Role": [{"id": 220, "filter": "actor=220", "tag": "Dennis Keiffer", "tagKey": "5d77683554f42c001f8c4708", "role": "Bar Guy (uncredited)", "thumb": "https://metadata-static.plex.tv/6/people/648e9a7ea1d537bccfcd7615134b78ce.jpg"}], "User": [{"id": 220}]}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} get-watch-list: speakeasy-default-get-watch-list: parameters: path: - filter: "available" + filter: "released" query: X-Plex-Container-Start: 0 X-Plex-Container-Size: 50 @@ -2652,7 +2654,7 @@ examples: "200": application/json: {} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} logLine: @@ -2664,7 +2666,7 @@ examples: source: "Postman" responses: "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} logMultiLine: @@ -2673,124 +2675,123 @@ examples: text/plain: "level=4&message=Test%20message%201&source=postman\nlevel=3&message=Test%20message%202&source=postman\nlevel=1&message=Test%20message%203&source=postman" responses: "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} enablePaperTrail: speakeasy-default-enable-paper-trail: responses: "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} createPlaylist: speakeasy-default-create-playlist: parameters: query: title: "" - type: "photo" + type: "audio" smart: 1 - uri: "https://hoarse-testing.info/" + uri: "https://short-term-disconnection.name/" responses: "200": - application/json: {"MediaContainer": {"size": 7, "Metadata": [{"ratingKey": "96", "key": "/playlists/96/items", "guid": "com.plexapp.agents.none://a2f92937-1408-40e2-b022-63a8a9377e55", "type": "playlist", "title": "A Great Playlist", "summary": "What a great playlist", "smart": false, "playlistType": "video", "icon": "playlist://image.smart", "viewCount": 1, "lastViewedAt": 1705719589, "leafCount": 1, "addedAt": 1705719589, "updatedAt": 1705724593, "composite": "/playlists/96/composite/1705724593", "duration": 141000}, {"ratingKey": "96", "key": "/playlists/96/items", "guid": "com.plexapp.agents.none://a2f92937-1408-40e2-b022-63a8a9377e55", "type": "playlist", "title": "A Great Playlist", "summary": "What a great playlist", "smart": false, "playlistType": "video", "icon": "playlist://image.smart", "viewCount": 1, "lastViewedAt": 1705719589, "leafCount": 1, "addedAt": 1705719589, "updatedAt": 1705724593, "composite": "/playlists/96/composite/1705724593", "duration": 141000}]}} + application/json: {"MediaContainer": {"size": 7, "Metadata": [{"ratingKey": "96", "key": "/playlists/96/items", "guid": "com.plexapp.agents.none://a2f92937-1408-40e2-b022-63a8a9377e55", "type": "playlist", "title": "A Great Playlist", "summary": "What a great playlist", "smart": false, "playlistType": "video", "icon": "playlist://image.smart", "viewCount": 1, "lastViewedAt": 1705719589, "leafCount": 1, "addedAt": 1705719589, "updatedAt": 1705724593, "composite": "/playlists/96/composite/1705724593", "duration": 141000}]}} "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} getPlaylists: speakeasy-default-get-playlists: responses: "200": application/json: {"MediaContainer": {"size": 4, "Metadata": [{"ratingKey": "92", "key": "/playlists/92/items", "guid": "com.plexapp.agents.none://7ca5aaef-58e8-4828-9e21-c009c97f2903", "type": "playlist", "title": "Static Playlist", "summary": "A Great Playlist", "smart": false, "playlistType": "video", "composite": "/playlists/92/composite/1705716440", "icon": "playlist://image.smart", "viewCount": 1, "lastViewedAt": 1705716298, "duration": 7328000, "leafCount": 32, "addedAt": 1705716298, "updatedAt": 1705716440}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} getPlaylist: speakeasy-default-get-playlist: parameters: path: - playlistID: 4109.48 + playlistID: 8419.53 responses: "200": - application/json: {"MediaContainer": {"size": 1, "Metadata": [{"content": "library://x/directory/%2Flibrary%2Fsections%2F1%2Fall%3Ftype%3D1%26push%3D1%26title%3D2%26or%3D1%26title%3DSerenity%26pop%3D1", "ratingKey": "95", "key": "/playlists/95/items", "guid": "com.plexapp.agents.none://87425529-380f-44b8-a689-9a0537e7ec91", "type": "playlist", "title": "Smart Movie Playlist", "summary": "", "smart": true, "playlistType": "video", "composite": "/playlists/95/composite/1705717387", "icon": "playlist://image.smart", "duration": 282000, "leafCount": 2, "addedAt": 1705716493, "updatedAt": 1705717387}, {"content": "library://x/directory/%2Flibrary%2Fsections%2F1%2Fall%3Ftype%3D1%26push%3D1%26title%3D2%26or%3D1%26title%3DSerenity%26pop%3D1", "ratingKey": "95", "key": "/playlists/95/items", "guid": "com.plexapp.agents.none://87425529-380f-44b8-a689-9a0537e7ec91", "type": "playlist", "title": "Smart Movie Playlist", "summary": "", "smart": true, "playlistType": "video", "composite": "/playlists/95/composite/1705717387", "icon": "playlist://image.smart", "duration": 282000, "leafCount": 2, "addedAt": 1705716493, "updatedAt": 1705717387}, {"content": "library://x/directory/%2Flibrary%2Fsections%2F1%2Fall%3Ftype%3D1%26push%3D1%26title%3D2%26or%3D1%26title%3DSerenity%26pop%3D1", "ratingKey": "95", "key": "/playlists/95/items", "guid": "com.plexapp.agents.none://87425529-380f-44b8-a689-9a0537e7ec91", "type": "playlist", "title": "Smart Movie Playlist", "summary": "", "smart": true, "playlistType": "video", "composite": "/playlists/95/composite/1705717387", "icon": "playlist://image.smart", "duration": 282000, "leafCount": 2, "addedAt": 1705716493, "updatedAt": 1705717387}]}} + application/json: {"MediaContainer": {"size": 1, "Metadata": [{"content": "library://x/directory/%2Flibrary%2Fsections%2F1%2Fall%3Ftype%3D1%26push%3D1%26title%3D2%26or%3D1%26title%3DSerenity%26pop%3D1", "ratingKey": "95", "key": "/playlists/95/items", "guid": "com.plexapp.agents.none://87425529-380f-44b8-a689-9a0537e7ec91", "type": "playlist", "title": "Smart Movie Playlist", "summary": "", "smart": true, "playlistType": "video", "composite": "/playlists/95/composite/1705717387", "icon": "playlist://image.smart", "duration": 282000, "leafCount": 2, "addedAt": 1705716493, "updatedAt": 1705717387}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} deletePlaylist: speakeasy-default-delete-playlist: parameters: path: - playlistID: 216.22 + playlistID: 3432.93 responses: "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} updatePlaylist: speakeasy-default-update-playlist: parameters: path: - playlistID: 3915 - query: {} + playlistID: 1579.66 responses: "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} getPlaylistContents: speakeasy-default-get-playlist-contents: parameters: path: - playlistID: 5004.46 + playlistID: 5535.42 query: type: 2 responses: "200": - application/json: {"MediaContainer": {"size": 2, "composite": "/playlists/95/composite/1705717521", "duration": 282, "leafCount": 2, "playlistType": "video", "ratingKey": "95", "smart": true, "title": "Smart Movie Playlist", "Metadata": [{"ratingKey": "17", "key": "/library/metadata/17", "guid": "plex://movie/5d77683f6f4521001ea9dc53", "studio": "Universal Pictures", "type": "movie", "title": "Serenity", "titleSort": "Amazing Spider-Man 2", "librarySectionTitle": "Movies", "librarySectionID": 1, "librarySectionKey": "/library/sections/1", "contentRating": "PG-13", "summary": "Serenity continues the story of the TV series it was based upon (\"Firefly\"). River Tam had a secret - one in which she's not even aware - so dangerous, no one's safe, as an Alliance operative's sent to capture her, and all others are considered irrelevant to his job.", "rating": 8.2, "audienceRating": 9.1, "year": 2005, "tagline": "They aim to misbehave.", "thumb": "/library/metadata/17/thumb/1705637165", "art": "/library/metadata/17/art/1705637165", "duration": 141416, "originallyAvailableAt": "2005-09-29T00:00:00Z", "addedAt": 1705637164, "updatedAt": 1705637165, "audienceRatingImage": "rottentomatoes://image.rating.upright", "hasPremiumExtras": "1", "hasPremiumPrimaryExtra": "1", "ratingImage": "rottentomatoes://image.rating.ripe", "Media": [{"id": 15, "duration": 141416, "bitrate": 2273, "width": 1920, "height": 814, "aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "videoCodec": "h264", "videoResolution": "1080", "container": "mp4", "videoFrameRate": "24p", "optimizedForStreaming": 0, "audioProfile": "lc", "has64bitOffsets": false, "videoProfile": "high", "Part": [{"id": 15, "key": "/library/parts/15/1705637151/file.mp4", "duration": 141416, "file": "/movies/Serenity (2005)/Serenity (2005).mp4", "size": 40271948, "audioProfile": "lc", "container": "mp4", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "high"}, {"id": 15, "key": "/library/parts/15/1705637151/file.mp4", "duration": 141416, "file": "/movies/Serenity (2005)/Serenity (2005).mp4", "size": 40271948, "audioProfile": "lc", "container": "mp4", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "high"}]}, {"id": 15, "duration": 141416, "bitrate": 2273, "width": 1920, "height": 814, "aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "videoCodec": "h264", "videoResolution": "1080", "container": "mp4", "videoFrameRate": "24p", "optimizedForStreaming": 0, "audioProfile": "lc", "has64bitOffsets": false, "videoProfile": "high", "Part": [{"id": 15, "key": "/library/parts/15/1705637151/file.mp4", "duration": 141416, "file": "/movies/Serenity (2005)/Serenity (2005).mp4", "size": 40271948, "audioProfile": "lc", "container": "mp4", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "high"}]}], "Genre": [{"tag": "Action"}, {"tag": "Action"}], "Country": [{"tag": "United States of America"}, {"tag": "United States of America"}, {"tag": "United States of America"}], "Director": [{"tag": "Joss Whedon"}], "Writer": [{"tag": "Joss Whedon"}, {"tag": "Joss Whedon"}, {"tag": "Joss Whedon"}], "Role": [{"tag": "Gina Torres"}, {"tag": "Gina Torres"}]}]}} + application/json: {"MediaContainer": {"size": 2, "composite": "/playlists/95/composite/1705717521", "duration": 282, "leafCount": 2, "playlistType": "video", "ratingKey": "95", "smart": true, "title": "Smart Movie Playlist", "Metadata": [{"ratingKey": "17", "key": "/library/metadata/17", "guid": "plex://movie/5d77683f6f4521001ea9dc53", "studio": "Universal Pictures", "type": "movie", "title": "Serenity", "titleSort": "Amazing Spider-Man 2", "librarySectionTitle": "Movies", "librarySectionID": 1, "librarySectionKey": "/library/sections/1", "contentRating": "PG-13", "summary": "Serenity continues the story of the TV series it was based upon (\"Firefly\"). River Tam had a secret - one in which she's not even aware - so dangerous, no one's safe, as an Alliance operative's sent to capture her, and all others are considered irrelevant to his job.", "rating": 8.2, "audienceRating": 9.1, "year": 2005, "tagline": "They aim to misbehave.", "thumb": "/library/metadata/17/thumb/1705637165", "art": "/library/metadata/17/art/1705637165", "duration": 141416, "originallyAvailableAt": "2005-09-29T00:00:00Z", "addedAt": 1705637164, "updatedAt": 1705637165, "audienceRatingImage": "rottentomatoes://image.rating.upright", "hasPremiumExtras": "1", "hasPremiumPrimaryExtra": "1", "ratingImage": "rottentomatoes://image.rating.ripe", "Media": [{"id": 15, "duration": 141416, "bitrate": 2273, "width": 1920, "height": 814, "aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "videoCodec": "h264", "videoResolution": "1080", "container": "mp4", "videoFrameRate": "24p", "optimizedForStreaming": 0, "audioProfile": "lc", "has64bitOffsets": false, "videoProfile": "high", "Part": [{"id": 15, "key": "/library/parts/15/1705637151/file.mp4", "duration": 141416, "file": "/movies/Serenity (2005)/Serenity (2005).mp4", "size": 40271948, "audioProfile": "lc", "container": "mp4", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "high"}]}], "Genre": [{"tag": "Action"}], "Country": [{"tag": "United States of America"}], "Director": [{"tag": "Joss Whedon"}], "Writer": [{"tag": "Joss Whedon"}], "Role": [{"tag": "Gina Torres"}]}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} clearPlaylistContents: speakeasy-default-clear-playlist-contents: parameters: path: - playlistID: 1893.18 + playlistID: 4137.37 responses: "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} addPlaylistContents: speakeasy-default-add-playlist-contents: parameters: path: - playlistID: 8502.01 + playlistID: 7013.44 query: uri: "server://12345/com.plexapp.plugins.library/library/metadata/1" playQueueID: 123 responses: "200": - application/json: {"MediaContainer": {"size": 1, "leafCountAdded": 1, "leafCountRequested": 1, "Metadata": [{"ratingKey": "94", "key": "/playlists/94/items", "guid": "com.plexapp.agents.none://972e3047-83d6-4848-a000-261f0af26ba2", "type": "playlist", "title": "A great playlist", "summary": "One of my great playlists", "smart": false, "playlistType": "video", "composite": "/playlists/94/composite/1705800070", "duration": 423000, "leafCount": 3, "addedAt": 1705716458, "updatedAt": 1705800070}, {"ratingKey": "94", "key": "/playlists/94/items", "guid": "com.plexapp.agents.none://972e3047-83d6-4848-a000-261f0af26ba2", "type": "playlist", "title": "A great playlist", "summary": "One of my great playlists", "smart": false, "playlistType": "video", "composite": "/playlists/94/composite/1705800070", "duration": 423000, "leafCount": 3, "addedAt": 1705716458, "updatedAt": 1705800070}]}} + application/json: {"MediaContainer": {"size": 1, "leafCountAdded": 1, "leafCountRequested": 1, "Metadata": [{"ratingKey": "94", "key": "/playlists/94/items", "guid": "com.plexapp.agents.none://972e3047-83d6-4848-a000-261f0af26ba2", "type": "playlist", "title": "A great playlist", "summary": "One of my great playlists", "smart": false, "playlistType": "video", "composite": "/playlists/94/composite/1705800070", "duration": 423000, "leafCount": 3, "addedAt": 1705716458, "updatedAt": 1705800070}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} uploadPlaylist: speakeasy-default-upload-playlist: parameters: query: path: "/home/barkley/playlist.m3u" - force: 0 + force: 1 sectionID: 1 responses: "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} getTransientToken: speakeasy-default-get-transient-token: parameters: @@ -2806,19 +2807,19 @@ examples: speakeasy-default-get-source-connection-information: parameters: query: - source: "provider://provider-identifier" + source: "server://client-identifier" responses: "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} getTokenDetails: speakeasy-default-get-token-details: responses: "200": - application/json: {"adsConsent": false, "adsConsentReminderAt": 1556281940, "adsConsentSetAt": 1556281940, "anonymous": false, "authToken": "CxoUzBTSV5hsxjTpFKaf", "backupCodesCreated": false, "confirmed": false, "country": "US", "email": "username@email.com", "emailOnlyAuth": false, "experimentalFeatures": false, "friendlyName": "friendlyUsername", "entitlements": ["[]"], "guest": false, "hasPassword": true, "home": false, "homeAdmin": false, "homeSize": 1, "id": 13692262, "joinedAt": 1556281940, "locale": "ja", "mailingListActive": false, "mailingListStatus": "active", "maxHomeSize": 15, "profile": {"autoSelectAudio": true, "defaultAudioLanguage": "ja", "defaultSubtitleLanguage": "en", "autoSelectSubtitle": 1, "defaultSubtitleAccessibility": 1, "defaultSubtitleForced": 1, "watchedIndicator": 1, "mediaReviewsVisibility": 1}, "protected": false, "rememberExpiresAt": 1556281940, "restricted": false, "scrobbleTypes": "", "services": [{"identifier": "metadata-dev", "endpoint": "https://epg.provider.plex.tv", "token": "DjoMtqFAGRL1uVtCyF1dKIorTbShJeqv", "secret": "", "status": "online"}], "subscription": {"active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive"}, "subscriptionDescription": "", "subscriptions": [{"active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive"}, {"active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive"}, {"active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive"}], "thumb": "https://plex.tv/users/a4f43c1ebfde43a5/avatar?c=8372075101", "title": "UsernameTitle", "twoFactorEnabled": false, "username": "Username", "uuid": "dae343c1f45beb4f", "attributionPartner": null} + application/json: {"adsConsent": true, "adsConsentReminderAt": 1556281940, "adsConsentSetAt": 1556281940, "anonymous": false, "authToken": "CxoUzBTSV5hsxjTpFKaf", "backupCodesCreated": false, "confirmed": false, "country": "US", "email": "username@email.com", "emailOnlyAuth": false, "experimentalFeatures": false, "friendlyName": "friendlyUsername", "entitlements": ["[]"], "guest": false, "hasPassword": true, "home": false, "homeAdmin": false, "homeSize": 1, "id": 13692262, "joinedAt": 1556281940, "locale": "it", "mailingListActive": false, "mailingListStatus": "active", "maxHomeSize": 15, "profile": {"autoSelectAudio": true, "defaultAudioLanguage": "ja", "defaultSubtitleLanguage": "en", "autoSelectSubtitle": 1, "defaultSubtitleAccessibility": 1, "defaultSubtitleForced": 1, "watchedIndicator": 1, "mediaReviewsVisibility": 1}, "protected": false, "rememberExpiresAt": 1556281940, "restricted": false, "scrobbleTypes": "", "services": [], "subscription": {"active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive"}, "subscriptionDescription": "", "subscriptions": [{"active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive"}], "thumb": "https://plex.tv/users/a4f43c1ebfde43a5/avatar?c=8372075101", "title": "UsernameTitle", "twoFactorEnabled": false, "username": "Username", "uuid": "dae343c1f45beb4f", "attributionPartner": null} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} post-users-sign-in-data: @@ -2834,11 +2835,11 @@ examples: application/x-www-form-urlencoded: {"login": "username@email.com", "password": "password123", "rememberMe": false, "verificationCode": "123456"} responses: "201": - application/json: {"adsConsent": false, "adsConsentReminderAt": 1556281940, "adsConsentSetAt": 1556281940, "anonymous": false, "authToken": "CxoUzBTSV5hsxjTpFKaf", "backupCodesCreated": false, "confirmed": false, "country": "US", "email": "username@email.com", "emailOnlyAuth": false, "experimentalFeatures": false, "friendlyName": "friendlyUsername", "entitlements": ["[]"], "guest": false, "hasPassword": true, "home": false, "homeAdmin": false, "homeSize": 1, "id": 13692262, "joinedAt": 1556281940, "locale": "zh", "mailingListActive": false, "mailingListStatus": "active", "maxHomeSize": 15, "profile": {"autoSelectAudio": true, "defaultAudioLanguage": "ja", "defaultSubtitleLanguage": "en", "autoSelectSubtitle": 0, "defaultSubtitleAccessibility": 0, "defaultSubtitleForced": 0, "watchedIndicator": 0, "mediaReviewsVisibility": 0}, "protected": false, "rememberExpiresAt": 1556281940, "restricted": false, "scrobbleTypes": "", "services": [{"identifier": "metadata-dev", "endpoint": "https://epg.provider.plex.tv", "token": "DjoMtqFAGRL1uVtCyF1dKIorTbShJeqv", "secret": "", "status": "online"}, {"identifier": "metadata-dev", "endpoint": "https://epg.provider.plex.tv", "token": "DjoMtqFAGRL1uVtCyF1dKIorTbShJeqv", "secret": "", "status": "online"}, {"identifier": "metadata-dev", "endpoint": "https://epg.provider.plex.tv", "token": "DjoMtqFAGRL1uVtCyF1dKIorTbShJeqv", "secret": "", "status": "online"}], "subscription": {"active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive"}, "subscriptionDescription": "", "subscriptions": [{"active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive"}], "thumb": "https://plex.tv/users/a4f43c1ebfde43a5/avatar?c=8372075101", "title": "UsernameTitle", "twoFactorEnabled": false, "username": "Username", "uuid": "dae343c1f45beb4f", "attributionPartner": null, "pastSubscriptions": [{"id": "", "mode": "", "renewsAt": 1556281940, "endsAt": 1556281940, "canceled": false, "gracePeriod": false, "onHold": false, "canReactivate": false, "canUpgrade": false, "canDowngrade": false, "canConvert": false, "type": "plexpass", "transfer": "", "state": "ended", "billing": {"internalPaymentMethod": {}, "paymentMethodId": 778268}}, {"id": "", "mode": "", "renewsAt": 1556281940, "endsAt": 1556281940, "canceled": false, "gracePeriod": false, "onHold": false, "canReactivate": false, "canUpgrade": false, "canDowngrade": false, "canConvert": false, "type": "plexpass", "transfer": "", "state": "ended", "billing": {"internalPaymentMethod": {}, "paymentMethodId": 417052}}, {"id": "", "mode": "", "renewsAt": 1556281940, "endsAt": 1556281940, "canceled": false, "gracePeriod": false, "onHold": false, "canReactivate": false, "canUpgrade": false, "canDowngrade": false, "canConvert": false, "type": "plexpass", "transfer": "", "state": "ended", "billing": {"internalPaymentMethod": {}, "paymentMethodId": 860168}}], "trials": [{}, {}]} + application/json: {"adsConsent": null, "adsConsentReminderAt": 1556281940, "adsConsentSetAt": 1556281940, "anonymous": false, "authToken": "CxoUzBTSV5hsxjTpFKaf", "backupCodesCreated": false, "confirmed": false, "country": "US", "email": "username@email.com", "emailOnlyAuth": false, "experimentalFeatures": false, "friendlyName": "friendlyUsername", "entitlements": ["[]"], "guest": false, "hasPassword": true, "home": false, "homeAdmin": false, "homeSize": 1, "id": 13692262, "joinedAt": 1556281940, "locale": "ru", "mailingListActive": false, "mailingListStatus": "active", "maxHomeSize": 15, "profile": {"autoSelectAudio": true, "defaultAudioLanguage": "ja", "defaultSubtitleLanguage": "en", "autoSelectSubtitle": 1, "defaultSubtitleAccessibility": 1, "defaultSubtitleForced": 1, "watchedIndicator": 1, "mediaReviewsVisibility": 1}, "protected": false, "rememberExpiresAt": 1556281940, "restricted": false, "scrobbleTypes": "", "services": [], "subscription": {"active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive"}, "subscriptionDescription": "", "subscriptions": [{"active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive"}], "thumb": "https://plex.tv/users/a4f43c1ebfde43a5/avatar?c=8372075101", "title": "UsernameTitle", "twoFactorEnabled": false, "username": "Username", "uuid": "dae343c1f45beb4f", "attributionPartner": null, "pastSubscriptions": [], "trials": []} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} getStatistics: "": parameters: @@ -2846,9 +2847,9 @@ examples: timespan: 4 responses: "200": - application/json: {"MediaContainer": {"size": 5497, "Device": [{"id": 208, "name": "Roku Express", "platform": "Roku", "clientIdentifier": "793095d235660625108ef785cc7646e9", "createdAt": 1706470556}, {"id": 208, "name": "Roku Express", "platform": "Roku", "clientIdentifier": "793095d235660625108ef785cc7646e9", "createdAt": 1706470556}], "Account": [{"id": 238960586, "key": "/accounts/238960586", "name": "Diane", "defaultAudioLanguage": "en", "autoSelectAudio": true, "defaultSubtitleLanguage": "en", "subtitleMode": 1, "thumb": "https://plex.tv/users/50d83634246da1de/avatar?c=1707110967"}], "StatisticsMedia": [{"accountID": 1, "deviceID": 13, "timespan": 4, "at": 1707141600, "metadataType": 4, "count": 1, "duration": 1555}, {"accountID": 1, "deviceID": 13, "timespan": 4, "at": 1707141600, "metadataType": 4, "count": 1, "duration": 1555}, {"accountID": 1, "deviceID": 13, "timespan": 4, "at": 1707141600, "metadataType": 4, "count": 1, "duration": 1555}]}} + application/json: {"MediaContainer": {"size": 5497, "Device": [{"id": 208, "name": "Roku Express", "platform": "Roku", "clientIdentifier": "793095d235660625108ef785cc7646e9", "createdAt": 1706470556}], "Account": [{"id": 238960586, "key": "/accounts/238960586", "name": "Diane", "defaultAudioLanguage": "en", "autoSelectAudio": true, "defaultSubtitleLanguage": "en", "subtitleMode": 1, "thumb": "https://plex.tv/users/50d83634246da1de/avatar?c=1707110967"}], "StatisticsMedia": [{"accountID": 1, "deviceID": 13, "timespan": 4, "at": 1707141600, "metadataType": 4, "count": 1, "duration": 1555}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} getResourcesStatistics: @@ -2858,11 +2859,11 @@ examples: timespan: 4 responses: "200": - application/json: {"MediaContainer": {"size": 5497, "StatisticsResources": [{"timespan": 6, "at": 1718384427, "hostCpuUtilization": 1.276, "processCpuUtilization": 0.025, "hostMemoryUtilization": 17.026, "processMemoryUtilization": 0.493}, {"timespan": 6, "at": 1718384427, "hostCpuUtilization": 1.276, "processCpuUtilization": 0.025, "hostMemoryUtilization": 17.026, "processMemoryUtilization": 0.493}]}} + application/json: {"MediaContainer": {"size": 5497, "StatisticsResources": [{"timespan": 6, "at": 1718384427, "hostCpuUtilization": 1.276, "processCpuUtilization": 0.025, "hostMemoryUtilization": 17.026, "processMemoryUtilization": 0.493}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} getBandwidthStatistics: "": parameters: @@ -2870,18 +2871,18 @@ examples: timespan: 4 responses: "200": - application/json: {"MediaContainer": {"size": 5497, "Device": [{"id": 208, "name": "Roku Express", "platform": "Roku", "clientIdentifier": "793095d235660625108ef785cc7646e9", "createdAt": 1706470556}, {"id": 208, "name": "Roku Express", "platform": "Roku", "clientIdentifier": "793095d235660625108ef785cc7646e9", "createdAt": 1706470556}, {"id": 208, "name": "Roku Express", "platform": "Roku", "clientIdentifier": "793095d235660625108ef785cc7646e9", "createdAt": 1706470556}], "Account": [{"id": 238960586, "key": "/accounts/238960586", "name": "Diane", "defaultAudioLanguage": "en", "autoSelectAudio": true, "defaultSubtitleLanguage": "en", "subtitleMode": 1, "thumb": "https://plex.tv/users/50d83634246da1de/avatar?c=1707110967"}, {"id": 238960586, "key": "/accounts/238960586", "name": "Diane", "defaultAudioLanguage": "en", "autoSelectAudio": true, "defaultSubtitleLanguage": "en", "subtitleMode": 1, "thumb": "https://plex.tv/users/50d83634246da1de/avatar?c=1707110967"}, {"id": 238960586, "key": "/accounts/238960586", "name": "Diane", "defaultAudioLanguage": "en", "autoSelectAudio": true, "defaultSubtitleLanguage": "en", "subtitleMode": 1, "thumb": "https://plex.tv/users/50d83634246da1de/avatar?c=1707110967"}], "StatisticsBandwidth": [{"accountID": 238960586, "deviceID": 208, "timespan": 6, "at": 1718387650, "lan": true, "bytes": 22}, {"accountID": 238960586, "deviceID": 208, "timespan": 6, "at": 1718387650, "lan": true, "bytes": 22}]}} + application/json: {"MediaContainer": {"size": 5497, "Device": [{"id": 208, "name": "Roku Express", "platform": "Roku", "clientIdentifier": "793095d235660625108ef785cc7646e9", "createdAt": 1706470556}], "Account": [{"id": 238960586, "key": "/accounts/238960586", "name": "Diane", "defaultAudioLanguage": "en", "autoSelectAudio": true, "defaultSubtitleLanguage": "en", "subtitleMode": 1, "thumb": "https://plex.tv/users/50d83634246da1de/avatar?c=1707110967"}], "StatisticsBandwidth": [{"accountID": 238960586, "deviceID": 208, "timespan": 6, "at": 1718387650, "lan": true, "bytes": 22}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} getSessions: speakeasy-default-get-sessions: responses: "200": - application/json: {"MediaContainer": {"size": 1, "Metadata": [{"addedAt": 1705543312, "art": "/library/metadata/39904/art/1705310687", "duration": 186240, "grandparentArt": "/library/metadata/39904/art/1705310687", "grandparentGuid": "plex://artist/5d07bbfd403c6402904a6480", "grandparentKey": "/library/metadata/39904", "grandparentRatingKey": "39904", "grandparentThumb": "/library/metadata/39904/thumb/1705310687", "grandparentTitle": "Green Day", "guid": "plex://track/6535834f71f22f36f71a8e8f", "index": 1, "key": "/library/metadata/67085", "librarySectionID": "3", "librarySectionKey": "/library/sections/3", "librarySectionTitle": "Music", "musicAnalysisVersion": "1", "originalTitle": "The American Dream Is Killing Me", "parentGuid": "plex://album/65394d6d472b8ab03ef47f12", "parentIndex": 1, "parentKey": "/library/metadata/67084", "parentRatingKey": "67084", "parentStudio": "Reprise Records", "parentThumb": "/library/metadata/67084/thumb/1705543314", "parentTitle": "Saviors", "parentYear": 2024, "ratingCount": 45885, "ratingKey": "67085", "sessionKey": "203", "thumb": "/library/metadata/67084/thumb/1705543314", "title": "The American Dream Is Killing Me", "titleSort": "American Dream Is Killing Me", "type": "track", "updatedAt": 1705543314, "viewOffset": 1000, "Media": [{"audioChannels": 2, "audioCodec": "flac", "bitrate": 1014, "container": "flac", "duration": 186240, "id": "130355", "selected": true, "Part": [{"container": "flac", "duration": 186240, "file": "/music/Green Day/Saviors (2024)/Green Day - Saviors - 01 - The American Dream Is Killing Me.flac", "hasThumbnail": "1", "id": "130625", "key": "/library/parts/130625/1705543268/file.flac", "size": 23644000, "decision": "directplay", "selected": true, "Stream": [{"albumGain": "-12.94", "albumPeak": "1.000000", "albumRange": "4.751014", "audioChannelLayout": "stereo", "bitDepth": 16, "bitrate": 1014, "channels": 2, "codec": "flac", "displayTitle": "FLAC (Stereo)", "extendedDisplayTitle": "FLAC (Stereo)", "gain": "-12.94", "id": "352487", "index": 0, "loudness": "-5.94", "lra": "1.74", "peak": "1.000000", "samplingRate": 44100, "selected": true, "streamType": 2, "location": "direct"}]}, {"container": "flac", "duration": 186240, "file": "/music/Green Day/Saviors (2024)/Green Day - Saviors - 01 - The American Dream Is Killing Me.flac", "hasThumbnail": "1", "id": "130625", "key": "/library/parts/130625/1705543268/file.flac", "size": 23644000, "decision": "directplay", "selected": true, "Stream": [{"albumGain": "-12.94", "albumPeak": "1.000000", "albumRange": "4.751014", "audioChannelLayout": "stereo", "bitDepth": 16, "bitrate": 1014, "channels": 2, "codec": "flac", "displayTitle": "FLAC (Stereo)", "extendedDisplayTitle": "FLAC (Stereo)", "gain": "-12.94", "id": "352487", "index": 0, "loudness": "-5.94", "lra": "1.74", "peak": "1.000000", "samplingRate": 44100, "selected": true, "streamType": 2, "location": "direct"}, {"albumGain": "-12.94", "albumPeak": "1.000000", "albumRange": "4.751014", "audioChannelLayout": "stereo", "bitDepth": 16, "bitrate": 1014, "channels": 2, "codec": "flac", "displayTitle": "FLAC (Stereo)", "extendedDisplayTitle": "FLAC (Stereo)", "gain": "-12.94", "id": "352487", "index": 0, "loudness": "-5.94", "lra": "1.74", "peak": "1.000000", "samplingRate": 44100, "selected": true, "streamType": 2, "location": "direct"}, {"albumGain": "-12.94", "albumPeak": "1.000000", "albumRange": "4.751014", "audioChannelLayout": "stereo", "bitDepth": 16, "bitrate": 1014, "channels": 2, "codec": "flac", "displayTitle": "FLAC (Stereo)", "extendedDisplayTitle": "FLAC (Stereo)", "gain": "-12.94", "id": "352487", "index": 0, "loudness": "-5.94", "lra": "1.74", "peak": "1.000000", "samplingRate": 44100, "selected": true, "streamType": 2, "location": "direct"}]}]}, {"audioChannels": 2, "audioCodec": "flac", "bitrate": 1014, "container": "flac", "duration": 186240, "id": "130355", "selected": true, "Part": [{"container": "flac", "duration": 186240, "file": "/music/Green Day/Saviors (2024)/Green Day - Saviors - 01 - The American Dream Is Killing Me.flac", "hasThumbnail": "1", "id": "130625", "key": "/library/parts/130625/1705543268/file.flac", "size": 23644000, "decision": "directplay", "selected": true, "Stream": [{"albumGain": "-12.94", "albumPeak": "1.000000", "albumRange": "4.751014", "audioChannelLayout": "stereo", "bitDepth": 16, "bitrate": 1014, "channels": 2, "codec": "flac", "displayTitle": "FLAC (Stereo)", "extendedDisplayTitle": "FLAC (Stereo)", "gain": "-12.94", "id": "352487", "index": 0, "loudness": "-5.94", "lra": "1.74", "peak": "1.000000", "samplingRate": 44100, "selected": true, "streamType": 2, "location": "direct"}, {"albumGain": "-12.94", "albumPeak": "1.000000", "albumRange": "4.751014", "audioChannelLayout": "stereo", "bitDepth": 16, "bitrate": 1014, "channels": 2, "codec": "flac", "displayTitle": "FLAC (Stereo)", "extendedDisplayTitle": "FLAC (Stereo)", "gain": "-12.94", "id": "352487", "index": 0, "loudness": "-5.94", "lra": "1.74", "peak": "1.000000", "samplingRate": 44100, "selected": true, "streamType": 2, "location": "direct"}]}, {"container": "flac", "duration": 186240, "file": "/music/Green Day/Saviors (2024)/Green Day - Saviors - 01 - The American Dream Is Killing Me.flac", "hasThumbnail": "1", "id": "130625", "key": "/library/parts/130625/1705543268/file.flac", "size": 23644000, "decision": "directplay", "selected": true, "Stream": [{"albumGain": "-12.94", "albumPeak": "1.000000", "albumRange": "4.751014", "audioChannelLayout": "stereo", "bitDepth": 16, "bitrate": 1014, "channels": 2, "codec": "flac", "displayTitle": "FLAC (Stereo)", "extendedDisplayTitle": "FLAC (Stereo)", "gain": "-12.94", "id": "352487", "index": 0, "loudness": "-5.94", "lra": "1.74", "peak": "1.000000", "samplingRate": 44100, "selected": true, "streamType": 2, "location": "direct"}]}, {"container": "flac", "duration": 186240, "file": "/music/Green Day/Saviors (2024)/Green Day - Saviors - 01 - The American Dream Is Killing Me.flac", "hasThumbnail": "1", "id": "130625", "key": "/library/parts/130625/1705543268/file.flac", "size": 23644000, "decision": "directplay", "selected": true, "Stream": [{"albumGain": "-12.94", "albumPeak": "1.000000", "albumRange": "4.751014", "audioChannelLayout": "stereo", "bitDepth": 16, "bitrate": 1014, "channels": 2, "codec": "flac", "displayTitle": "FLAC (Stereo)", "extendedDisplayTitle": "FLAC (Stereo)", "gain": "-12.94", "id": "352487", "index": 0, "loudness": "-5.94", "lra": "1.74", "peak": "1.000000", "samplingRate": 44100, "selected": true, "streamType": 2, "location": "direct"}, {"albumGain": "-12.94", "albumPeak": "1.000000", "albumRange": "4.751014", "audioChannelLayout": "stereo", "bitDepth": 16, "bitrate": 1014, "channels": 2, "codec": "flac", "displayTitle": "FLAC (Stereo)", "extendedDisplayTitle": "FLAC (Stereo)", "gain": "-12.94", "id": "352487", "index": 0, "loudness": "-5.94", "lra": "1.74", "peak": "1.000000", "samplingRate": 44100, "selected": true, "streamType": 2, "location": "direct"}]}]}, {"audioChannels": 2, "audioCodec": "flac", "bitrate": 1014, "container": "flac", "duration": 186240, "id": "130355", "selected": true, "Part": [{"container": "flac", "duration": 186240, "file": "/music/Green Day/Saviors (2024)/Green Day - Saviors - 01 - The American Dream Is Killing Me.flac", "hasThumbnail": "1", "id": "130625", "key": "/library/parts/130625/1705543268/file.flac", "size": 23644000, "decision": "directplay", "selected": true, "Stream": [{"albumGain": "-12.94", "albumPeak": "1.000000", "albumRange": "4.751014", "audioChannelLayout": "stereo", "bitDepth": 16, "bitrate": 1014, "channels": 2, "codec": "flac", "displayTitle": "FLAC (Stereo)", "extendedDisplayTitle": "FLAC (Stereo)", "gain": "-12.94", "id": "352487", "index": 0, "loudness": "-5.94", "lra": "1.74", "peak": "1.000000", "samplingRate": 44100, "selected": true, "streamType": 2, "location": "direct"}, {"albumGain": "-12.94", "albumPeak": "1.000000", "albumRange": "4.751014", "audioChannelLayout": "stereo", "bitDepth": 16, "bitrate": 1014, "channels": 2, "codec": "flac", "displayTitle": "FLAC (Stereo)", "extendedDisplayTitle": "FLAC (Stereo)", "gain": "-12.94", "id": "352487", "index": 0, "loudness": "-5.94", "lra": "1.74", "peak": "1.000000", "samplingRate": 44100, "selected": true, "streamType": 2, "location": "direct"}]}]}], "User": {"id": "1", "thumb": "https://plex.tv/users/844780fc6f8a26b5/avatar?c=1705853661", "title": "Blindkitty38"}, "Player": {"address": "10.10.10.171", "machineIdentifier": "3tsdzir85m2onc3qyr255aq1", "model": "standalone", "platform": "windows", "platformVersion": "10.0.22621", "product": "Plex for Windows", "profile": "Plex Desktop", "remotePublicAddress": "68.248.140.20", "state": "playing", "title": "DESKTOP-BL80MTD", "version": "1.85.0.4071-21128b56", "local": true, "relayed": false, "secure": true, "userID": 1}, "Session": {"id": "93h7e00ncblxncqw9lkfaoxi", "bandwidth": 1050, "location": "lan"}}, {"addedAt": 1705543312, "art": "/library/metadata/39904/art/1705310687", "duration": 186240, "grandparentArt": "/library/metadata/39904/art/1705310687", "grandparentGuid": "plex://artist/5d07bbfd403c6402904a6480", "grandparentKey": "/library/metadata/39904", "grandparentRatingKey": "39904", "grandparentThumb": "/library/metadata/39904/thumb/1705310687", "grandparentTitle": "Green Day", "guid": "plex://track/6535834f71f22f36f71a8e8f", "index": 1, "key": "/library/metadata/67085", "librarySectionID": "3", "librarySectionKey": "/library/sections/3", "librarySectionTitle": "Music", "musicAnalysisVersion": "1", "originalTitle": "The American Dream Is Killing Me", "parentGuid": "plex://album/65394d6d472b8ab03ef47f12", "parentIndex": 1, "parentKey": "/library/metadata/67084", "parentRatingKey": "67084", "parentStudio": "Reprise Records", "parentThumb": "/library/metadata/67084/thumb/1705543314", "parentTitle": "Saviors", "parentYear": 2024, "ratingCount": 45885, "ratingKey": "67085", "sessionKey": "203", "thumb": "/library/metadata/67084/thumb/1705543314", "title": "The American Dream Is Killing Me", "titleSort": "American Dream Is Killing Me", "type": "track", "updatedAt": 1705543314, "viewOffset": 1000, "Media": [{"audioChannels": 2, "audioCodec": "flac", "bitrate": 1014, "container": "flac", "duration": 186240, "id": "130355", "selected": true, "Part": [{"container": "flac", "duration": 186240, "file": "/music/Green Day/Saviors (2024)/Green Day - Saviors - 01 - The American Dream Is Killing Me.flac", "hasThumbnail": "1", "id": "130625", "key": "/library/parts/130625/1705543268/file.flac", "size": 23644000, "decision": "directplay", "selected": true, "Stream": [{"albumGain": "-12.94", "albumPeak": "1.000000", "albumRange": "4.751014", "audioChannelLayout": "stereo", "bitDepth": 16, "bitrate": 1014, "channels": 2, "codec": "flac", "displayTitle": "FLAC (Stereo)", "extendedDisplayTitle": "FLAC (Stereo)", "gain": "-12.94", "id": "352487", "index": 0, "loudness": "-5.94", "lra": "1.74", "peak": "1.000000", "samplingRate": 44100, "selected": true, "streamType": 2, "location": "direct"}, {"albumGain": "-12.94", "albumPeak": "1.000000", "albumRange": "4.751014", "audioChannelLayout": "stereo", "bitDepth": 16, "bitrate": 1014, "channels": 2, "codec": "flac", "displayTitle": "FLAC (Stereo)", "extendedDisplayTitle": "FLAC (Stereo)", "gain": "-12.94", "id": "352487", "index": 0, "loudness": "-5.94", "lra": "1.74", "peak": "1.000000", "samplingRate": 44100, "selected": true, "streamType": 2, "location": "direct"}]}, {"container": "flac", "duration": 186240, "file": "/music/Green Day/Saviors (2024)/Green Day - Saviors - 01 - The American Dream Is Killing Me.flac", "hasThumbnail": "1", "id": "130625", "key": "/library/parts/130625/1705543268/file.flac", "size": 23644000, "decision": "directplay", "selected": true, "Stream": [{"albumGain": "-12.94", "albumPeak": "1.000000", "albumRange": "4.751014", "audioChannelLayout": "stereo", "bitDepth": 16, "bitrate": 1014, "channels": 2, "codec": "flac", "displayTitle": "FLAC (Stereo)", "extendedDisplayTitle": "FLAC (Stereo)", "gain": "-12.94", "id": "352487", "index": 0, "loudness": "-5.94", "lra": "1.74", "peak": "1.000000", "samplingRate": 44100, "selected": true, "streamType": 2, "location": "direct"}]}, {"container": "flac", "duration": 186240, "file": "/music/Green Day/Saviors (2024)/Green Day - Saviors - 01 - The American Dream Is Killing Me.flac", "hasThumbnail": "1", "id": "130625", "key": "/library/parts/130625/1705543268/file.flac", "size": 23644000, "decision": "directplay", "selected": true, "Stream": [{"albumGain": "-12.94", "albumPeak": "1.000000", "albumRange": "4.751014", "audioChannelLayout": "stereo", "bitDepth": 16, "bitrate": 1014, "channels": 2, "codec": "flac", "displayTitle": "FLAC (Stereo)", "extendedDisplayTitle": "FLAC (Stereo)", "gain": "-12.94", "id": "352487", "index": 0, "loudness": "-5.94", "lra": "1.74", "peak": "1.000000", "samplingRate": 44100, "selected": true, "streamType": 2, "location": "direct"}, {"albumGain": "-12.94", "albumPeak": "1.000000", "albumRange": "4.751014", "audioChannelLayout": "stereo", "bitDepth": 16, "bitrate": 1014, "channels": 2, "codec": "flac", "displayTitle": "FLAC (Stereo)", "extendedDisplayTitle": "FLAC (Stereo)", "gain": "-12.94", "id": "352487", "index": 0, "loudness": "-5.94", "lra": "1.74", "peak": "1.000000", "samplingRate": 44100, "selected": true, "streamType": 2, "location": "direct"}, {"albumGain": "-12.94", "albumPeak": "1.000000", "albumRange": "4.751014", "audioChannelLayout": "stereo", "bitDepth": 16, "bitrate": 1014, "channels": 2, "codec": "flac", "displayTitle": "FLAC (Stereo)", "extendedDisplayTitle": "FLAC (Stereo)", "gain": "-12.94", "id": "352487", "index": 0, "loudness": "-5.94", "lra": "1.74", "peak": "1.000000", "samplingRate": 44100, "selected": true, "streamType": 2, "location": "direct"}]}]}, {"audioChannels": 2, "audioCodec": "flac", "bitrate": 1014, "container": "flac", "duration": 186240, "id": "130355", "selected": true, "Part": [{"container": "flac", "duration": 186240, "file": "/music/Green Day/Saviors (2024)/Green Day - Saviors - 01 - The American Dream Is Killing Me.flac", "hasThumbnail": "1", "id": "130625", "key": "/library/parts/130625/1705543268/file.flac", "size": 23644000, "decision": "directplay", "selected": true, "Stream": [{"albumGain": "-12.94", "albumPeak": "1.000000", "albumRange": "4.751014", "audioChannelLayout": "stereo", "bitDepth": 16, "bitrate": 1014, "channels": 2, "codec": "flac", "displayTitle": "FLAC (Stereo)", "extendedDisplayTitle": "FLAC (Stereo)", "gain": "-12.94", "id": "352487", "index": 0, "loudness": "-5.94", "lra": "1.74", "peak": "1.000000", "samplingRate": 44100, "selected": true, "streamType": 2, "location": "direct"}, {"albumGain": "-12.94", "albumPeak": "1.000000", "albumRange": "4.751014", "audioChannelLayout": "stereo", "bitDepth": 16, "bitrate": 1014, "channels": 2, "codec": "flac", "displayTitle": "FLAC (Stereo)", "extendedDisplayTitle": "FLAC (Stereo)", "gain": "-12.94", "id": "352487", "index": 0, "loudness": "-5.94", "lra": "1.74", "peak": "1.000000", "samplingRate": 44100, "selected": true, "streamType": 2, "location": "direct"}, {"albumGain": "-12.94", "albumPeak": "1.000000", "albumRange": "4.751014", "audioChannelLayout": "stereo", "bitDepth": 16, "bitrate": 1014, "channels": 2, "codec": "flac", "displayTitle": "FLAC (Stereo)", "extendedDisplayTitle": "FLAC (Stereo)", "gain": "-12.94", "id": "352487", "index": 0, "loudness": "-5.94", "lra": "1.74", "peak": "1.000000", "samplingRate": 44100, "selected": true, "streamType": 2, "location": "direct"}]}]}, {"audioChannels": 2, "audioCodec": "flac", "bitrate": 1014, "container": "flac", "duration": 186240, "id": "130355", "selected": true, "Part": [{"container": "flac", "duration": 186240, "file": "/music/Green Day/Saviors (2024)/Green Day - Saviors - 01 - The American Dream Is Killing Me.flac", "hasThumbnail": "1", "id": "130625", "key": "/library/parts/130625/1705543268/file.flac", "size": 23644000, "decision": "directplay", "selected": true, "Stream": [{"albumGain": "-12.94", "albumPeak": "1.000000", "albumRange": "4.751014", "audioChannelLayout": "stereo", "bitDepth": 16, "bitrate": 1014, "channels": 2, "codec": "flac", "displayTitle": "FLAC (Stereo)", "extendedDisplayTitle": "FLAC (Stereo)", "gain": "-12.94", "id": "352487", "index": 0, "loudness": "-5.94", "lra": "1.74", "peak": "1.000000", "samplingRate": 44100, "selected": true, "streamType": 2, "location": "direct"}, {"albumGain": "-12.94", "albumPeak": "1.000000", "albumRange": "4.751014", "audioChannelLayout": "stereo", "bitDepth": 16, "bitrate": 1014, "channels": 2, "codec": "flac", "displayTitle": "FLAC (Stereo)", "extendedDisplayTitle": "FLAC (Stereo)", "gain": "-12.94", "id": "352487", "index": 0, "loudness": "-5.94", "lra": "1.74", "peak": "1.000000", "samplingRate": 44100, "selected": true, "streamType": 2, "location": "direct"}]}]}], "User": {"id": "1", "thumb": "https://plex.tv/users/844780fc6f8a26b5/avatar?c=1705853661", "title": "Blindkitty38"}, "Player": {"address": "10.10.10.171", "machineIdentifier": "3tsdzir85m2onc3qyr255aq1", "model": "standalone", "platform": "windows", "platformVersion": "10.0.22621", "product": "Plex for Windows", "profile": "Plex Desktop", "remotePublicAddress": "68.248.140.20", "state": "playing", "title": "DESKTOP-BL80MTD", "version": "1.85.0.4071-21128b56", "local": true, "relayed": false, "secure": true, "userID": 1}, "Session": {"id": "93h7e00ncblxncqw9lkfaoxi", "bandwidth": 1050, "location": "lan"}}]}} + application/json: {"MediaContainer": {"size": 1, "Metadata": [{"addedAt": 1705543312, "art": "/library/metadata/39904/art/1705310687", "duration": 186240, "grandparentArt": "/library/metadata/39904/art/1705310687", "grandparentGuid": "plex://artist/5d07bbfd403c6402904a6480", "grandparentKey": "/library/metadata/39904", "grandparentRatingKey": "39904", "grandparentThumb": "/library/metadata/39904/thumb/1705310687", "grandparentTitle": "Green Day", "guid": "plex://track/6535834f71f22f36f71a8e8f", "index": 1, "key": "/library/metadata/67085", "librarySectionID": "3", "librarySectionKey": "/library/sections/3", "librarySectionTitle": "Music", "musicAnalysisVersion": "1", "originalTitle": "The American Dream Is Killing Me", "parentGuid": "plex://album/65394d6d472b8ab03ef47f12", "parentIndex": 1, "parentKey": "/library/metadata/67084", "parentRatingKey": "67084", "parentStudio": "Reprise Records", "parentThumb": "/library/metadata/67084/thumb/1705543314", "parentTitle": "Saviors", "parentYear": 2024, "ratingCount": 45885, "ratingKey": "67085", "sessionKey": "203", "thumb": "/library/metadata/67084/thumb/1705543314", "title": "The American Dream Is Killing Me", "titleSort": "American Dream Is Killing Me", "type": "track", "updatedAt": 1705543314, "viewOffset": 1000, "Media": [{"audioChannels": 2, "audioCodec": "flac", "bitrate": 1014, "container": "flac", "duration": 186240, "id": "130355", "selected": true, "Part": [{"container": "flac", "duration": 186240, "file": "/music/Green Day/Saviors (2024)/Green Day - Saviors - 01 - The American Dream Is Killing Me.flac", "hasThumbnail": "1", "id": "130625", "key": "/library/parts/130625/1705543268/file.flac", "size": 23644000, "decision": "directplay", "selected": true, "Stream": [{"albumGain": "-12.94", "albumPeak": "1.000000", "albumRange": "4.751014", "audioChannelLayout": "stereo", "bitDepth": 16, "bitrate": 1014, "channels": 2, "codec": "flac", "displayTitle": "FLAC (Stereo)", "extendedDisplayTitle": "FLAC (Stereo)", "gain": "-12.94", "id": "352487", "index": 0, "loudness": "-5.94", "lra": "1.74", "peak": "1.000000", "samplingRate": 44100, "selected": true, "streamType": 2, "location": "direct"}]}]}], "User": {"id": "1", "thumb": "https://plex.tv/users/844780fc6f8a26b5/avatar?c=1705853661", "title": "Blindkitty38"}, "Player": {"address": "10.10.10.171", "machineIdentifier": "3tsdzir85m2onc3qyr255aq1", "model": "standalone", "platform": "windows", "platformVersion": "10.0.22621", "product": "Plex for Windows", "profile": "Plex Desktop", "remotePublicAddress": "68.248.140.20", "state": "playing", "title": "DESKTOP-BL80MTD", "version": "1.85.0.4071-21128b56", "local": true, "relayed": false, "secure": true, "userID": 1}, "Session": {"id": "93h7e00ncblxncqw9lkfaoxi", "bandwidth": 1050, "location": "lan"}}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} getSessionHistory: @@ -2890,75 +2891,81 @@ examples: query: sort: "viewedAt:desc" accountId: 1 + filter: {} librarySectionID: 12 responses: "200": - application/json: {"MediaContainer": {"size": 10855, "Metadata": [{"historyKey": "/status/sessions/history/1", "key": "/library/metadata/32171", "ratingKey": "32171", "librarySectionID": "2", "parentKey": "/library/metadata/32170", "grandparentKey": "/library/metadata/32132", "title": "The Noise That Blue Makes", "grandparentTitle": "Taskmaster", "type": "episode", "thumb": "/library/metadata/32171/thumb/-1", "parentThumb": "/library/metadata/32170/thumb/1654134301", "grandparentThumb": "/library/metadata/32132/thumb/1703933346", "grandparentArt": "/library/metadata/32132/art/1703933346", "index": 1, "parentIndex": 13, "originallyAvailableAt": "2022-04-14T00:00:00Z", "viewedAt": 1654139223, "accountID": 1, "deviceID": 5}, {"historyKey": "/status/sessions/history/1", "key": "/library/metadata/32171", "ratingKey": "32171", "librarySectionID": "2", "parentKey": "/library/metadata/32170", "grandparentKey": "/library/metadata/32132", "title": "The Noise That Blue Makes", "grandparentTitle": "Taskmaster", "type": "episode", "thumb": "/library/metadata/32171/thumb/-1", "parentThumb": "/library/metadata/32170/thumb/1654134301", "grandparentThumb": "/library/metadata/32132/thumb/1703933346", "grandparentArt": "/library/metadata/32132/art/1703933346", "index": 1, "parentIndex": 13, "originallyAvailableAt": "2022-04-14T00:00:00Z", "viewedAt": 1654139223, "accountID": 1, "deviceID": 5}]}} + application/json: {"MediaContainer": {"size": 10855, "Metadata": [{"historyKey": "/status/sessions/history/1", "key": "/library/metadata/32171", "ratingKey": "32171", "librarySectionID": "2", "parentKey": "/library/metadata/32170", "grandparentKey": "/library/metadata/32132", "title": "The Noise That Blue Makes", "grandparentTitle": "Taskmaster", "type": "episode", "thumb": "/library/metadata/32171/thumb/-1", "parentThumb": "/library/metadata/32170/thumb/1654134301", "grandparentThumb": "/library/metadata/32132/thumb/1703933346", "grandparentArt": "/library/metadata/32132/art/1703933346", "index": 1, "parentIndex": 13, "originallyAvailableAt": "2022-04-14T00:00:00Z", "viewedAt": 1654139223, "accountID": 1, "deviceID": 5}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} viewed-at-ascending: parameters: query: sort: "viewedAt:asc" accountId: 1 + filter: {} librarySectionID: 12 responses: "200": application/json: {"MediaContainer": {"size": 10855, "Metadata": [{"historyKey": "/status/sessions/history/1", "key": "/library/metadata/32171", "ratingKey": "32171", "librarySectionID": "2", "parentKey": "/library/metadata/32170", "grandparentKey": "/library/metadata/32132", "title": "The Noise That Blue Makes", "grandparentTitle": "Taskmaster", "type": "episode", "thumb": "/library/metadata/32171/thumb/-1", "parentThumb": "/library/metadata/32170/thumb/1654134301", "grandparentThumb": "/library/metadata/32132/thumb/1703933346", "grandparentArt": "/library/metadata/32132/art/1703933346", "index": 1, "parentIndex": 13, "originallyAvailableAt": "2022-04-14T00:00:00Z", "viewedAt": 1654139223, "accountID": 1, "deviceID": 5}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} rating-descending: parameters: query: sort: "rating:desc" accountId: 1 + filter: {} librarySectionID: 12 responses: "200": application/json: {"MediaContainer": {"size": 10855, "Metadata": [{"historyKey": "/status/sessions/history/1", "key": "/library/metadata/32171", "ratingKey": "32171", "librarySectionID": "2", "parentKey": "/library/metadata/32170", "grandparentKey": "/library/metadata/32132", "title": "The Noise That Blue Makes", "grandparentTitle": "Taskmaster", "type": "episode", "thumb": "/library/metadata/32171/thumb/-1", "parentThumb": "/library/metadata/32170/thumb/1654134301", "grandparentThumb": "/library/metadata/32132/thumb/1703933346", "grandparentArt": "/library/metadata/32132/art/1703933346", "index": 1, "parentIndex": 13, "originallyAvailableAt": "2022-04-14T00:00:00Z", "viewedAt": 1654139223, "accountID": 1, "deviceID": 5}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} rating-ascending: parameters: query: sort: "rating:asc" accountId: 1 + filter: {} librarySectionID: 12 responses: "200": application/json: {"MediaContainer": {"size": 10855, "Metadata": [{"historyKey": "/status/sessions/history/1", "key": "/library/metadata/32171", "ratingKey": "32171", "librarySectionID": "2", "parentKey": "/library/metadata/32170", "grandparentKey": "/library/metadata/32132", "title": "The Noise That Blue Makes", "grandparentTitle": "Taskmaster", "type": "episode", "thumb": "/library/metadata/32171/thumb/-1", "parentThumb": "/library/metadata/32170/thumb/1654134301", "grandparentThumb": "/library/metadata/32132/thumb/1703933346", "grandparentArt": "/library/metadata/32132/art/1703933346", "index": 1, "parentIndex": 13, "originallyAvailableAt": "2022-04-14T00:00:00Z", "viewedAt": 1654139223, "accountID": 1, "deviceID": 5}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} "": parameters: query: accountId: 1 + filter: {} librarySectionID: 12 responses: "200": - application/json: {"MediaContainer": {"size": 10855, "Metadata": [{"historyKey": "/status/sessions/history/1", "key": "/library/metadata/32171", "ratingKey": "32171", "librarySectionID": "2", "parentKey": "/library/metadata/32170", "grandparentKey": "/library/metadata/32132", "title": "The Noise That Blue Makes", "grandparentTitle": "Taskmaster", "type": "episode", "thumb": "/library/metadata/32171/thumb/-1", "parentThumb": "/library/metadata/32170/thumb/1654134301", "grandparentThumb": "/library/metadata/32132/thumb/1703933346", "grandparentArt": "/library/metadata/32132/art/1703933346", "index": 1, "parentIndex": 13, "originallyAvailableAt": "2022-04-14T00:00:00Z", "viewedAt": 1654139223, "accountID": 1, "deviceID": 5}, {"historyKey": "/status/sessions/history/1", "key": "/library/metadata/32171", "ratingKey": "32171", "librarySectionID": "2", "parentKey": "/library/metadata/32170", "grandparentKey": "/library/metadata/32132", "title": "The Noise That Blue Makes", "grandparentTitle": "Taskmaster", "type": "episode", "thumb": "/library/metadata/32171/thumb/-1", "parentThumb": "/library/metadata/32170/thumb/1654134301", "grandparentThumb": "/library/metadata/32132/thumb/1703933346", "grandparentArt": "/library/metadata/32132/art/1703933346", "index": 1, "parentIndex": 13, "originallyAvailableAt": "2022-04-14T00:00:00Z", "viewedAt": 1654139223, "accountID": 1, "deviceID": 5}]}} + application/json: {"MediaContainer": {"size": 10855, "Metadata": [{"historyKey": "/status/sessions/history/1", "key": "/library/metadata/32171", "ratingKey": "32171", "librarySectionID": "2", "parentKey": "/library/metadata/32170", "grandparentKey": "/library/metadata/32132", "title": "The Noise That Blue Makes", "grandparentTitle": "Taskmaster", "type": "episode", "thumb": "/library/metadata/32171/thumb/-1", "parentThumb": "/library/metadata/32170/thumb/1654134301", "grandparentThumb": "/library/metadata/32132/thumb/1703933346", "grandparentArt": "/library/metadata/32132/art/1703933346", "index": 1, "parentIndex": 13, "originallyAvailableAt": "2022-04-14T00:00:00Z", "viewedAt": 1654139223, "accountID": 1, "deviceID": 5}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} ViewedAt: parameters: query: accountId: 1 + filter: {} librarySectionID: 12 responses: "200": - application/json: {"MediaContainer": {"size": 10855, "Metadata": [{"historyKey": "/status/sessions/history/1", "key": "/library/metadata/32171", "ratingKey": "32171", "librarySectionID": "2", "parentKey": "/library/metadata/32170", "grandparentKey": "/library/metadata/32132", "title": "The Noise That Blue Makes", "grandparentTitle": "Taskmaster", "type": "episode", "thumb": "/library/metadata/32171/thumb/-1", "parentThumb": "/library/metadata/32170/thumb/1654134301", "grandparentThumb": "/library/metadata/32132/thumb/1703933346", "grandparentArt": "/library/metadata/32132/art/1703933346", "index": 1, "parentIndex": 13, "originallyAvailableAt": "2022-04-14T00:00:00Z", "viewedAt": 1654139223, "accountID": 1, "deviceID": 5}, {"historyKey": "/status/sessions/history/1", "key": "/library/metadata/32171", "ratingKey": "32171", "librarySectionID": "2", "parentKey": "/library/metadata/32170", "grandparentKey": "/library/metadata/32132", "title": "The Noise That Blue Makes", "grandparentTitle": "Taskmaster", "type": "episode", "thumb": "/library/metadata/32171/thumb/-1", "parentThumb": "/library/metadata/32170/thumb/1654134301", "grandparentThumb": "/library/metadata/32132/thumb/1703933346", "grandparentArt": "/library/metadata/32132/art/1703933346", "index": 1, "parentIndex": 13, "originallyAvailableAt": "2022-04-14T00:00:00Z", "viewedAt": 1654139223, "accountID": 1, "deviceID": 5}]}} + application/json: {"MediaContainer": {"size": 10855, "Metadata": [{"historyKey": "/status/sessions/history/1", "key": "/library/metadata/32171", "ratingKey": "32171", "librarySectionID": "2", "parentKey": "/library/metadata/32170", "grandparentKey": "/library/metadata/32132", "title": "The Noise That Blue Makes", "grandparentTitle": "Taskmaster", "type": "episode", "thumb": "/library/metadata/32171/thumb/-1", "parentThumb": "/library/metadata/32170/thumb/1654134301", "grandparentThumb": "/library/metadata/32132/thumb/1703933346", "grandparentArt": "/library/metadata/32132/art/1703933346", "index": 1, "parentIndex": 13, "originallyAvailableAt": "2022-04-14T00:00:00Z", "viewedAt": 1654139223, "accountID": 1, "deviceID": 5}]}} "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} getTranscodeSessions: @@ -2969,7 +2976,7 @@ examples: "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} stopTranscodeSession: speakeasy-default-stop-transcode-session: parameters: @@ -2977,9 +2984,9 @@ examples: sessionKey: "zz7llzqlx8w9vnrsbnwhbmep" responses: "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} getUpdateStatus: speakeasy-default-get-update-status: responses: @@ -2988,7 +2995,7 @@ examples: "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} checkForUpdates: "": parameters: @@ -2996,9 +3003,9 @@ examples: download: 1 responses: "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} applyUpdates: "": parameters: @@ -3007,7 +3014,7 @@ examples: skip: 1 responses: "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} get-users: @@ -3029,10 +3036,10 @@ examples: X-Plex-Token: "CV5xoxjTpFKUzBTShsaf" responses: "200": - application/xml: "0xa9CdebeF9E" + application/xml: "0xfD5052DbD1" "400": - application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} -examplesVersion: 1.0.1 + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} +examplesVersion: 1.0.2 generatedTests: {} diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 3123d27..f7f85bc 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -4,6 +4,7 @@ generation: maintainOpenAPIOrder: true usageSnippets: optionalPropertyRendering: withExample + sdkInitStyle: constructor useClassNamesForArrayFields: true fixes: nameResolutionDec2023: true @@ -16,7 +17,7 @@ generation: oAuth2ClientCredentialsEnabled: true oAuth2PasswordEnabled: false csharp: - version: 0.14.11 + version: 0.15.0 additionalDependencies: [] author: LukeHagar clientServerStatusCodesAsErrors: true diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index e4c73c5..7b07f57 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -1,4 +1,4 @@ -speakeasyVersion: 1.542.1 +speakeasyVersion: 1.555.2 sources: my-source: sourceNamespace: my-source @@ -16,19 +16,19 @@ sources: - main plexapi: sourceNamespace: plexapi - sourceRevisionDigest: sha256:37adc934a79841fb00cfe6ed569f5b1c88534b20202ecbde64b4e84828cee22a - sourceBlobDigest: sha256:ffb5b8d288111a763e4d035c8c9e37f5c89690d146b7297493b43a71d8298e6c + sourceRevisionDigest: sha256:78d07ad78ff60d0e9918696208d8c68a562e170d4e9c431797c02995fb8816d0 + sourceBlobDigest: sha256:d38dd2a36c1b2fd73409267f7b30c2d5d45d709616141803ea01db424ec68ae4 tags: - latest - - speakeasy-sdk-regen-1746404742 + - speakeasy-sdk-regen-1748996711 targets: plexcsharp: source: plexapi sourceNamespace: plexapi - sourceRevisionDigest: sha256:37adc934a79841fb00cfe6ed569f5b1c88534b20202ecbde64b4e84828cee22a - sourceBlobDigest: sha256:ffb5b8d288111a763e4d035c8c9e37f5c89690d146b7297493b43a71d8298e6c + sourceRevisionDigest: sha256:78d07ad78ff60d0e9918696208d8c68a562e170d4e9c431797c02995fb8816d0 + sourceBlobDigest: sha256:d38dd2a36c1b2fd73409267f7b30c2d5d45d709616141803ea01db424ec68ae4 codeSamplesNamespace: code-samples-csharp-plexcsharp - codeSamplesRevisionDigest: sha256:7cb363d64d3faf7e2bf27b77c7bd75d20aa754c1d67c7d67122dd4fd190db66c + codeSamplesRevisionDigest: sha256:5609267a659a1b1fdebdd8516758904fc983fb919b5b5a8bbd0044567e8bfa0f workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/LukeHagar/PlexAPI/SDK/Activities.cs b/LukeHagar/PlexAPI/SDK/Activities.cs index aee77b9..e35fa39 100644 --- a/LukeHagar/PlexAPI/SDK/Activities.cs +++ b/LukeHagar/PlexAPI/SDK/Activities.cs @@ -74,19 +74,12 @@ namespace LukeHagar.PlexAPI.SDK { public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.14.11"; - private const string _sdkGenVersion = "2.597.9"; + private const string _sdkVersion = "0.15.0"; + private const string _sdkGenVersion = "2.620.2"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.14.11 2.597.9 0.0.3 LukeHagar.PlexAPI.SDK"; - private string _serverUrl = ""; - private ISpeakeasyHttpClient _client; - private Func? _securitySource; - public Activities(ISpeakeasyHttpClient client, Func? securitySource, string serverUrl, SDKConfig config) + public Activities(SDKConfig config) { - _client = client; - _securitySource = securitySource; - _serverUrl = serverUrl; SDKConfiguration = config; } @@ -97,21 +90,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = baseUrl + "/activities"; var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getServerActivities", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getServerActivities", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -201,21 +194,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/activities/{activityUUID}", request); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "cancelServerActivities", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "cancelServerActivities", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) diff --git a/LukeHagar/PlexAPI/SDK/Authentication.cs b/LukeHagar/PlexAPI/SDK/Authentication.cs index 1b375fb..e9c3f7f 100644 --- a/LukeHagar/PlexAPI/SDK/Authentication.cs +++ b/LukeHagar/PlexAPI/SDK/Authentication.cs @@ -95,19 +95,12 @@ namespace LukeHagar.PlexAPI.SDK }; public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.14.11"; - private const string _sdkGenVersion = "2.597.9"; + private const string _sdkVersion = "0.15.0"; + private const string _sdkGenVersion = "2.620.2"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.14.11 2.597.9 0.0.3 LukeHagar.PlexAPI.SDK"; - private string _serverUrl = ""; - private ISpeakeasyHttpClient _client; - private Func? _securitySource; - public Authentication(ISpeakeasyHttpClient client, Func? securitySource, string serverUrl, SDKConfig config) + public Authentication(SDKConfig config) { - _client = client; - _securitySource = securitySource; - _serverUrl = serverUrl; SDKConfiguration = config; } @@ -122,21 +115,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/security/token", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getTransientToken", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getTransientToken", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -218,21 +211,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/security/resources", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getSourceConnectionInformation", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getSourceConnectionInformation", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -316,21 +309,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = baseUrl + "/user"; var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getTokenDetails", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getTokenDetails", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -422,7 +415,7 @@ namespace LukeHagar.PlexAPI.SDK var urlString = baseUrl + "/users/signin"; var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); HeaderSerializer.PopulateHeaders(ref httpRequest, request); var serializedBody = RequestBodySerializer.Serialize(request, "RequestBody", "form", false, true); @@ -431,14 +424,14 @@ namespace LukeHagar.PlexAPI.SDK httpRequest.Content = serializedBody; } - var hookCtx = new HookContext(baseUrl, "post-users-sign-in-data", new List { }, null); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "post-users-sign-in-data", new List { }, null); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) diff --git a/LukeHagar/PlexAPI/SDK/Butler.cs b/LukeHagar/PlexAPI/SDK/Butler.cs index f83e4bb..7a4d27e 100644 --- a/LukeHagar/PlexAPI/SDK/Butler.cs +++ b/LukeHagar/PlexAPI/SDK/Butler.cs @@ -101,19 +101,12 @@ namespace LukeHagar.PlexAPI.SDK { public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.14.11"; - private const string _sdkGenVersion = "2.597.9"; + private const string _sdkVersion = "0.15.0"; + private const string _sdkGenVersion = "2.620.2"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.14.11 2.597.9 0.0.3 LukeHagar.PlexAPI.SDK"; - private string _serverUrl = ""; - private ISpeakeasyHttpClient _client; - private Func? _securitySource; - public Butler(ISpeakeasyHttpClient client, Func? securitySource, string serverUrl, SDKConfig config) + public Butler(SDKConfig config) { - _client = client; - _securitySource = securitySource; - _serverUrl = serverUrl; SDKConfiguration = config; } @@ -124,21 +117,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = baseUrl + "/butler"; var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getButlerTasks", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getButlerTasks", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -225,21 +218,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = baseUrl + "/butler"; var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "startAllTasks", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "startAllTasks", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -318,21 +311,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = baseUrl + "/butler"; var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "stopAllTasks", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "stopAllTasks", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -414,21 +407,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/butler/{taskName}", request); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "startTask", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "startTask", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -510,21 +503,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/butler/{taskName}", request); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "stopTask", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "stopTask", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode == 404 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) diff --git a/LukeHagar/PlexAPI/SDK/Hooks/HookTypes.cs b/LukeHagar/PlexAPI/SDK/Hooks/HookTypes.cs index 6c2862f..7bae45d 100644 --- a/LukeHagar/PlexAPI/SDK/Hooks/HookTypes.cs +++ b/LukeHagar/PlexAPI/SDK/Hooks/HookTypes.cs @@ -17,36 +17,47 @@ namespace LukeHagar.PlexAPI.SDK.Hooks public class HookContext { + public SDKConfig SDKConfiguration { get; set; } public string BaseURL { get; set; } = ""; public string OperationID { get; set; } public List? Oauth2Scopes { get; set; } public Func? SecuritySource { get; set; } - public HookContext(string baseURL, string operationID, List? oauth2Scopes, Func? securitySource) + public HookContext(SDKConfig config, string baseURL, string operationID, List? oauth2Scopes, Func? securitySource) { + SDKConfiguration = config; BaseURL = baseURL; OperationID = operationID; Oauth2Scopes = oauth2Scopes; SecuritySource = securitySource; } + + public HookContext(HookContext hookCtx) + { + SDKConfiguration = hookCtx.SDKConfiguration; + BaseURL = hookCtx.BaseURL; + OperationID = hookCtx.OperationID; + Oauth2Scopes = hookCtx.Oauth2Scopes; + SecuritySource = hookCtx.SecuritySource; + } } public class BeforeRequestContext : HookContext { public BeforeRequestContext(HookContext hookCtx) - : base(hookCtx.BaseURL, hookCtx.OperationID, hookCtx.Oauth2Scopes, hookCtx.SecuritySource) { } + : base(hookCtx) { } } public class AfterSuccessContext : HookContext { public AfterSuccessContext(HookContext hookCtx) - : base(hookCtx.BaseURL, hookCtx.OperationID, hookCtx.Oauth2Scopes, hookCtx.SecuritySource) { } + : base(hookCtx) { } } public class AfterErrorContext : HookContext { public AfterErrorContext(HookContext hookCtx) - : base(hookCtx.BaseURL, hookCtx.OperationID, hookCtx.Oauth2Scopes, hookCtx.SecuritySource) { } + : base(hookCtx) { } } /// diff --git a/LukeHagar/PlexAPI/SDK/Hooks/SDKHooks.cs b/LukeHagar/PlexAPI/SDK/Hooks/SDKHooks.cs index 9f996d7..9ed7c5f 100644 --- a/LukeHagar/PlexAPI/SDK/Hooks/SDKHooks.cs +++ b/LukeHagar/PlexAPI/SDK/Hooks/SDKHooks.cs @@ -52,7 +52,7 @@ namespace LukeHagar.PlexAPI.SDK.Hooks { this.afterErrorHooks.Add(hook); } - + public (string, ISpeakeasyHttpClient) SDKInit(string baseUrl, ISpeakeasyHttpClient client) { var urlAndClient = (baseUrl, client); @@ -68,7 +68,7 @@ namespace LukeHagar.PlexAPI.SDK.Hooks } return urlAndClient; } - + public async Task BeforeRequestAsync(BeforeRequestContext hookCtx, HttpRequestMessage request) { foreach (var hook in this.beforeRequestHooks) diff --git a/LukeHagar/PlexAPI/SDK/Hubs.cs b/LukeHagar/PlexAPI/SDK/Hubs.cs index 24a8eb5..316d6ce 100644 --- a/LukeHagar/PlexAPI/SDK/Hubs.cs +++ b/LukeHagar/PlexAPI/SDK/Hubs.cs @@ -73,19 +73,12 @@ namespace LukeHagar.PlexAPI.SDK { public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.14.11"; - private const string _sdkGenVersion = "2.597.9"; + private const string _sdkVersion = "0.15.0"; + private const string _sdkGenVersion = "2.620.2"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.14.11 2.597.9 0.0.3 LukeHagar.PlexAPI.SDK"; - private string _serverUrl = ""; - private ISpeakeasyHttpClient _client; - private Func? _securitySource; - public Hubs(ISpeakeasyHttpClient client, Func? securitySource, string serverUrl, SDKConfig config) + public Hubs(SDKConfig config) { - _client = client; - _securitySource = securitySource; - _serverUrl = serverUrl; SDKConfiguration = config; } @@ -100,21 +93,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/hubs", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getGlobalHubs", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getGlobalHubs", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -200,21 +193,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/hubs/home/recentlyAdded", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "get-recently-added", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "get-recently-added", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -284,21 +277,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/hubs/sections/{sectionId}", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getLibraryHubs", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getLibraryHubs", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) diff --git a/LukeHagar/PlexAPI/SDK/Library.cs b/LukeHagar/PlexAPI/SDK/Library.cs index 4251735..9e12963 100644 --- a/LukeHagar/PlexAPI/SDK/Library.cs +++ b/LukeHagar/PlexAPI/SDK/Library.cs @@ -154,14 +154,14 @@ namespace LukeHagar.PlexAPI.SDK Task GetLibraryItemsAsync(GetLibraryItemsRequest request); /// - /// Get all media of library + /// Get Library section media by tag ALL /// /// /// Retrieves a list of all general media data for this library.
/// ///
///
- Task GetAllMediaLibraryAsync(GetAllMediaLibraryRequest request); + Task GetLibrarySectionsAllAsync(GetLibrarySectionsAllRequest request); /// /// Refresh Metadata Of The Library @@ -244,7 +244,8 @@ namespace LukeHagar.PlexAPI.SDK /// Get Media Metadata /// /// - /// This endpoint will return all the (meta)data of a library item specified with by the ratingKey.
+ /// This endpoint will return all the (meta)data of one or more library items specified by the ratingKey.
+ /// Multiple rating keys can be provided as a comma-separated list (e.g., "21119,21617").
/// ///
///
@@ -304,7 +305,7 @@ namespace LukeHagar.PlexAPI.SDK /// /// ///
- Task GetTopWatchedContentAsync(GetTopWatchedContentQueryParamType type, long? includeGuids = null); + Task GetTopWatchedContentAsync(GetTopWatchedContentQueryParamType type, GetTopWatchedContentQueryParamIncludeGuids? includeGuids = LukeHagar.PlexAPI.SDK.Models.Requests.GetTopWatchedContentQueryParamIncludeGuids.Disable); } /// @@ -318,19 +319,12 @@ namespace LukeHagar.PlexAPI.SDK { public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.14.11"; - private const string _sdkGenVersion = "2.597.9"; + private const string _sdkVersion = "0.15.0"; + private const string _sdkGenVersion = "2.620.2"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.14.11 2.597.9 0.0.3 LukeHagar.PlexAPI.SDK"; - private string _serverUrl = ""; - private ISpeakeasyHttpClient _client; - private Func? _securitySource; - public Library(ISpeakeasyHttpClient client, Func? securitySource, string serverUrl, SDKConfig config) + public Library(SDKConfig config) { - _client = client; - _securitySource = securitySource; - _serverUrl = serverUrl; SDKConfiguration = config; } @@ -345,21 +339,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/library/hashes", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getFileHash", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getFileHash", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -437,21 +431,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/library/recentlyAdded", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "get-recently-added-library", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "get-recently-added-library", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -538,21 +532,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = baseUrl + "/library/sections"; var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "get-all-libraries", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "get-all-libraries", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -643,21 +637,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionKey}", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "get-library-details", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "get-library-details", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -747,21 +741,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionKey}", request); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "deleteLibrary", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "deleteLibrary", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -839,21 +833,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionKey}/{tag}", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "get-library-items", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "get-library-items", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -933,27 +927,27 @@ namespace LukeHagar.PlexAPI.SDK throw new Models.Errors.SDKException("Unknown status code received", responseStatusCode, await httpResponse.Content.ReadAsStringAsync(), httpResponse); } - public async Task GetAllMediaLibraryAsync(GetAllMediaLibraryRequest request) + public async Task GetLibrarySectionsAllAsync(GetLibrarySectionsAllRequest request) { string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionKey}/all", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "get-all-media-library", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "get-library-sections-all", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode == 404 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -986,8 +980,8 @@ namespace LukeHagar.PlexAPI.SDK { if(Utilities.IsContentTypeMatch("application/json", contentType)) { - var obj = ResponseBodyDeserializer.Deserialize(await httpResponse.Content.ReadAsStringAsync(), NullValueHandling.Ignore); - var response = new GetAllMediaLibraryResponse() + var obj = ResponseBodyDeserializer.Deserialize(await httpResponse.Content.ReadAsStringAsync(), NullValueHandling.Ignore); + var response = new GetLibrarySectionsAllResponse() { StatusCode = responseStatusCode, ContentType = contentType, @@ -1003,7 +997,7 @@ namespace LukeHagar.PlexAPI.SDK { if(Utilities.IsContentTypeMatch("application/json", contentType)) { - var obj = ResponseBodyDeserializer.Deserialize(await httpResponse.Content.ReadAsStringAsync(), NullValueHandling.Ignore); + var obj = ResponseBodyDeserializer.Deserialize(await httpResponse.Content.ReadAsStringAsync(), NullValueHandling.Ignore); obj!.RawResponse = httpResponse; throw obj!; } @@ -1014,7 +1008,7 @@ namespace LukeHagar.PlexAPI.SDK { if(Utilities.IsContentTypeMatch("application/json", contentType)) { - var obj = ResponseBodyDeserializer.Deserialize(await httpResponse.Content.ReadAsStringAsync(), NullValueHandling.Ignore); + var obj = ResponseBodyDeserializer.Deserialize(await httpResponse.Content.ReadAsStringAsync(), NullValueHandling.Ignore); obj!.RawResponse = httpResponse; throw obj!; } @@ -1044,21 +1038,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionKey}/refresh", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "get-refresh-library-metadata", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "get-refresh-library-metadata", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -1141,21 +1135,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionKey}/search", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "get-search-library", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "get-search-library", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -1246,21 +1240,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionKey}/genre", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "get-genres-library", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "get-genres-library", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode == 404 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -1351,21 +1345,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionKey}/country", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "get-countries-library", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "get-countries-library", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode == 404 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -1456,21 +1450,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionKey}/actor", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "get-actors-library", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "get-actors-library", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode == 404 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -1556,22 +1550,22 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/library/search", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); HeaderSerializer.PopulateHeaders(ref httpRequest, request); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "get-search-all-libraries", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "get-search-all-libraries", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -1657,21 +1651,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ratingKey}", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "get-media-meta-data", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "get-media-meta-data", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode == 404 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -1761,21 +1755,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ratingKey}/arts", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "get-media-arts", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "get-media-arts", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 404 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -1845,7 +1839,7 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ratingKey}/arts", request); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); var serializedBody = RequestBodySerializer.Serialize(request, "RequestBody", "raw", false, true); if (serializedBody != null) @@ -1853,19 +1847,19 @@ namespace LukeHagar.PlexAPI.SDK httpRequest.Content = serializedBody; } - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "post-media-arts", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "post-media-arts", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 404 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -1925,21 +1919,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ratingKey}/posters", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "get-media-posters", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "get-media-posters", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 404 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -2009,7 +2003,7 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ratingKey}/posters", request); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); var serializedBody = RequestBodySerializer.Serialize(request, "RequestBody", "raw", false, true); if (serializedBody != null) @@ -2017,19 +2011,19 @@ namespace LukeHagar.PlexAPI.SDK httpRequest.Content = serializedBody; } - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "post-media-poster", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "post-media-poster", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 404 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -2090,21 +2084,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ratingKey}/children", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getMetadataChildren", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getMetadataChildren", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -2184,7 +2178,7 @@ namespace LukeHagar.PlexAPI.SDK throw new Models.Errors.SDKException("Unknown status code received", responseStatusCode, await httpResponse.Content.ReadAsStringAsync(), httpResponse); } - public async Task GetTopWatchedContentAsync(GetTopWatchedContentQueryParamType type, long? includeGuids = null) + public async Task GetTopWatchedContentAsync(GetTopWatchedContentQueryParamType type, GetTopWatchedContentQueryParamIncludeGuids? includeGuids = LukeHagar.PlexAPI.SDK.Models.Requests.GetTopWatchedContentQueryParamIncludeGuids.Disable) { var request = new GetTopWatchedContentRequest() { @@ -2195,21 +2189,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/library/all/top", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getTopWatchedContent", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getTopWatchedContent", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) diff --git a/LukeHagar/PlexAPI/SDK/Log.cs b/LukeHagar/PlexAPI/SDK/Log.cs index 49bad62..d26ce58 100644 --- a/LukeHagar/PlexAPI/SDK/Log.cs +++ b/LukeHagar/PlexAPI/SDK/Log.cs @@ -94,19 +94,12 @@ namespace LukeHagar.PlexAPI.SDK { public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.14.11"; - private const string _sdkGenVersion = "2.597.9"; + private const string _sdkVersion = "0.15.0"; + private const string _sdkGenVersion = "2.620.2"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.14.11 2.597.9 0.0.3 LukeHagar.PlexAPI.SDK"; - private string _serverUrl = ""; - private ISpeakeasyHttpClient _client; - private Func? _securitySource; - public Log(ISpeakeasyHttpClient client, Func? securitySource, string serverUrl, SDKConfig config) + public Log(SDKConfig config) { - _client = client; - _securitySource = securitySource; - _serverUrl = serverUrl; SDKConfiguration = config; } @@ -122,21 +115,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/log", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "logLine", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "logLine", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -215,7 +208,7 @@ namespace LukeHagar.PlexAPI.SDK var urlString = baseUrl + "/log"; var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); var serializedBody = RequestBodySerializer.Serialize(request, "Request", "string", false, false); if (serializedBody != null) @@ -223,19 +216,19 @@ namespace LukeHagar.PlexAPI.SDK httpRequest.Content = serializedBody; } - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "logMultiLine", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "logMultiLine", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -314,21 +307,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = baseUrl + "/log/networked"; var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "enablePaperTrail", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "enablePaperTrail", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode == 403 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) diff --git a/LukeHagar/PlexAPI/SDK/LukeHagar.PlexAPI.SDK.csproj b/LukeHagar/PlexAPI/SDK/LukeHagar.PlexAPI.SDK.csproj index 8981286..f94da5a 100644 --- a/LukeHagar/PlexAPI/SDK/LukeHagar.PlexAPI.SDK.csproj +++ b/LukeHagar/PlexAPI/SDK/LukeHagar.PlexAPI.SDK.csproj @@ -3,7 +3,7 @@ true LukeHagar.PlexAPI.SDK - 0.14.11 + 0.15.0 net8.0 LukeHagar Copyright (c) LukeHagar 2025 diff --git a/LukeHagar/PlexAPI/SDK/Media.cs b/LukeHagar/PlexAPI/SDK/Media.cs index dcadaab..ab3f531 100644 --- a/LukeHagar/PlexAPI/SDK/Media.cs +++ b/LukeHagar/PlexAPI/SDK/Media.cs @@ -90,19 +90,12 @@ namespace LukeHagar.PlexAPI.SDK { public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.14.11"; - private const string _sdkGenVersion = "2.597.9"; + private const string _sdkVersion = "0.15.0"; + private const string _sdkGenVersion = "2.620.2"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.14.11 2.597.9 0.0.3 LukeHagar.PlexAPI.SDK"; - private string _serverUrl = ""; - private ISpeakeasyHttpClient _client; - private Func? _securitySource; - public Media(ISpeakeasyHttpClient client, Func? securitySource, string serverUrl, SDKConfig config) + public Media(SDKConfig config) { - _client = client; - _securitySource = securitySource; - _serverUrl = serverUrl; SDKConfiguration = config; } @@ -116,21 +109,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/:/scrobble", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "markPlayed", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "markPlayed", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -212,21 +205,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/:/unscrobble", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "markUnplayed", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "markUnplayed", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -310,21 +303,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/:/progress", request); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "updatePlayProgress", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "updatePlayProgress", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -402,22 +395,22 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ratingKey}/banner", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); HeaderSerializer.PopulateHeaders(ref httpRequest, request); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "get-banner-image", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "get-banner-image", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -502,22 +495,22 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ratingKey}/thumb", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); HeaderSerializer.PopulateHeaders(ref httpRequest, request); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "get-thumb-image", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "get-thumb-image", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) diff --git a/LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryBadRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Errors/GetLibrarySectionsAllBadRequest.cs similarity index 88% rename from LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryBadRequest.cs rename to LukeHagar/PlexAPI/SDK/Models/Errors/GetLibrarySectionsAllBadRequest.cs index f227aad..b0755a4 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryBadRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Errors/GetLibrarySectionsAllBadRequest.cs @@ -19,11 +19,11 @@ namespace LukeHagar.PlexAPI.SDK.Models.Errors /// /// Bad Request - A parameter was not specified, or was specified incorrectly. /// - public class GetAllMediaLibraryBadRequest : Exception + public class GetLibrarySectionsAllBadRequest : Exception { [JsonProperty("errors")] - public List? Errors { get; set; } + public List? Errors { get; set; } /// /// Raw HTTP response; suitable for custom response parsing diff --git a/LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryErrors.cs b/LukeHagar/PlexAPI/SDK/Models/Errors/GetLibrarySectionsAllErrors.cs similarity index 94% rename from LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryErrors.cs rename to LukeHagar/PlexAPI/SDK/Models/Errors/GetLibrarySectionsAllErrors.cs index e2d6c42..b600d9a 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryErrors.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Errors/GetLibrarySectionsAllErrors.cs @@ -12,7 +12,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Errors using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; - public class GetAllMediaLibraryErrors + public class GetLibrarySectionsAllErrors { [JsonProperty("code")] diff --git a/LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryLibraryErrors.cs b/LukeHagar/PlexAPI/SDK/Models/Errors/GetLibrarySectionsAllLibraryErrors.cs similarity index 93% rename from LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryLibraryErrors.cs rename to LukeHagar/PlexAPI/SDK/Models/Errors/GetLibrarySectionsAllLibraryErrors.cs index 0cc361e..d05a1cd 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryLibraryErrors.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Errors/GetLibrarySectionsAllLibraryErrors.cs @@ -12,7 +12,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Errors using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; - public class GetAllMediaLibraryLibraryErrors + public class GetLibrarySectionsAllLibraryErrors { [JsonProperty("code")] diff --git a/LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryUnauthorized.cs b/LukeHagar/PlexAPI/SDK/Models/Errors/GetLibrarySectionsAllUnauthorized.cs similarity index 87% rename from LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryUnauthorized.cs rename to LukeHagar/PlexAPI/SDK/Models/Errors/GetLibrarySectionsAllUnauthorized.cs index 7a13d52..8cf4827 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryUnauthorized.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Errors/GetLibrarySectionsAllUnauthorized.cs @@ -19,11 +19,11 @@ namespace LukeHagar.PlexAPI.SDK.Models.Errors /// /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query. /// - public class GetAllMediaLibraryUnauthorized : Exception + public class GetLibrarySectionsAllUnauthorized : Exception { [JsonProperty("errors")] - public List? Errors { get; set; } + public List? Errors { get; set; } /// /// Raw HTTP response; suitable for custom response parsing diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/Country.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/Country.cs index 2a52c96..e5ad4a2 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/Country.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/Country.cs @@ -18,6 +18,14 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public class Country { + /// + /// The unique identifier for the country.
+ /// + /// + /// NOTE: This is different for each Plex server and is not globally unique.
+ /// + ///
+ ///
[JsonProperty("id")] public int Id { get; set; } = default!; @@ -28,6 +36,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public string Tag { get; set; } = default!; [JsonProperty("filter")] - public string? Filter { get; set; } + public string Filter { get; set; } = default!; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/Director.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/Director.cs index be5c729..a5b5c8d 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/Director.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/Director.cs @@ -15,10 +15,34 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public class Director { + /// + /// Unique identifier for the director. + /// + [JsonProperty("id")] + public int Id { get; set; } = default!; + + /// + /// The filter string used to query this director. + /// + [JsonProperty("filter")] + public string Filter { get; set; } = default!; + /// /// The role of Director /// [JsonProperty("tag")] public string Tag { get; set; } = default!; + + /// + /// A unique 24-character hexadecimal key associated with the director's tag, used for internal identification. + /// + [JsonProperty("tagKey")] + public string TagKey { get; set; } = default!; + + /// + /// The absolute URL of the thumbnail image for the director. + /// + [JsonProperty("thumb")] + public string? Thumb { get; set; } } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/Genre.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/Genre.cs index af72836..718743c 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/Genre.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/Genre.cs @@ -18,8 +18,16 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public class Genre { + /// + /// The unique identifier for the genre.
+ /// + /// + /// NOTE: This is different for each Plex server and is not globally unique.
+ /// + ///
+ ///
[JsonProperty("id")] - public long Id { get; set; } = default!; + public int Id { get; set; } = default!; [JsonProperty("filter")] public string Filter { get; set; } = default!; diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetActorsLibraryQueryParamType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetActorsLibraryQueryParamType.cs index 7ab6f74..0ae699b 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetActorsLibraryQueryParamType.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetActorsLibraryQueryParamType.cs @@ -29,9 +29,11 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests TvShow = 2, Season = 3, Episode = 4, - Audio = 8, - Album = 9, - Track = 10, + Artist = 5, + Album = 6, + Track = 7, + PhotoAlbum = 8, + Photo = 9, } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllLibrariesType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllLibrariesType.cs index b0a286e..2673496 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllLibrariesType.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllLibrariesType.cs @@ -30,6 +30,14 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests Artist, [JsonProperty("album")] Album, + [JsonProperty("track")] + Track, + [JsonProperty("photoalbum")] + PhotoAlbum, + [JsonProperty("photo")] + Photo, + [JsonProperty("collection")] + Collection, } public static class GetAllLibrariesTypeExtension diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetCountriesLibraryQueryParamType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetCountriesLibraryQueryParamType.cs index dc7c91f..27dc1b8 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetCountriesLibraryQueryParamType.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetCountriesLibraryQueryParamType.cs @@ -29,9 +29,11 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests TvShow = 2, Season = 3, Episode = 4, - Audio = 8, - Album = 9, - Track = 10, + Artist = 5, + Album = 6, + Track = 7, + PhotoAlbum = 8, + Photo = 9, } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetGenresLibraryQueryParamType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetGenresLibraryQueryParamType.cs index d7872af..310f488 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetGenresLibraryQueryParamType.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetGenresLibraryQueryParamType.cs @@ -29,9 +29,11 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests TvShow = 2, Season = 3, Episode = 4, - Audio = 8, - Album = 9, - Track = 10, + Artist = 5, + Album = 6, + Track = 7, + PhotoAlbum = 8, + Photo = 9, } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsLibraryType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsLibraryType.cs index 2f9e8ba..92f8ca9 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsLibraryType.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsLibraryType.cs @@ -14,7 +14,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using System; /// - /// The type of media content
+ /// The type of media content in the Plex library. This can represent videos, music, or photos.
/// /// /// @@ -34,6 +34,14 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests Artist, [JsonProperty("album")] Album, + [JsonProperty("track")] + Track, + [JsonProperty("photoalbum")] + PhotoAlbum, + [JsonProperty("photo")] + Photo, + [JsonProperty("collection")] + Collection, } public static class GetLibraryItemsLibraryTypeExtension diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsMetadata.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsMetadata.cs index fb860f5..8bc34bd 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsMetadata.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsMetadata.cs @@ -51,7 +51,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public string? LibrarySectionKey { get; set; } /// - /// The type of media content
+ /// The type of media content in the Plex library. This can represent videos, music, or photos.
/// /// /// diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsQueryParamType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsQueryParamType.cs index 431927d..0a67f1e 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsQueryParamType.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsQueryParamType.cs @@ -29,9 +29,11 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests TvShow = 2, Season = 3, Episode = 4, - Audio = 8, - Album = 9, - Track = 10, + Artist = 5, + Album = 6, + Track = 7, + PhotoAlbum = 8, + Photo = 9, } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryActiveDirection.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllActiveDirection.cs similarity index 74% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryActiveDirection.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllActiveDirection.cs index 89ef0d0..77341ca 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryActiveDirection.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllActiveDirection.cs @@ -20,7 +20,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// /// ///
- public enum GetAllMediaLibraryActiveDirection + public enum GetLibrarySectionsAllActiveDirection { [JsonProperty("asc")] Ascending, @@ -28,16 +28,16 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests Descending, } - public static class GetAllMediaLibraryActiveDirectionExtension + public static class GetLibrarySectionsAllActiveDirectionExtension { - public static string Value(this GetAllMediaLibraryActiveDirection value) + public static string Value(this GetLibrarySectionsAllActiveDirection value) { return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString(); } - public static GetAllMediaLibraryActiveDirection ToEnum(this string value) + public static GetLibrarySectionsAllActiveDirection ToEnum(this string value) { - foreach(var field in typeof(GetAllMediaLibraryActiveDirection).GetFields()) + foreach(var field in typeof(GetLibrarySectionsAllActiveDirection).GetFields()) { var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false); if (attributes.Length == 0) @@ -50,14 +50,14 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests { var enumVal = field.GetValue(null); - if (enumVal is GetAllMediaLibraryActiveDirection) + if (enumVal is GetLibrarySectionsAllActiveDirection) { - return (GetAllMediaLibraryActiveDirection)enumVal; + return (GetLibrarySectionsAllActiveDirection)enumVal; } } } - throw new Exception($"Unknown value {value} for enum GetAllMediaLibraryActiveDirection"); + throw new Exception($"Unknown value {value} for enum GetLibrarySectionsAllActiveDirection"); } } diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryCollection.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllCollection.cs similarity index 93% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryCollection.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllCollection.cs index a69f5a5..ef8b79a 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryCollection.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllCollection.cs @@ -12,7 +12,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; - public class GetAllMediaLibraryCollection + public class GetLibrarySectionsAllCollection { /// diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryCountry.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllCountry.cs similarity index 93% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryCountry.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllCountry.cs index 63fbe60..928a163 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryCountry.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllCountry.cs @@ -12,7 +12,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; - public class GetAllMediaLibraryCountry + public class GetLibrarySectionsAllCountry { /// diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryDefaultDirection.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllDefaultDirection.cs similarity index 73% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryDefaultDirection.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllDefaultDirection.cs index 479d76e..8694287 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryDefaultDirection.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllDefaultDirection.cs @@ -20,7 +20,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// /// /// - public enum GetAllMediaLibraryDefaultDirection + public enum GetLibrarySectionsAllDefaultDirection { [JsonProperty("asc")] Ascending, @@ -28,16 +28,16 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests Descending, } - public static class GetAllMediaLibraryDefaultDirectionExtension + public static class GetLibrarySectionsAllDefaultDirectionExtension { - public static string Value(this GetAllMediaLibraryDefaultDirection value) + public static string Value(this GetLibrarySectionsAllDefaultDirection value) { return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString(); } - public static GetAllMediaLibraryDefaultDirection ToEnum(this string value) + public static GetLibrarySectionsAllDefaultDirection ToEnum(this string value) { - foreach(var field in typeof(GetAllMediaLibraryDefaultDirection).GetFields()) + foreach(var field in typeof(GetLibrarySectionsAllDefaultDirection).GetFields()) { var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false); if (attributes.Length == 0) @@ -50,14 +50,14 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests { var enumVal = field.GetValue(null); - if (enumVal is GetAllMediaLibraryDefaultDirection) + if (enumVal is GetLibrarySectionsAllDefaultDirection) { - return (GetAllMediaLibraryDefaultDirection)enumVal; + return (GetLibrarySectionsAllDefaultDirection)enumVal; } } } - throw new Exception($"Unknown value {value} for enum GetAllMediaLibraryDefaultDirection"); + throw new Exception($"Unknown value {value} for enum GetLibrarySectionsAllDefaultDirection"); } } diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryDirector.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllDirector.cs similarity index 93% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryDirector.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllDirector.cs index fae790a..67e9c20 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryDirector.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllDirector.cs @@ -12,7 +12,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; - public class GetAllMediaLibraryDirector + public class GetLibrarySectionsAllDirector { /// diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryField.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllField.cs similarity index 95% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryField.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllField.cs index fc704ab..6d59025 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryField.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllField.cs @@ -12,7 +12,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; - public class GetAllMediaLibraryField + public class GetLibrarySectionsAllField { [JsonProperty("key")] diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryFieldType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllFieldType.cs similarity index 84% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryFieldType.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllFieldType.cs index e8f4b4d..f26f992 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryFieldType.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllFieldType.cs @@ -14,13 +14,13 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using Newtonsoft.Json; using System.Collections.Generic; - public class GetAllMediaLibraryFieldType + public class GetLibrarySectionsAllFieldType { [JsonProperty("type")] public string Type { get; set; } = default!; [JsonProperty("Operator")] - public List Operator { get; set; } = default!; + public List Operator { get; set; } = default!; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryFilter.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllFilter.cs similarity index 95% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryFilter.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllFilter.cs index 9027b0e..1872115 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryFilter.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllFilter.cs @@ -12,7 +12,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; - public class GetAllMediaLibraryFilter + public class GetLibrarySectionsAllFilter { [JsonProperty("filter")] diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryGenre.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllGenre.cs similarity index 94% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryGenre.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllGenre.cs index 40a4209..4116d40 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryGenre.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllGenre.cs @@ -12,7 +12,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; - public class GetAllMediaLibraryGenre + public class GetLibrarySectionsAllGenre { /// diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryGuids.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllGuids.cs similarity index 77% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryGuids.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllGuids.cs index a821ca3..8cd5a1d 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryGuids.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllGuids.cs @@ -12,17 +12,17 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; - public class GetAllMediaLibraryGuids + public class GetLibrarySectionsAllGuids { /// - /// The unique identifier for the Guid. Can be imdb://tt0286347, tmdb://1763, tvdb://2337
+ /// The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb://
/// /// /// /// ///
[JsonProperty("id")] - public string? Id { get; set; } + public string Id { get; set; } = default!; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryHasThumbnail.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllHasThumbnail.cs similarity index 73% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryHasThumbnail.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllHasThumbnail.cs index 499a1c8..6f404e3 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryHasThumbnail.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllHasThumbnail.cs @@ -16,7 +16,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// /// Indicates if the part has a thumbnail. /// - public enum GetAllMediaLibraryHasThumbnail + public enum GetLibrarySectionsAllHasThumbnail { [JsonProperty("0")] False, @@ -24,16 +24,16 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests True, } - public static class GetAllMediaLibraryHasThumbnailExtension + public static class GetLibrarySectionsAllHasThumbnailExtension { - public static string Value(this GetAllMediaLibraryHasThumbnail value) + public static string Value(this GetLibrarySectionsAllHasThumbnail value) { return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString(); } - public static GetAllMediaLibraryHasThumbnail ToEnum(this string value) + public static GetLibrarySectionsAllHasThumbnail ToEnum(this string value) { - foreach(var field in typeof(GetAllMediaLibraryHasThumbnail).GetFields()) + foreach(var field in typeof(GetLibrarySectionsAllHasThumbnail).GetFields()) { var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false); if (attributes.Length == 0) @@ -46,14 +46,14 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests { var enumVal = field.GetValue(null); - if (enumVal is GetAllMediaLibraryHasThumbnail) + if (enumVal is GetLibrarySectionsAllHasThumbnail) { - return (GetAllMediaLibraryHasThumbnail)enumVal; + return (GetLibrarySectionsAllHasThumbnail)enumVal; } } } - throw new Exception($"Unknown value {value} for enum GetAllMediaLibraryHasThumbnail"); + throw new Exception($"Unknown value {value} for enum GetLibrarySectionsAllHasThumbnail"); } } diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryImage.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllImage.cs similarity index 85% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryImage.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllImage.cs index 93291f1..d0c43fc 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryImage.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllImage.cs @@ -13,14 +13,14 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; - public class GetAllMediaLibraryImage + public class GetLibrarySectionsAllImage { [JsonProperty("alt")] public string Alt { get; set; } = default!; [JsonProperty("type")] - public GetAllMediaLibraryLibraryResponseType Type { get; set; } = default!; + public GetLibrarySectionsAllLibraryResponseType Type { get; set; } = default!; [JsonProperty("url")] public string Url { get; set; } = default!; diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryLibraryOptimizedForStreaming.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllLibraryOptimizedForStreaming.cs similarity index 51% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryLibraryOptimizedForStreaming.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllLibraryOptimizedForStreaming.cs index c5eecc5..ffdf4e9 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryLibraryOptimizedForStreaming.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllLibraryOptimizedForStreaming.cs @@ -19,25 +19,25 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using System.Reflection; - public class GetAllMediaLibraryLibraryOptimizedForStreamingType + public class GetLibrarySectionsAllLibraryOptimizedForStreamingType { - private GetAllMediaLibraryLibraryOptimizedForStreamingType(string value) { Value = value; } + private GetLibrarySectionsAllLibraryOptimizedForStreamingType(string value) { Value = value; } public string Value { get; private set; } - public static GetAllMediaLibraryLibraryOptimizedForStreamingType GetAllMediaLibraryOptimizedForStreaming1 { get { return new GetAllMediaLibraryLibraryOptimizedForStreamingType("get-all-media-library_optimizedForStreaming_1"); } } + public static GetLibrarySectionsAllLibraryOptimizedForStreamingType GetLibrarySectionsAllOptimizedForStreaming1 { get { return new GetLibrarySectionsAllLibraryOptimizedForStreamingType("get-library-sections-all_optimizedForStreaming_1"); } } - public static GetAllMediaLibraryLibraryOptimizedForStreamingType Boolean { get { return new GetAllMediaLibraryLibraryOptimizedForStreamingType("boolean"); } } + public static GetLibrarySectionsAllLibraryOptimizedForStreamingType Boolean { get { return new GetLibrarySectionsAllLibraryOptimizedForStreamingType("boolean"); } } - public static GetAllMediaLibraryLibraryOptimizedForStreamingType Null { get { return new GetAllMediaLibraryLibraryOptimizedForStreamingType("null"); } } + public static GetLibrarySectionsAllLibraryOptimizedForStreamingType Null { get { return new GetLibrarySectionsAllLibraryOptimizedForStreamingType("null"); } } public override string ToString() { return Value; } - public static implicit operator String(GetAllMediaLibraryLibraryOptimizedForStreamingType v) { return v.Value; } - public static GetAllMediaLibraryLibraryOptimizedForStreamingType FromString(string v) { + public static implicit operator String(GetLibrarySectionsAllLibraryOptimizedForStreamingType v) { return v.Value; } + public static GetLibrarySectionsAllLibraryOptimizedForStreamingType FromString(string v) { switch(v) { - case "get-all-media-library_optimizedForStreaming_1": return GetAllMediaLibraryOptimizedForStreaming1; + case "get-library-sections-all_optimizedForStreaming_1": return GetLibrarySectionsAllOptimizedForStreaming1; case "boolean": return Boolean; case "null": return Null; - default: throw new ArgumentException("Invalid value for GetAllMediaLibraryLibraryOptimizedForStreamingType"); + default: throw new ArgumentException("Invalid value for GetLibrarySectionsAllLibraryOptimizedForStreamingType"); } } public override bool Equals(object? obj) @@ -46,7 +46,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests { return false; } - return Value.Equals(((GetAllMediaLibraryLibraryOptimizedForStreamingType)obj).Value); + return Value.Equals(((GetLibrarySectionsAllLibraryOptimizedForStreamingType)obj).Value); } public override int GetHashCode() @@ -59,46 +59,46 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// /// Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true /// - [JsonConverter(typeof(GetAllMediaLibraryLibraryOptimizedForStreaming.GetAllMediaLibraryLibraryOptimizedForStreamingConverter))] - public class GetAllMediaLibraryLibraryOptimizedForStreaming { - public GetAllMediaLibraryLibraryOptimizedForStreaming(GetAllMediaLibraryLibraryOptimizedForStreamingType type) { + [JsonConverter(typeof(GetLibrarySectionsAllLibraryOptimizedForStreaming.GetLibrarySectionsAllLibraryOptimizedForStreamingConverter))] + public class GetLibrarySectionsAllLibraryOptimizedForStreaming { + public GetLibrarySectionsAllLibraryOptimizedForStreaming(GetLibrarySectionsAllLibraryOptimizedForStreamingType type) { Type = type; } [SpeakeasyMetadata("form:explode=true")] - public GetAllMediaLibraryOptimizedForStreaming1? GetAllMediaLibraryOptimizedForStreaming1 { get; set; } + public GetLibrarySectionsAllOptimizedForStreaming1? GetLibrarySectionsAllOptimizedForStreaming1 { get; set; } [SpeakeasyMetadata("form:explode=true")] public bool? Boolean { get; set; } - public GetAllMediaLibraryLibraryOptimizedForStreamingType Type { get; set; } + public GetLibrarySectionsAllLibraryOptimizedForStreamingType Type { get; set; } - public static GetAllMediaLibraryLibraryOptimizedForStreaming CreateGetAllMediaLibraryOptimizedForStreaming1(GetAllMediaLibraryOptimizedForStreaming1 getAllMediaLibraryOptimizedForStreaming1) { - GetAllMediaLibraryLibraryOptimizedForStreamingType typ = GetAllMediaLibraryLibraryOptimizedForStreamingType.GetAllMediaLibraryOptimizedForStreaming1; + public static GetLibrarySectionsAllLibraryOptimizedForStreaming CreateGetLibrarySectionsAllOptimizedForStreaming1(GetLibrarySectionsAllOptimizedForStreaming1 getLibrarySectionsAllOptimizedForStreaming1) { + GetLibrarySectionsAllLibraryOptimizedForStreamingType typ = GetLibrarySectionsAllLibraryOptimizedForStreamingType.GetLibrarySectionsAllOptimizedForStreaming1; - GetAllMediaLibraryLibraryOptimizedForStreaming res = new GetAllMediaLibraryLibraryOptimizedForStreaming(typ); - res.GetAllMediaLibraryOptimizedForStreaming1 = getAllMediaLibraryOptimizedForStreaming1; + GetLibrarySectionsAllLibraryOptimizedForStreaming res = new GetLibrarySectionsAllLibraryOptimizedForStreaming(typ); + res.GetLibrarySectionsAllOptimizedForStreaming1 = getLibrarySectionsAllOptimizedForStreaming1; return res; } - public static GetAllMediaLibraryLibraryOptimizedForStreaming CreateBoolean(bool boolean) { - GetAllMediaLibraryLibraryOptimizedForStreamingType typ = GetAllMediaLibraryLibraryOptimizedForStreamingType.Boolean; + public static GetLibrarySectionsAllLibraryOptimizedForStreaming CreateBoolean(bool boolean) { + GetLibrarySectionsAllLibraryOptimizedForStreamingType typ = GetLibrarySectionsAllLibraryOptimizedForStreamingType.Boolean; - GetAllMediaLibraryLibraryOptimizedForStreaming res = new GetAllMediaLibraryLibraryOptimizedForStreaming(typ); + GetLibrarySectionsAllLibraryOptimizedForStreaming res = new GetLibrarySectionsAllLibraryOptimizedForStreaming(typ); res.Boolean = boolean; return res; } - public static GetAllMediaLibraryLibraryOptimizedForStreaming CreateNull() { - GetAllMediaLibraryLibraryOptimizedForStreamingType typ = GetAllMediaLibraryLibraryOptimizedForStreamingType.Null; - return new GetAllMediaLibraryLibraryOptimizedForStreaming(typ); + public static GetLibrarySectionsAllLibraryOptimizedForStreaming CreateNull() { + GetLibrarySectionsAllLibraryOptimizedForStreamingType typ = GetLibrarySectionsAllLibraryOptimizedForStreamingType.Null; + return new GetLibrarySectionsAllLibraryOptimizedForStreaming(typ); } - public class GetAllMediaLibraryLibraryOptimizedForStreamingConverter : JsonConverter + public class GetLibrarySectionsAllLibraryOptimizedForStreamingConverter : JsonConverter { - public override bool CanConvert(System.Type objectType) => objectType == typeof(GetAllMediaLibraryLibraryOptimizedForStreaming); + public override bool CanConvert(System.Type objectType) => objectType == typeof(GetLibrarySectionsAllLibraryOptimizedForStreaming); public override bool CanRead => true; @@ -114,14 +114,14 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests try { - return new GetAllMediaLibraryLibraryOptimizedForStreaming(GetAllMediaLibraryLibraryOptimizedForStreamingType.GetAllMediaLibraryOptimizedForStreaming1) + return new GetLibrarySectionsAllLibraryOptimizedForStreaming(GetLibrarySectionsAllLibraryOptimizedForStreamingType.GetLibrarySectionsAllOptimizedForStreaming1) { - GetAllMediaLibraryOptimizedForStreaming1 = ResponseBodyDeserializer.DeserializeUndiscriminatedUnionMember(json) + GetLibrarySectionsAllOptimizedForStreaming1 = ResponseBodyDeserializer.DeserializeUndiscriminatedUnionMember(json) }; } catch (ResponseBodyDeserializer.MissingMemberException) { - fallbackCandidates.Add((typeof(GetAllMediaLibraryOptimizedForStreaming1), new GetAllMediaLibraryLibraryOptimizedForStreaming(GetAllMediaLibraryLibraryOptimizedForStreamingType.GetAllMediaLibraryOptimizedForStreaming1), "GetAllMediaLibraryOptimizedForStreaming1")); + fallbackCandidates.Add((typeof(GetLibrarySectionsAllOptimizedForStreaming1), new GetLibrarySectionsAllLibraryOptimizedForStreaming(GetLibrarySectionsAllLibraryOptimizedForStreamingType.GetLibrarySectionsAllOptimizedForStreaming1), "GetLibrarySectionsAllOptimizedForStreaming1")); } catch (ResponseBodyDeserializer.DeserializationException) { @@ -135,7 +135,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests try { var converted = Convert.ToBoolean(json); - return new GetAllMediaLibraryLibraryOptimizedForStreaming(GetAllMediaLibraryLibraryOptimizedForStreamingType.Boolean) + return new GetLibrarySectionsAllLibraryOptimizedForStreaming(GetLibrarySectionsAllLibraryOptimizedForStreamingType.Boolean) { Boolean = converted }; @@ -174,15 +174,15 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests writer.WriteRawValue("null"); return; } - GetAllMediaLibraryLibraryOptimizedForStreaming res = (GetAllMediaLibraryLibraryOptimizedForStreaming)value; - if (GetAllMediaLibraryLibraryOptimizedForStreamingType.FromString(res.Type).Equals(GetAllMediaLibraryLibraryOptimizedForStreamingType.Null)) + GetLibrarySectionsAllLibraryOptimizedForStreaming res = (GetLibrarySectionsAllLibraryOptimizedForStreaming)value; + if (GetLibrarySectionsAllLibraryOptimizedForStreamingType.FromString(res.Type).Equals(GetLibrarySectionsAllLibraryOptimizedForStreamingType.Null)) { writer.WriteRawValue("null"); return; } - if (res.GetAllMediaLibraryOptimizedForStreaming1 != null) + if (res.GetLibrarySectionsAllOptimizedForStreaming1 != null) { - writer.WriteRawValue(Utilities.SerializeJSON(res.GetAllMediaLibraryOptimizedForStreaming1)); + writer.WriteRawValue(Utilities.SerializeJSON(res.GetLibrarySectionsAllOptimizedForStreaming1)); return; } if (res.Boolean != null) diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryLibraryResponseType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllLibraryResponseType.cs similarity index 72% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryLibraryResponseType.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllLibraryResponseType.cs index b7341cc..e6dc084 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryLibraryResponseType.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllLibraryResponseType.cs @@ -13,7 +13,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using Newtonsoft.Json; using System; - public enum GetAllMediaLibraryLibraryResponseType + public enum GetLibrarySectionsAllLibraryResponseType { [JsonProperty("coverPoster")] CoverPoster, @@ -25,16 +25,16 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests ClearLogo, } - public static class GetAllMediaLibraryLibraryResponseTypeExtension + public static class GetLibrarySectionsAllLibraryResponseTypeExtension { - public static string Value(this GetAllMediaLibraryLibraryResponseType value) + public static string Value(this GetLibrarySectionsAllLibraryResponseType value) { return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString(); } - public static GetAllMediaLibraryLibraryResponseType ToEnum(this string value) + public static GetLibrarySectionsAllLibraryResponseType ToEnum(this string value) { - foreach(var field in typeof(GetAllMediaLibraryLibraryResponseType).GetFields()) + foreach(var field in typeof(GetLibrarySectionsAllLibraryResponseType).GetFields()) { var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false); if (attributes.Length == 0) @@ -47,14 +47,14 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests { var enumVal = field.GetValue(null); - if (enumVal is GetAllMediaLibraryLibraryResponseType) + if (enumVal is GetLibrarySectionsAllLibraryResponseType) { - return (GetAllMediaLibraryLibraryResponseType)enumVal; + return (GetLibrarySectionsAllLibraryResponseType)enumVal; } } } - throw new Exception($"Unknown value {value} for enum GetAllMediaLibraryLibraryResponseType"); + throw new Exception($"Unknown value {value} for enum GetLibrarySectionsAllLibraryResponseType"); } } diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryLibraryType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllLibraryType.cs similarity index 67% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryLibraryType.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllLibraryType.cs index 35e11d6..ee5d1e5 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryLibraryType.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllLibraryType.cs @@ -14,13 +14,13 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using System; /// - /// The type of media content
+ /// The type of media content in the Plex library. This can represent videos, music, or photos.
/// /// /// /// ///
- public enum GetAllMediaLibraryLibraryType + public enum GetLibrarySectionsAllLibraryType { [JsonProperty("movie")] Movie, @@ -34,18 +34,26 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests Artist, [JsonProperty("album")] Album, + [JsonProperty("track")] + Track, + [JsonProperty("photoalbum")] + PhotoAlbum, + [JsonProperty("photo")] + Photo, + [JsonProperty("collection")] + Collection, } - public static class GetAllMediaLibraryLibraryTypeExtension + public static class GetLibrarySectionsAllLibraryTypeExtension { - public static string Value(this GetAllMediaLibraryLibraryType value) + public static string Value(this GetLibrarySectionsAllLibraryType value) { return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString(); } - public static GetAllMediaLibraryLibraryType ToEnum(this string value) + public static GetLibrarySectionsAllLibraryType ToEnum(this string value) { - foreach(var field in typeof(GetAllMediaLibraryLibraryType).GetFields()) + foreach(var field in typeof(GetLibrarySectionsAllLibraryType).GetFields()) { var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false); if (attributes.Length == 0) @@ -58,14 +66,14 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests { var enumVal = field.GetValue(null); - if (enumVal is GetAllMediaLibraryLibraryType) + if (enumVal is GetLibrarySectionsAllLibraryType) { - return (GetAllMediaLibraryLibraryType)enumVal; + return (GetLibrarySectionsAllLibraryType)enumVal; } } } - throw new Exception($"Unknown value {value} for enum GetAllMediaLibraryLibraryType"); + throw new Exception($"Unknown value {value} for enum GetLibrarySectionsAllLibraryType"); } } diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMedia.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllMedia.cs similarity index 94% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMedia.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllMedia.cs index b07fb58..b7d4822 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMedia.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllMedia.cs @@ -15,7 +15,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using Newtonsoft.Json; using System.Collections.Generic; - public class GetAllMediaLibraryMedia + public class GetLibrarySectionsAllMedia { /// @@ -119,7 +119,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true /// [JsonProperty("optimizedForStreaming")] - public GetAllMediaLibraryOptimizedForStreaming? OptimizedForStreaming { get; set; } + public GetLibrarySectionsAllOptimizedForStreaming? OptimizedForStreaming { get; set; } [JsonProperty("has64bitOffsets")] public bool? Has64bitOffsets { get; set; } @@ -128,6 +128,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// An array of parts for this media item. ///
[JsonProperty("Part")] - public List? Part { get; set; } + public List? Part { get; set; } } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMediaContainer.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllMediaContainer.cs similarity index 95% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMediaContainer.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllMediaContainer.cs index 3afe72c..42e1b8d 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMediaContainer.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllMediaContainer.cs @@ -14,7 +14,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using Newtonsoft.Json; using System.Collections.Generic; - public class GetAllMediaLibraryMediaContainer + public class GetLibrarySectionsAllMediaContainer { /// @@ -127,12 +127,12 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// /// [JsonProperty("Meta")] - public GetAllMediaLibraryMeta? Meta { get; set; } + public GetLibrarySectionsAllMeta? Meta { get; set; } /// /// An array of metadata items. /// [JsonProperty("Metadata")] - public List? Metadata { get; set; } + public List? Metadata { get; set; } } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMeta.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllMeta.cs similarity index 82% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMeta.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllMeta.cs index aa2e2f3..d4742d5 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMeta.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllMeta.cs @@ -21,13 +21,13 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// /// ///
- public class GetAllMediaLibraryMeta + public class GetLibrarySectionsAllMeta { [JsonProperty("Type")] - public List? Type { get; set; } + public List? Type { get; set; } [JsonProperty("FieldType")] - public List? FieldType { get; set; } + public List? FieldType { get; set; } } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMetadata.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllMetadata.cs similarity index 93% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMetadata.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllMetadata.cs index 00a105b..5988901 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMetadata.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllMetadata.cs @@ -22,7 +22,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// /// ///
- public class GetAllMediaLibraryMetadata + public class GetLibrarySectionsAllMetadata { /// @@ -56,7 +56,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public string? Studio { get; set; } [JsonProperty("type")] - public GetAllMediaLibraryLibraryType Type { get; set; } = default!; + public GetLibrarySectionsAllLibraryType Type { get; set; } = default!; /// /// The title of the media item. @@ -344,33 +344,33 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public float? UserRating { get; set; } [JsonProperty("Image")] - public List? Image { get; set; } + public List? Image { get; set; } [JsonProperty("UltraBlurColors")] - public GetAllMediaLibraryUltraBlurColors? UltraBlurColors { get; set; } - - [JsonProperty("Media")] - public List? Media { get; set; } - - [JsonProperty("Genre")] - public List? Genre { get; set; } - - [JsonProperty("Country")] - public List? Country { get; set; } - - [JsonProperty("Director")] - public List? Director { get; set; } - - [JsonProperty("Writer")] - public List? Writer { get; set; } - - [JsonProperty("Role")] - public List? Role { get; set; } + public GetLibrarySectionsAllUltraBlurColors? UltraBlurColors { get; set; } [JsonProperty("Guid")] - public List? Guids { get; set; } + public List? Guids { get; set; } + + [JsonProperty("Media")] + public List? Media { get; set; } + + [JsonProperty("Genre")] + public List? Genre { get; set; } + + [JsonProperty("Country")] + public List? Country { get; set; } + + [JsonProperty("Director")] + public List? Director { get; set; } + + [JsonProperty("Writer")] + public List? Writer { get; set; } + + [JsonProperty("Role")] + public List? Role { get; set; } [JsonProperty("Collection")] - public List? Collection { get; set; } + public List? Collection { get; set; } } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryOperator.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllOperator.cs similarity index 93% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryOperator.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllOperator.cs index 2cc2573..40b6081 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryOperator.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllOperator.cs @@ -12,7 +12,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; - public class GetAllMediaLibraryOperator + public class GetLibrarySectionsAllOperator { [JsonProperty("key")] diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryOptimizedForStreaming.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllOptimizedForStreaming.cs similarity index 62% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryOptimizedForStreaming.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllOptimizedForStreaming.cs index 6a74ed3..217f5f7 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryOptimizedForStreaming.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllOptimizedForStreaming.cs @@ -19,25 +19,25 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using System.Reflection; - public class GetAllMediaLibraryOptimizedForStreamingType + public class GetLibrarySectionsAllOptimizedForStreamingType { - private GetAllMediaLibraryOptimizedForStreamingType(string value) { Value = value; } + private GetLibrarySectionsAllOptimizedForStreamingType(string value) { Value = value; } public string Value { get; private set; } - public static GetAllMediaLibraryOptimizedForStreamingType OptimizedForStreaming1 { get { return new GetAllMediaLibraryOptimizedForStreamingType("optimizedForStreaming_1"); } } + public static GetLibrarySectionsAllOptimizedForStreamingType OptimizedForStreaming1 { get { return new GetLibrarySectionsAllOptimizedForStreamingType("optimizedForStreaming_1"); } } - public static GetAllMediaLibraryOptimizedForStreamingType Boolean { get { return new GetAllMediaLibraryOptimizedForStreamingType("boolean"); } } + public static GetLibrarySectionsAllOptimizedForStreamingType Boolean { get { return new GetLibrarySectionsAllOptimizedForStreamingType("boolean"); } } - public static GetAllMediaLibraryOptimizedForStreamingType Null { get { return new GetAllMediaLibraryOptimizedForStreamingType("null"); } } + public static GetLibrarySectionsAllOptimizedForStreamingType Null { get { return new GetLibrarySectionsAllOptimizedForStreamingType("null"); } } public override string ToString() { return Value; } - public static implicit operator String(GetAllMediaLibraryOptimizedForStreamingType v) { return v.Value; } - public static GetAllMediaLibraryOptimizedForStreamingType FromString(string v) { + public static implicit operator String(GetLibrarySectionsAllOptimizedForStreamingType v) { return v.Value; } + public static GetLibrarySectionsAllOptimizedForStreamingType FromString(string v) { switch(v) { case "optimizedForStreaming_1": return OptimizedForStreaming1; case "boolean": return Boolean; case "null": return Null; - default: throw new ArgumentException("Invalid value for GetAllMediaLibraryOptimizedForStreamingType"); + default: throw new ArgumentException("Invalid value for GetLibrarySectionsAllOptimizedForStreamingType"); } } public override bool Equals(object? obj) @@ -46,7 +46,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests { return false; } - return Value.Equals(((GetAllMediaLibraryOptimizedForStreamingType)obj).Value); + return Value.Equals(((GetLibrarySectionsAllOptimizedForStreamingType)obj).Value); } public override int GetHashCode() @@ -59,9 +59,9 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// /// Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true /// - [JsonConverter(typeof(GetAllMediaLibraryOptimizedForStreaming.GetAllMediaLibraryOptimizedForStreamingConverter))] - public class GetAllMediaLibraryOptimizedForStreaming { - public GetAllMediaLibraryOptimizedForStreaming(GetAllMediaLibraryOptimizedForStreamingType type) { + [JsonConverter(typeof(GetLibrarySectionsAllOptimizedForStreaming.GetLibrarySectionsAllOptimizedForStreamingConverter))] + public class GetLibrarySectionsAllOptimizedForStreaming { + public GetLibrarySectionsAllOptimizedForStreaming(GetLibrarySectionsAllOptimizedForStreamingType type) { Type = type; } @@ -71,34 +71,34 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests [SpeakeasyMetadata("form:explode=true")] public bool? Boolean { get; set; } - public GetAllMediaLibraryOptimizedForStreamingType Type { get; set; } + public GetLibrarySectionsAllOptimizedForStreamingType Type { get; set; } - public static GetAllMediaLibraryOptimizedForStreaming CreateOptimizedForStreaming1(OptimizedForStreaming1 optimizedForStreaming1) { - GetAllMediaLibraryOptimizedForStreamingType typ = GetAllMediaLibraryOptimizedForStreamingType.OptimizedForStreaming1; + public static GetLibrarySectionsAllOptimizedForStreaming CreateOptimizedForStreaming1(OptimizedForStreaming1 optimizedForStreaming1) { + GetLibrarySectionsAllOptimizedForStreamingType typ = GetLibrarySectionsAllOptimizedForStreamingType.OptimizedForStreaming1; - GetAllMediaLibraryOptimizedForStreaming res = new GetAllMediaLibraryOptimizedForStreaming(typ); + GetLibrarySectionsAllOptimizedForStreaming res = new GetLibrarySectionsAllOptimizedForStreaming(typ); res.OptimizedForStreaming1 = optimizedForStreaming1; return res; } - public static GetAllMediaLibraryOptimizedForStreaming CreateBoolean(bool boolean) { - GetAllMediaLibraryOptimizedForStreamingType typ = GetAllMediaLibraryOptimizedForStreamingType.Boolean; + public static GetLibrarySectionsAllOptimizedForStreaming CreateBoolean(bool boolean) { + GetLibrarySectionsAllOptimizedForStreamingType typ = GetLibrarySectionsAllOptimizedForStreamingType.Boolean; - GetAllMediaLibraryOptimizedForStreaming res = new GetAllMediaLibraryOptimizedForStreaming(typ); + GetLibrarySectionsAllOptimizedForStreaming res = new GetLibrarySectionsAllOptimizedForStreaming(typ); res.Boolean = boolean; return res; } - public static GetAllMediaLibraryOptimizedForStreaming CreateNull() { - GetAllMediaLibraryOptimizedForStreamingType typ = GetAllMediaLibraryOptimizedForStreamingType.Null; - return new GetAllMediaLibraryOptimizedForStreaming(typ); + public static GetLibrarySectionsAllOptimizedForStreaming CreateNull() { + GetLibrarySectionsAllOptimizedForStreamingType typ = GetLibrarySectionsAllOptimizedForStreamingType.Null; + return new GetLibrarySectionsAllOptimizedForStreaming(typ); } - public class GetAllMediaLibraryOptimizedForStreamingConverter : JsonConverter + public class GetLibrarySectionsAllOptimizedForStreamingConverter : JsonConverter { - public override bool CanConvert(System.Type objectType) => objectType == typeof(GetAllMediaLibraryOptimizedForStreaming); + public override bool CanConvert(System.Type objectType) => objectType == typeof(GetLibrarySectionsAllOptimizedForStreaming); public override bool CanRead => true; @@ -114,14 +114,14 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests try { - return new GetAllMediaLibraryOptimizedForStreaming(GetAllMediaLibraryOptimizedForStreamingType.OptimizedForStreaming1) + return new GetLibrarySectionsAllOptimizedForStreaming(GetLibrarySectionsAllOptimizedForStreamingType.OptimizedForStreaming1) { OptimizedForStreaming1 = ResponseBodyDeserializer.DeserializeUndiscriminatedUnionMember(json) }; } catch (ResponseBodyDeserializer.MissingMemberException) { - fallbackCandidates.Add((typeof(OptimizedForStreaming1), new GetAllMediaLibraryOptimizedForStreaming(GetAllMediaLibraryOptimizedForStreamingType.OptimizedForStreaming1), "OptimizedForStreaming1")); + fallbackCandidates.Add((typeof(OptimizedForStreaming1), new GetLibrarySectionsAllOptimizedForStreaming(GetLibrarySectionsAllOptimizedForStreamingType.OptimizedForStreaming1), "OptimizedForStreaming1")); } catch (ResponseBodyDeserializer.DeserializationException) { @@ -135,7 +135,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests try { var converted = Convert.ToBoolean(json); - return new GetAllMediaLibraryOptimizedForStreaming(GetAllMediaLibraryOptimizedForStreamingType.Boolean) + return new GetLibrarySectionsAllOptimizedForStreaming(GetLibrarySectionsAllOptimizedForStreamingType.Boolean) { Boolean = converted }; @@ -174,8 +174,8 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests writer.WriteRawValue("null"); return; } - GetAllMediaLibraryOptimizedForStreaming res = (GetAllMediaLibraryOptimizedForStreaming)value; - if (GetAllMediaLibraryOptimizedForStreamingType.FromString(res.Type).Equals(GetAllMediaLibraryOptimizedForStreamingType.Null)) + GetLibrarySectionsAllOptimizedForStreaming res = (GetLibrarySectionsAllOptimizedForStreaming)value; + if (GetLibrarySectionsAllOptimizedForStreamingType.FromString(res.Type).Equals(GetLibrarySectionsAllOptimizedForStreamingType.Null)) { writer.WriteRawValue("null"); return; diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryOptimizedForStreaming1.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllOptimizedForStreaming1.cs similarity index 90% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryOptimizedForStreaming1.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllOptimizedForStreaming1.cs index 5668009..e6cd5e7 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryOptimizedForStreaming1.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllOptimizedForStreaming1.cs @@ -11,7 +11,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests { using LukeHagar.PlexAPI.SDK.Utils; - public enum GetAllMediaLibraryOptimizedForStreaming1 + public enum GetLibrarySectionsAllOptimizedForStreaming1 { Zero = 0, One = 1, diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryPart.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllPart.cs similarity index 88% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryPart.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllPart.cs index 056d903..8936b01 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryPart.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllPart.cs @@ -15,7 +15,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using Newtonsoft.Json; using System.Collections.Generic; - public class GetAllMediaLibraryPart + public class GetLibrarySectionsAllPart { /// @@ -91,15 +91,15 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true /// [JsonProperty("optimizedForStreaming")] - public GetAllMediaLibraryLibraryOptimizedForStreaming? OptimizedForStreaming { get; set; } + public GetLibrarySectionsAllLibraryOptimizedForStreaming? OptimizedForStreaming { get; set; } [JsonProperty("hasThumbnail")] - public GetAllMediaLibraryHasThumbnail? HasThumbnail { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.GetAllMediaLibraryHasThumbnail.False; + public GetLibrarySectionsAllHasThumbnail? HasThumbnail { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.GetLibrarySectionsAllHasThumbnail.False; /// /// An array of streams for this part. /// [JsonProperty("Stream")] - public List? Stream { get; set; } + public List? Stream { get; set; } } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryQueryParamIncludeMeta.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllQueryParamIncludeMeta.cs similarity index 92% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryQueryParamIncludeMeta.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllQueryParamIncludeMeta.cs index 7cc3339..b6649aa 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryQueryParamIncludeMeta.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllQueryParamIncludeMeta.cs @@ -18,7 +18,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// /// /// - public enum GetAllMediaLibraryQueryParamIncludeMeta + public enum GetLibrarySectionsAllQueryParamIncludeMeta { Disable = 0, Enable = 1, diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryQueryParamType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllQueryParamType.cs similarity index 86% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryQueryParamType.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllQueryParamType.cs index a37d2ff..e06623f 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryQueryParamType.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllQueryParamType.cs @@ -23,15 +23,17 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// /// /// - public enum GetAllMediaLibraryQueryParamType + public enum GetLibrarySectionsAllQueryParamType { Movie = 1, TvShow = 2, Season = 3, Episode = 4, - Audio = 8, - Album = 9, - Track = 10, + Artist = 5, + Album = 6, + Track = 7, + PhotoAlbum = 8, + Photo = 9, } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllRequest.cs similarity index 92% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryRequest.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllRequest.cs index 8d7ce49..7e2ac07 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllRequest.cs @@ -12,7 +12,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using LukeHagar.PlexAPI.SDK.Models.Requests; using LukeHagar.PlexAPI.SDK.Utils; - public class GetAllMediaLibraryRequest + public class GetLibrarySectionsAllRequest { /// @@ -39,7 +39,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=type")] - public GetAllMediaLibraryQueryParamType Type { get; set; } = default!; + public GetLibrarySectionsAllQueryParamType Type { get; set; } = default!; /// /// Adds the Meta object to the response
@@ -49,7 +49,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// ///
[SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeMeta")] - public GetAllMediaLibraryQueryParamIncludeMeta? IncludeMeta { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.GetAllMediaLibraryQueryParamIncludeMeta.Disable; + public GetLibrarySectionsAllQueryParamIncludeMeta? IncludeMeta { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.GetLibrarySectionsAllQueryParamIncludeMeta.Disable; /// /// Adds the Guid object to the response
diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryResponse.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllResponse.cs similarity index 91% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryResponse.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllResponse.cs index f4af377..5d42676 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryResponse.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllResponse.cs @@ -14,7 +14,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using System; using System.Net.Http; - public class GetAllMediaLibraryResponse + public class GetLibrarySectionsAllResponse { /// @@ -35,6 +35,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// /// Successful response containing media container data. /// - public GetAllMediaLibraryResponseBody? Object { get; set; } + public GetLibrarySectionsAllResponseBody? Object { get; set; } } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryResponseBody.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllResponseBody.cs similarity index 84% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryResponseBody.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllResponseBody.cs index 540e690..ca9ad83 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryResponseBody.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllResponseBody.cs @@ -16,10 +16,10 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// /// Successful response containing media container data. /// - public class GetAllMediaLibraryResponseBody + public class GetLibrarySectionsAllResponseBody { [JsonProperty("MediaContainer")] - public GetAllMediaLibraryMediaContainer? MediaContainer { get; set; } + public GetLibrarySectionsAllMediaContainer? MediaContainer { get; set; } } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryRole.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllRole.cs similarity index 94% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryRole.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllRole.cs index 0a961dc..bc4a0e4 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryRole.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllRole.cs @@ -12,7 +12,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; - public class GetAllMediaLibraryRole + public class GetLibrarySectionsAllRole { /// diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibrarySort.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllSort.cs similarity index 80% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibrarySort.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllSort.cs index 8276839..c3bc263 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibrarySort.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllSort.cs @@ -13,7 +13,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; - public class GetAllMediaLibrarySort + public class GetLibrarySectionsAllSort { [JsonProperty("default")] @@ -30,7 +30,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// /// [JsonProperty("activeDirection")] - public GetAllMediaLibraryActiveDirection? ActiveDirection { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.GetAllMediaLibraryActiveDirection.Ascending; + public GetLibrarySectionsAllActiveDirection? ActiveDirection { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.GetLibrarySectionsAllActiveDirection.Ascending; /// /// The direction of the sort. Can be either `asc` or `desc`.
@@ -40,7 +40,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// ///
[JsonProperty("defaultDirection")] - public GetAllMediaLibraryDefaultDirection? DefaultDirection { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.GetAllMediaLibraryDefaultDirection.Ascending; + public GetLibrarySectionsAllDefaultDirection? DefaultDirection { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.GetLibrarySectionsAllDefaultDirection.Ascending; [JsonProperty("descKey")] public string? DescKey { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryStream.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllStream.cs similarity index 98% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryStream.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllStream.cs index ff0b9fd..1ab306e 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryStream.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllStream.cs @@ -13,7 +13,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; - public class GetAllMediaLibraryStream + public class GetLibrarySectionsAllStream { /// @@ -33,7 +33,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// /// [JsonProperty("streamType")] - public GetAllMediaLibraryStreamType StreamType { get; set; } = default!; + public GetLibrarySectionsAllStreamType StreamType { get; set; } = default!; /// /// Format of the stream (e.g., srt). diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryStreamType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllStreamType.cs similarity index 94% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryStreamType.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllStreamType.cs index 7008306..e55d3fc 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryStreamType.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllStreamType.cs @@ -21,7 +21,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// /// /// - public enum GetAllMediaLibraryStreamType + public enum GetLibrarySectionsAllStreamType { Video = 1, Audio = 2, diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllType.cs similarity index 82% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryType.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllType.cs index 74eb700..44c01c3 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryType.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllType.cs @@ -14,7 +14,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using Newtonsoft.Json; using System.Collections.Generic; - public class GetAllMediaLibraryType + public class GetLibrarySectionsAllType { [JsonProperty("key")] @@ -33,12 +33,12 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public bool Active { get; set; } = default!; [JsonProperty("Filter")] - public List? Filter { get; set; } + public List? Filter { get; set; } [JsonProperty("Sort")] - public List? Sort { get; set; } + public List? Sort { get; set; } [JsonProperty("Field")] - public List? Field { get; set; } + public List? Field { get; set; } } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryUltraBlurColors.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllUltraBlurColors.cs similarity index 94% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryUltraBlurColors.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllUltraBlurColors.cs index 9b9cf23..54145cf 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryUltraBlurColors.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllUltraBlurColors.cs @@ -12,7 +12,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; - public class GetAllMediaLibraryUltraBlurColors + public class GetLibrarySectionsAllUltraBlurColors { [JsonProperty("topLeft")] diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryWriter.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllWriter.cs similarity index 93% rename from LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryWriter.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllWriter.cs index fa4d80b..8233b3d 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryWriter.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibrarySectionsAllWriter.cs @@ -12,7 +12,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; - public class GetAllMediaLibraryWriter + public class GetLibrarySectionsAllWriter { /// diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataCountry.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataCountry.cs index 5ef8763..04c838a 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataCountry.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataCountry.cs @@ -18,6 +18,14 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public class GetMediaMetaDataCountry { + /// + /// The unique identifier for the country.
+ /// + /// + /// NOTE: This is different for each Plex server and is not globally unique.
+ /// + ///
+ ///
[JsonProperty("id")] public int Id { get; set; } = default!; @@ -28,6 +36,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public string Tag { get; set; } = default!; [JsonProperty("filter")] - public string? Filter { get; set; } + public string Filter { get; set; } = default!; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataDirector.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataDirector.cs index 3e3f86a..623fda4 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataDirector.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataDirector.cs @@ -34,13 +34,13 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public string Filter { get; set; } = default!; /// - /// A unique key associated with the director's tag, used for internal identification. + /// A unique 24-character hexadecimal key associated with the director's tag, used for internal identification. /// [JsonProperty("tagKey")] - public string? TagKey { get; set; } + public string TagKey { get; set; } = default!; /// - /// The URL of the thumbnail image for the director. + /// The absolute URL of the thumbnail image for the director. /// [JsonProperty("thumb")] public string? Thumb { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataGenre.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataGenre.cs index 1532a4a..50f8b1c 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataGenre.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataGenre.cs @@ -18,8 +18,16 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public class GetMediaMetaDataGenre { + /// + /// The unique identifier for the genre.
+ /// + /// + /// NOTE: This is different for each Plex server and is not globally unique.
+ /// + ///
+ ///
[JsonProperty("id")] - public long Id { get; set; } = default!; + public int Id { get; set; } = default!; /// /// The genre name of this media-item
diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataGuids.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataGuids.cs index 467389f..6ec9ad0 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataGuids.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataGuids.cs @@ -16,7 +16,11 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests { /// - /// The GUID value. + /// The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb://
+ /// + /// + /// + /// ///
[JsonProperty("id")] public string Id { get; set; } = default!; diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataMetadata.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataMetadata.cs index 9f3838b..c1c47cf 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataMetadata.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataMetadata.cs @@ -367,6 +367,9 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests [JsonProperty("librarySectionKey")] public string LibrarySectionKey { get; set; } = default!; + [JsonProperty("Guid")] + public List? Guids { get; set; } + [JsonProperty("Media")] public List? Media { get; set; } @@ -388,9 +391,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests [JsonProperty("Role")] public List? Role { get; set; } - [JsonProperty("Guid")] - public List? Guids { get; set; } - [JsonProperty("Rating")] public List? Ratings { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataRequest.cs index efd8e0e..fd884b7 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataRequest.cs @@ -15,10 +15,10 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests { /// - /// the id of the library item to return the children of. + /// The id(s) of the library item(s) to return metadata for. Can be a single ID or comma-separated list of IDs. /// [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=ratingKey")] - public long RatingKey { get; set; } = default!; + public string RatingKey { get; set; } = default!; /// /// Include concerts data if set to true. diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataRole.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataRole.cs index 9e03897..119ce0a 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataRole.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataRole.cs @@ -16,10 +16,15 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests { /// - /// Unique identifier for the actor or role. + /// The unique identifier for the role.
+ /// + /// + /// NOTE: This is different for each Plex server and is not globally unique.
+ /// + ///
///
[JsonProperty("id")] - public long Id { get; set; } = default!; + public int Id { get; set; } = default!; /// /// The display tag for the actor (typically the actor's name). @@ -40,13 +45,18 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public string Filter { get; set; } = default!; /// - /// A unique key associated with the actor's tag, used for internal identification. + /// A 24-character hexadecimal unique key associated with the actor's tag, used for internal identification.
+ /// + /// + /// NOTE: This is globally unique across all Plex Servers.
+ /// + ///
///
[JsonProperty("tagKey")] - public string? TagKey { get; set; } + public string TagKey { get; set; } = default!; /// - /// The URL of the thumbnail image for the actor. + /// The absolute URL of the thumbnail image for the actor. /// [JsonProperty("thumb")] public string? Thumb { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataType.cs index 84f1d91..4dcbf02 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataType.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataType.cs @@ -14,7 +14,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using System; /// - /// The type of media content
+ /// The type of media content in the Plex library. This can represent videos, music, or photos.
/// /// /// @@ -34,6 +34,14 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests Artist, [JsonProperty("album")] Album, + [JsonProperty("track")] + Track, + [JsonProperty("photoalbum")] + PhotoAlbum, + [JsonProperty("photo")] + Photo, + [JsonProperty("collection")] + Collection, } public static class GetMediaMetaDataTypeExtension diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataWriter.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataWriter.cs index a1f0763..f6f1dd3 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataWriter.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataWriter.cs @@ -34,13 +34,13 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public string Filter { get; set; } = default!; /// - /// The URL of the thumbnail image for the writer. + /// The absolute URL of the thumbnail image for the writer. /// [JsonProperty("thumb")] public string? Thumb { get; set; } /// - /// A unique key associated with the writers tag, used for internal identification. + /// A 24-character hexadecimal unique key associated with the writer’s tag, used for internal identification. /// [JsonProperty("tagKey")] public string? TagKey { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetPlaylistContentsQueryParamType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetPlaylistContentsQueryParamType.cs index 80e5c17..bf90cd6 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetPlaylistContentsQueryParamType.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetPlaylistContentsQueryParamType.cs @@ -29,9 +29,11 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests TvShow = 2, Season = 3, Episode = 4, - Audio = 8, - Album = 9, - Track = 10, + Artist = 5, + Album = 6, + Track = 7, + PhotoAlbum = 8, + Photo = 9, } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedHubsType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedHubsType.cs index 68a1c7d..1b2b42a 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedHubsType.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedHubsType.cs @@ -14,7 +14,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using System; /// - /// The type of media content
+ /// The type of media content in the Plex library. This can represent videos, music, or photos.
/// /// /// @@ -34,6 +34,14 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests Artist, [JsonProperty("album")] Album, + [JsonProperty("track")] + Track, + [JsonProperty("photoalbum")] + PhotoAlbum, + [JsonProperty("photo")] + Photo, + [JsonProperty("collection")] + Collection, } public static class GetRecentlyAddedHubsTypeExtension diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedMetadata.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedMetadata.cs index 94cddea..15f5e99 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedMetadata.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedMetadata.cs @@ -391,6 +391,9 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests [JsonProperty("UltraBlurColors")] public UltraBlurColors? UltraBlurColors { get; set; } + [JsonProperty("Guid")] + public List? Guids { get; set; } + [JsonProperty("Media")] public List? Media { get; set; } @@ -421,9 +424,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests [JsonProperty("Location")] public List? Location { get; set; } - [JsonProperty("Guid")] - public List? Guids { get; set; } - [JsonProperty("Collection")] public List? Collection { get; set; } } diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesMetadata.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesMetadata.cs index ea7e309..e26b2c9 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesMetadata.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesMetadata.cs @@ -51,7 +51,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public string? LibrarySectionKey { get; set; } /// - /// The type of media content
+ /// The type of media content in the Plex library. This can represent videos, music, or photos.
/// /// /// diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesType.cs index 18a68ae..8fcf9cc 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesType.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesType.cs @@ -14,7 +14,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using System; /// - /// The type of media content
+ /// The type of media content in the Plex library. This can represent videos, music, or photos.
/// /// /// @@ -34,6 +34,14 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests Artist, [JsonProperty("album")] Album, + [JsonProperty("track")] + Track, + [JsonProperty("photoalbum")] + PhotoAlbum, + [JsonProperty("photo")] + Photo, + [JsonProperty("collection")] + Collection, } public static class GetSearchAllLibrariesTypeExtension diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchLibraryQueryParamType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchLibraryQueryParamType.cs index 91472fa..494985c 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchLibraryQueryParamType.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchLibraryQueryParamType.cs @@ -29,9 +29,11 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests TvShow = 2, Season = 3, Episode = 4, - Audio = 8, - Album = 9, - Track = 10, + Artist = 5, + Album = 6, + Track = 7, + PhotoAlbum = 8, + Photo = 9, } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetTopWatchedContentMediaContainer.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetTopWatchedContentMediaContainer.cs index db0681d..51b7134 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetTopWatchedContentMediaContainer.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetTopWatchedContentMediaContainer.cs @@ -17,20 +17,35 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public class GetTopWatchedContentMediaContainer { + /// + /// Number of media items returned in this response. + /// [JsonProperty("size")] - public int? Size { get; set; } + public int Size { get; set; } = default!; + /// + /// Indicates whether syncing is allowed. + /// [JsonProperty("allowSync")] - public bool? AllowSync { get; set; } + public bool AllowSync { get; set; } = default!; + /// + /// An plugin identifier for the media container. + /// [JsonProperty("identifier")] - public string? Identifier { get; set; } + public string Identifier { get; set; } = default!; + /// + /// The prefix used for media tag resource paths. + /// [JsonProperty("mediaTagPrefix")] - public string? MediaTagPrefix { get; set; } + public string MediaTagPrefix { get; set; } = default!; + /// + /// The version number for media tags. + /// [JsonProperty("mediaTagVersion")] - public int? MediaTagVersion { get; set; } + public long MediaTagVersion { get; set; } = default!; [JsonProperty("Metadata")] public List? Metadata { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetTopWatchedContentQueryParamIncludeGuids.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetTopWatchedContentQueryParamIncludeGuids.cs new file mode 100644 index 0000000..20cecdf --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetTopWatchedContentQueryParamIncludeGuids.cs @@ -0,0 +1,27 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// Adds the Guid object to the response
+ /// + /// + /// + /// + ///
+ public enum GetTopWatchedContentQueryParamIncludeGuids + { + Disable = 0, + Enable = 1, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetTopWatchedContentQueryParamType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetTopWatchedContentQueryParamType.cs index 2cbac4c..be5337f 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetTopWatchedContentQueryParamType.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetTopWatchedContentQueryParamType.cs @@ -29,9 +29,11 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests TvShow = 2, Season = 3, Episode = 4, - Audio = 8, - Album = 9, - Track = 10, + Artist = 5, + Album = 6, + Track = 7, + PhotoAlbum = 8, + Photo = 9, } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetTopWatchedContentRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetTopWatchedContentRequest.cs index 556b0e3..16d2f5f 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetTopWatchedContentRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetTopWatchedContentRequest.cs @@ -15,16 +15,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public class GetTopWatchedContentRequest { - /// - /// Adds the Guids object to the response
- /// - /// - /// - /// - ///
- [SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeGuids")] - public long? IncludeGuids { get; set; } - /// /// The type of media to retrieve or filter by.
/// @@ -39,5 +29,15 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests ///
[SpeakeasyMetadata("queryParam:style=form,explode=true,name=type")] public GetTopWatchedContentQueryParamType Type { get; set; } = default!; + + /// + /// Adds the Guid object to the response
+ /// + /// + /// + /// + ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeGuids")] + public GetTopWatchedContentQueryParamIncludeGuids? IncludeGuids { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.GetTopWatchedContentQueryParamIncludeGuids.Disable; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/Guids.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/Guids.cs index 88a579b..e552887 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/Guids.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/Guids.cs @@ -16,13 +16,13 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests { /// - /// The unique identifier for the Guid. Can be imdb://tt0286347, tmdb://1763, tvdb://2337
+ /// The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb://
/// /// /// /// ///
[JsonProperty("id")] - public string? Id { get; set; } + public string Id { get; set; } = default!; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/Producer.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/Producer.cs index 4cb45d7..56f553f 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/Producer.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/Producer.cs @@ -34,13 +34,17 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public string Tag { get; set; } = default!; /// - /// A unique key associated with the producer's tag, used for internal identification. + /// A 24-character hexadecimal unique key associated with the producer's tag, used for internal identification.
+ /// + /// + /// + /// ///
[JsonProperty("tagKey")] - public string? TagKey { get; set; } + public string TagKey { get; set; } = default!; /// - /// The URL of the thumbnail image for the actor. + /// The absolute URL of the thumbnail image for the producer. /// [JsonProperty("thumb")] public string? Thumb { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/QueryParamType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/QueryParamType.cs index fea85d9..c0f6fa0 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/QueryParamType.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/QueryParamType.cs @@ -29,9 +29,11 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests TvShow = 2, Season = 3, Episode = 4, - Audio = 8, - Album = 9, - Track = 10, + Artist = 5, + Album = 6, + Track = 7, + PhotoAlbum = 8, + Photo = 9, } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/Rating.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/Rating.cs index 78607f9..9070bcd 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/Rating.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/Rating.cs @@ -18,11 +18,14 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public class Rating { + /// + /// The URL for the rating image, for example from IMDb. + /// [JsonProperty("image")] public string Image { get; set; } = default!; [JsonProperty("value")] - public double Value { get; set; } = default!; + public float Value { get; set; } = default!; [JsonProperty("type")] public string Type { get; set; } = default!; diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/Role.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/Role.cs index de1bace..25ff4ab 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/Role.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/Role.cs @@ -16,10 +16,15 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests { /// - /// Unique identifier for the actor or role. + /// The unique identifier for the role.
+ /// + /// + /// NOTE: This is different for each Plex server and is not globally unique.
+ /// + ///
///
[JsonProperty("id")] - public long Id { get; set; } = default!; + public int Id { get; set; } = default!; /// /// The filter string used to query this actor. For example, it may indicate that this is an actor with a given key. @@ -34,10 +39,15 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public string Tag { get; set; } = default!; /// - /// A unique key associated with the actor's tag, used for internal identification. + /// A 24-character hexadecimal unique key associated with the actor's tag, used for internal identification.
+ /// + /// + /// NOTE: This is globally unique across all Plex Servers.
+ /// + ///
///
[JsonProperty("tagKey")] - public string? TagKey { get; set; } + public string TagKey { get; set; } = default!; /// /// The role played by the actor in the media item. @@ -46,7 +56,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public string? RoleValue { get; set; } /// - /// The URL of the thumbnail image for the actor. + /// The absolute URL of the thumbnail image for the actor. /// [JsonProperty("thumb")] public string? Thumb { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/Similar.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/Similar.cs index c6e2213..6448865 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/Similar.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/Similar.cs @@ -19,7 +19,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests { [JsonProperty("id")] - public long Id { get; set; } = default!; + public int Id { get; set; } = default!; [JsonProperty("filter")] public string Filter { get; set; } = default!; diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/Type.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/Type.cs index 494ebce..f6d8d13 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/Type.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/Type.cs @@ -29,9 +29,11 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests TvShow = 2, Season = 3, Episode = 4, - Audio = 8, - Album = 9, - Track = 10, + Artist = 5, + Album = 6, + Track = 7, + PhotoAlbum = 8, + Photo = 9, } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/Writer.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/Writer.cs index 293107e..8be0510 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/Writer.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/Writer.cs @@ -34,9 +34,15 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public string Tag { get; set; } = default!; /// - /// A unique key associated with the writers tag, used for internal identification. + /// A 24-character hexadecimal unique key associated with the writer’s tag, used for internal identification. /// [JsonProperty("tagKey")] public string? TagKey { get; set; } + + /// + /// The absolute URL of the thumbnail image for the writer. + /// + [JsonProperty("thumb")] + public string? Thumb { get; set; } } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Playlists.cs b/LukeHagar/PlexAPI/SDK/Playlists.cs index c9945c8..7e24c47 100644 --- a/LukeHagar/PlexAPI/SDK/Playlists.cs +++ b/LukeHagar/PlexAPI/SDK/Playlists.cs @@ -146,19 +146,12 @@ namespace LukeHagar.PlexAPI.SDK { public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.14.11"; - private const string _sdkGenVersion = "2.597.9"; + private const string _sdkVersion = "0.15.0"; + private const string _sdkGenVersion = "2.620.2"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.14.11 2.597.9 0.0.3 LukeHagar.PlexAPI.SDK"; - private string _serverUrl = ""; - private ISpeakeasyHttpClient _client; - private Func? _securitySource; - public Playlists(ISpeakeasyHttpClient client, Func? securitySource, string serverUrl, SDKConfig config) + public Playlists(SDKConfig config) { - _client = client; - _securitySource = securitySource; - _serverUrl = serverUrl; SDKConfiguration = config; } @@ -168,21 +161,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/playlists", request); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "createPlaylist", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "createPlaylist", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -273,21 +266,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/playlists", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getPlaylists", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getPlaylists", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -377,21 +370,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistID}", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getPlaylist", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getPlaylist", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -481,21 +474,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistID}", request); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "deletePlaylist", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "deletePlaylist", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -579,21 +572,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistID}", request); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "updatePlaylist", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "updatePlaylist", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -676,21 +669,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistID}/items", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getPlaylistContents", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getPlaylistContents", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -780,21 +773,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistID}/items", request); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "clearPlaylistContents", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "clearPlaylistContents", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -878,21 +871,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistID}/items", request); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "addPlaylistContents", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "addPlaylistContents", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -984,21 +977,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/playlists/upload", request); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "uploadPlaylist", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "uploadPlaylist", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) diff --git a/LukeHagar/PlexAPI/SDK/Plex.cs b/LukeHagar/PlexAPI/SDK/Plex.cs index 76549ce..6db95ec 100644 --- a/LukeHagar/PlexAPI/SDK/Plex.cs +++ b/LukeHagar/PlexAPI/SDK/Plex.cs @@ -143,19 +143,12 @@ namespace LukeHagar.PlexAPI.SDK }; public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.14.11"; - private const string _sdkGenVersion = "2.597.9"; + private const string _sdkVersion = "0.15.0"; + private const string _sdkGenVersion = "2.620.2"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.14.11 2.597.9 0.0.3 LukeHagar.PlexAPI.SDK"; - private string _serverUrl = ""; - private ISpeakeasyHttpClient _client; - private Func? _securitySource; - public Plex(ISpeakeasyHttpClient client, Func? securitySource, string serverUrl, SDKConfig config) + public Plex(SDKConfig config) { - _client = client; - _securitySource = securitySource; - _serverUrl = serverUrl; SDKConfiguration = config; } @@ -171,21 +164,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = baseUrl + "/companions"; var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getCompanionsData", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getCompanionsData", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -277,21 +270,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = baseUrl + "/friends"; var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getUserFriends", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getUserFriends", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -383,16 +376,16 @@ namespace LukeHagar.PlexAPI.SDK var urlString = baseUrl + "/geoip"; var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - var hookCtx = new HookContext(baseUrl, "getGeoData", new List { }, null); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getGeoData", new List { }, null); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -479,21 +472,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = baseUrl + "/home"; var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getHomeData", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getHomeData", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -591,22 +584,22 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/resources", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); HeaderSerializer.PopulateHeaders(ref httpRequest, request); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "get-server-resources", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "get-server-resources", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -697,17 +690,17 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/pins", request); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); HeaderSerializer.PopulateHeaders(ref httpRequest, request); - var hookCtx = new HookContext(baseUrl, "getPin", new List { }, null); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getPin", new List { }, null); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -787,17 +780,17 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/pins/{pinID}", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); HeaderSerializer.PopulateHeaders(ref httpRequest, request); - var hookCtx = new HookContext(baseUrl, "getTokenByPinId", new List { }, null); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getTokenByPinId", new List { }, null); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 404 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) diff --git a/LukeHagar/PlexAPI/SDK/PlexAPI.cs b/LukeHagar/PlexAPI/SDK/PlexAPI.cs index 74e09bc..9cbebdb 100644 --- a/LukeHagar/PlexAPI/SDK/PlexAPI.cs +++ b/LukeHagar/PlexAPI/SDK/PlexAPI.cs @@ -255,41 +255,6 @@ namespace LukeHagar.PlexAPI.SDK public IUsers Users { get; } } - public class SDKConfig - { - /// - /// List of server URLs available to the SDK. - /// - public static readonly string[] ServerList = { - "https://10.10.10.47:32400", - }; - - public string ServerUrl = ""; - public int ServerIndex = 0; - public List> ServerDefaults = new List>(); - public SDKHooks Hooks = new SDKHooks(); - public RetryConfig? RetryConfig = null; - - public string GetTemplatedServerUrl() - { - if (!String.IsNullOrEmpty(this.ServerUrl)) - { - return Utilities.TemplateUrl(Utilities.RemoveSuffix(this.ServerUrl, "/"), new Dictionary()); - } - return Utilities.TemplateUrl(SDKConfig.ServerList[this.ServerIndex], this.ServerDefaults[this.ServerIndex]); - } - - public ISpeakeasyHttpClient InitHooks(ISpeakeasyHttpClient client) - { - string preHooksUrl = GetTemplatedServerUrl(); - var (postHooksUrl, postHooksClient) = this.Hooks.SDKInit(preHooksUrl, client); - if (preHooksUrl != postHooksUrl) - { - this.ServerUrl = postHooksUrl; - } - return postHooksClient; - } - } /// /// Plex-API: An Open API Spec for interacting with Plex.tv and Plex Media Server @@ -327,14 +292,9 @@ namespace LukeHagar.PlexAPI.SDK public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.14.11"; - private const string _sdkGenVersion = "2.597.9"; + private const string _sdkVersion = "0.15.0"; + private const string _sdkGenVersion = "2.620.2"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.14.11 2.597.9 0.0.3 LukeHagar.PlexAPI.SDK"; - private string _serverUrl = ""; - private int _serverIndex = 0; - private ISpeakeasyHttpClient _client; - private Func? _securitySource; public IServer Server { get; private set; } public IMedia Media { get; private set; } public IVideo Video { get; private set; } @@ -353,6 +313,46 @@ namespace LukeHagar.PlexAPI.SDK public IUpdater Updater { get; private set; } public IUsers Users { get; private set; } + public PlexAPI(SDKConfig config) + { + SDKConfiguration = config; + InitHooks(); + + Server = new Server(SDKConfiguration); + + Media = new Media(SDKConfiguration); + + Video = new Video(SDKConfiguration); + + Activities = new Activities(SDKConfiguration); + + Butler = new Butler(SDKConfiguration); + + Plex = new Plex(SDKConfiguration); + + Hubs = new Hubs(SDKConfiguration); + + Search = new Search(SDKConfiguration); + + Library = new Library(SDKConfiguration); + + Watchlist = new Watchlist(SDKConfiguration); + + Log = new Log(SDKConfiguration); + + Playlists = new Playlists(SDKConfiguration); + + Authentication = new Authentication(SDKConfiguration); + + Statistics = new Statistics(SDKConfiguration); + + Sessions = new Sessions(SDKConfiguration); + + Updater = new Updater(SDKConfiguration); + + Users = new Users(SDKConfiguration); + } + public PlexAPI(string? accessToken = null, Func? accessTokenSource = null, int? serverIndex = null, ServerProtocol? protocol = null, string? ip = null, string? port = null, string? serverUrl = null, Dictionary? urlParams = null, ISpeakeasyHttpClient? client = null, RetryConfig? retryConfig = null) { if (serverIndex != null) @@ -361,7 +361,6 @@ namespace LukeHagar.PlexAPI.SDK { throw new Exception($"Invalid server index {serverIndex.Value}"); } - _serverIndex = serverIndex.Value; } if (serverUrl != null) @@ -370,19 +369,8 @@ namespace LukeHagar.PlexAPI.SDK { serverUrl = Utilities.TemplateUrl(serverUrl, urlParams); } - _serverUrl = serverUrl; } - List> serverDefaults = new List>() - { - new Dictionary() - { - {"protocol", protocol == null ? "https" : ServerProtocolExtension.Value(protocol.Value)}, - {"ip", ip == null ? "10.10.10.47" : ip}, - {"port", port == null ? "32400" : port}, - }, - }; - - _client = client ?? new SpeakeasyHttpClient(); + Func? _securitySource = null; if(accessTokenSource != null) { @@ -393,66 +381,154 @@ namespace LukeHagar.PlexAPI.SDK _securitySource = () => new LukeHagar.PlexAPI.SDK.Models.Components.Security() { AccessToken = accessToken }; } - SDKConfiguration = new SDKConfig() + SDKConfiguration = new SDKConfig(client) { - ServerDefaults = serverDefaults, - ServerIndex = _serverIndex, - ServerUrl = _serverUrl, + ServerIndex = serverIndex == null ? 0 : serverIndex.Value, + ServerUrl = serverUrl == null ? "" : serverUrl, + SecuritySource = _securitySource, RetryConfig = retryConfig }; - _client = SDKConfiguration.InitHooks(_client); + if (protocol != null) + { + SDKConfiguration.SetServerVariable("protocol", ServerProtocolExtension.Value(protocol.Value)); + } + if (ip != null) + { + SDKConfiguration.SetServerVariable("ip", ip); + } - Server = new Server(_client, _securitySource, _serverUrl, SDKConfiguration); + if (port != null) + { + SDKConfiguration.SetServerVariable("port", port); + } + InitHooks(); - Media = new Media(_client, _securitySource, _serverUrl, SDKConfiguration); + Server = new Server(SDKConfiguration); + Media = new Media(SDKConfiguration); - Video = new Video(_client, _securitySource, _serverUrl, SDKConfiguration); + Video = new Video(SDKConfiguration); + Activities = new Activities(SDKConfiguration); - Activities = new Activities(_client, _securitySource, _serverUrl, SDKConfiguration); + Butler = new Butler(SDKConfiguration); + Plex = new Plex(SDKConfiguration); - Butler = new Butler(_client, _securitySource, _serverUrl, SDKConfiguration); + Hubs = new Hubs(SDKConfiguration); + Search = new Search(SDKConfiguration); - Plex = new Plex(_client, _securitySource, _serverUrl, SDKConfiguration); + Library = new Library(SDKConfiguration); + Watchlist = new Watchlist(SDKConfiguration); - Hubs = new Hubs(_client, _securitySource, _serverUrl, SDKConfiguration); + Log = new Log(SDKConfiguration); + Playlists = new Playlists(SDKConfiguration); - Search = new Search(_client, _securitySource, _serverUrl, SDKConfiguration); + Authentication = new Authentication(SDKConfiguration); + Statistics = new Statistics(SDKConfiguration); - Library = new Library(_client, _securitySource, _serverUrl, SDKConfiguration); + Sessions = new Sessions(SDKConfiguration); + Updater = new Updater(SDKConfiguration); - Watchlist = new Watchlist(_client, _securitySource, _serverUrl, SDKConfiguration); - - - Log = new Log(_client, _securitySource, _serverUrl, SDKConfiguration); - - - Playlists = new Playlists(_client, _securitySource, _serverUrl, SDKConfiguration); - - - Authentication = new Authentication(_client, _securitySource, _serverUrl, SDKConfiguration); - - - Statistics = new Statistics(_client, _securitySource, _serverUrl, SDKConfiguration); - - - Sessions = new Sessions(_client, _securitySource, _serverUrl, SDKConfiguration); - - - Updater = new Updater(_client, _securitySource, _serverUrl, SDKConfiguration); - - - Users = new Users(_client, _securitySource, _serverUrl, SDKConfiguration); + Users = new Users(SDKConfiguration); } + + private void InitHooks() + { + string preHooksUrl = SDKConfiguration.GetTemplatedServerUrl(); + var (postHooksUrl, postHooksClient) = SDKConfiguration.Hooks.SDKInit(preHooksUrl, SDKConfiguration.Client); + var config = SDKConfiguration; + if (preHooksUrl != postHooksUrl) + { + config.ServerUrl = postHooksUrl; + } + config.Client = postHooksClient; + SDKConfiguration = config; + } + + public class SDKBuilder + { + private SDKConfig _sdkConfig = new SDKConfig(client: new SpeakeasyHttpClient()); + + public SDKBuilder() { } + + public SDKBuilder WithServerIndex(int serverIndex) + { + if (serverIndex < 0 || serverIndex >= SDKConfig.ServerList.Length) + { + throw new Exception($"Invalid server index {serverIndex}"); + } + _sdkConfig.ServerIndex = serverIndex; + return this; + } + + public SDKBuilder WithProtocol(ServerProtocol protocol) + { + _sdkConfig.SetServerVariable("protocol", ServerProtocolExtension.Value(protocol)); + return this; + } + + public SDKBuilder WithIp(string ip) + { + _sdkConfig.SetServerVariable("ip", ip); + return this; + } + + public SDKBuilder WithPort(string port) + { + _sdkConfig.SetServerVariable("port", port); + return this; + } + + public SDKBuilder WithServerUrl(string serverUrl, Dictionary? serverVariables = null) + { + if (serverVariables != null) + { + serverUrl = Utilities.TemplateUrl(serverUrl, serverVariables); + } + _sdkConfig.ServerUrl = serverUrl; + return this; + } + + public SDKBuilder WithAccessTokenSource(Func accessTokenSource) + { + _sdkConfig.SecuritySource = () => new LukeHagar.PlexAPI.SDK.Models.Components.Security() { AccessToken = accessTokenSource() }; + return this; + } + + public SDKBuilder WithAccessToken(string accessToken) + { + _sdkConfig.SecuritySource = () => new LukeHagar.PlexAPI.SDK.Models.Components.Security() { AccessToken = accessToken }; + return this; + } + + public SDKBuilder WithClient(ISpeakeasyHttpClient client) + { + _sdkConfig.Client = client; + return this; + } + + public SDKBuilder WithRetryConfig(RetryConfig retryConfig) + { + _sdkConfig.RetryConfig = retryConfig; + return this; + } + + public PlexAPI Build() + { + return new PlexAPI(_sdkConfig); + } + + } + + public static SDKBuilder Builder() => new SDKBuilder(); } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/SDKConfig.cs b/LukeHagar/PlexAPI/SDK/SDKConfig.cs new file mode 100644 index 0000000..0d706dc --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/SDKConfig.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK +{ + using LukeHagar.PlexAPI.SDK.Hooks; + using LukeHagar.PlexAPI.SDK.Models.Components; + using LukeHagar.PlexAPI.SDK.Utils; + using LukeHagar.PlexAPI.SDK.Utils.Retries; + using System; + using System.Collections.Generic; + using System.Linq; + + public struct SDKConfig + { + /// + /// List of server URLs available to the SDK. + /// + public static readonly string[] ServerList = { + "{protocol}://{ip}:{port}", + }; + + public ISpeakeasyHttpClient Client; + public string ServerUrl; + public int ServerIndex; + public List> ServerVariables; + public string UserAgent; + public Func? SecuritySource; + public SDKHooks Hooks; + public RetryConfig? RetryConfig; + + /// + /// Initializes a new instance of the SDKConfig struct with default values. + /// + public SDKConfig(ISpeakeasyHttpClient? client = null) + { + Client = client ?? new SpeakeasyHttpClient(); + ServerUrl = ""; + ServerIndex = 0; + ServerVariables = new List>() + { + new Dictionary() + { + {"protocol", "https"}, + {"ip", "10.10.10.47"}, + {"port", "32400"}, + }, + }; + UserAgent = "speakeasy-sdk/csharp 0.15.0 2.620.2 0.0.3 LukeHagar.PlexAPI.SDK"; + SecuritySource = null; + Hooks = new SDKHooks(); + RetryConfig = null; + } + + public void SetServerVariable(string key, string value) + { + foreach (var serverVariables in this.ServerVariables.Where(dict => dict.ContainsKey(key))) + { + serverVariables[key] = value; + } + } + + public string GetTemplatedServerUrl() + { + if (!String.IsNullOrEmpty(this.ServerUrl)) + { + return Utilities.TemplateUrl(Utilities.RemoveSuffix(this.ServerUrl, "/"), new Dictionary()); + } + return Utilities.TemplateUrl(SDKConfig.ServerList[this.ServerIndex], this.ServerVariables[this.ServerIndex]); + } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Search.cs b/LukeHagar/PlexAPI/SDK/Search.cs index ccddb90..44b393b 100644 --- a/LukeHagar/PlexAPI/SDK/Search.cs +++ b/LukeHagar/PlexAPI/SDK/Search.cs @@ -87,19 +87,12 @@ namespace LukeHagar.PlexAPI.SDK { public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.14.11"; - private const string _sdkGenVersion = "2.597.9"; + private const string _sdkVersion = "0.15.0"; + private const string _sdkGenVersion = "2.620.2"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.14.11 2.597.9 0.0.3 LukeHagar.PlexAPI.SDK"; - private string _serverUrl = ""; - private ISpeakeasyHttpClient _client; - private Func? _securitySource; - public Search(ISpeakeasyHttpClient client, Func? securitySource, string serverUrl, SDKConfig config) + public Search(SDKConfig config) { - _client = client; - _securitySource = securitySource; - _serverUrl = serverUrl; SDKConfiguration = config; } @@ -115,21 +108,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/hubs/search", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "performSearch", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "performSearch", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -213,21 +206,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/hubs/search/voice", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "performVoiceSearch", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "performVoiceSearch", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -309,21 +302,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/search", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getSearchResults", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getSearchResults", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) diff --git a/LukeHagar/PlexAPI/SDK/Server.cs b/LukeHagar/PlexAPI/SDK/Server.cs index 82db531..6de452e 100644 --- a/LukeHagar/PlexAPI/SDK/Server.cs +++ b/LukeHagar/PlexAPI/SDK/Server.cs @@ -126,19 +126,12 @@ namespace LukeHagar.PlexAPI.SDK { public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.14.11"; - private const string _sdkGenVersion = "2.597.9"; + private const string _sdkVersion = "0.15.0"; + private const string _sdkGenVersion = "2.620.2"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.14.11 2.597.9 0.0.3 LukeHagar.PlexAPI.SDK"; - private string _serverUrl = ""; - private ISpeakeasyHttpClient _client; - private Func? _securitySource; - public Server(ISpeakeasyHttpClient client, Func? securitySource, string serverUrl, SDKConfig config) + public Server(SDKConfig config) { - _client = client; - _securitySource = securitySource; - _serverUrl = serverUrl; SDKConfiguration = config; } @@ -149,21 +142,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = baseUrl + "/"; var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getServerCapabilities", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getServerCapabilities", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -250,21 +243,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = baseUrl + "/:/prefs"; var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getServerPreferences", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getServerPreferences", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -351,21 +344,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = baseUrl + "/clients"; var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getAvailableClients", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getAvailableClients", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -452,21 +445,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = baseUrl + "/devices"; var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getDevices", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getDevices", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -553,16 +546,16 @@ namespace LukeHagar.PlexAPI.SDK var urlString = baseUrl + "/identity"; var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - var hookCtx = new HookContext(baseUrl, "get-server-identity", new List { }, null); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "get-server-identity", new List { }, null); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 408 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -638,21 +631,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = baseUrl + "/myplex/account"; var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getMyPlexAccount", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getMyPlexAccount", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -738,21 +731,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/photo/:/transcode", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getResizedPhoto", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getResizedPhoto", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -835,22 +828,22 @@ namespace LukeHagar.PlexAPI.SDK var urlString = baseUrl + "/media/providers"; var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); HeaderSerializer.PopulateHeaders(ref httpRequest, request); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "get-media-providers", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "get-media-providers", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -937,21 +930,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = baseUrl + "/servers"; var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getServerList", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getServerList", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) diff --git a/LukeHagar/PlexAPI/SDK/Sessions.cs b/LukeHagar/PlexAPI/SDK/Sessions.cs index 39d0b9e..d2dbb44 100644 --- a/LukeHagar/PlexAPI/SDK/Sessions.cs +++ b/LukeHagar/PlexAPI/SDK/Sessions.cs @@ -80,19 +80,12 @@ namespace LukeHagar.PlexAPI.SDK { public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.14.11"; - private const string _sdkGenVersion = "2.597.9"; + private const string _sdkVersion = "0.15.0"; + private const string _sdkGenVersion = "2.620.2"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.14.11 2.597.9 0.0.3 LukeHagar.PlexAPI.SDK"; - private string _serverUrl = ""; - private ISpeakeasyHttpClient _client; - private Func? _securitySource; - public Sessions(ISpeakeasyHttpClient client, Func? securitySource, string serverUrl, SDKConfig config) + public Sessions(SDKConfig config) { - _client = client; - _securitySource = securitySource; - _serverUrl = serverUrl; SDKConfiguration = config; } @@ -103,21 +96,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = baseUrl + "/status/sessions"; var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getSessions", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getSessions", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -210,21 +203,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/status/sessions/history/all", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getSessionHistory", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getSessionHistory", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -311,21 +304,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = baseUrl + "/transcode/sessions"; var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getTranscodeSessions", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getTranscodeSessions", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -415,21 +408,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/transcode/sessions/{sessionKey}", request); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "stopTranscodeSession", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "stopTranscodeSession", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) diff --git a/LukeHagar/PlexAPI/SDK/Statistics.cs b/LukeHagar/PlexAPI/SDK/Statistics.cs index 24b48e3..3932511 100644 --- a/LukeHagar/PlexAPI/SDK/Statistics.cs +++ b/LukeHagar/PlexAPI/SDK/Statistics.cs @@ -71,19 +71,12 @@ namespace LukeHagar.PlexAPI.SDK { public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.14.11"; - private const string _sdkGenVersion = "2.597.9"; + private const string _sdkVersion = "0.15.0"; + private const string _sdkGenVersion = "2.620.2"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.14.11 2.597.9 0.0.3 LukeHagar.PlexAPI.SDK"; - private string _serverUrl = ""; - private ISpeakeasyHttpClient _client; - private Func? _securitySource; - public Statistics(ISpeakeasyHttpClient client, Func? securitySource, string serverUrl, SDKConfig config) + public Statistics(SDKConfig config) { - _client = client; - _securitySource = securitySource; - _serverUrl = serverUrl; SDKConfiguration = config; } @@ -97,21 +90,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/statistics/media", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getStatistics", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getStatistics", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -201,21 +194,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/statistics/resources", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getResourcesStatistics", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getResourcesStatistics", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -305,21 +298,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/statistics/bandwidth", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getBandwidthStatistics", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getBandwidthStatistics", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) diff --git a/LukeHagar/PlexAPI/SDK/Updater.cs b/LukeHagar/PlexAPI/SDK/Updater.cs index 5cc87a7..0532ebc 100644 --- a/LukeHagar/PlexAPI/SDK/Updater.cs +++ b/LukeHagar/PlexAPI/SDK/Updater.cs @@ -74,19 +74,12 @@ namespace LukeHagar.PlexAPI.SDK { public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.14.11"; - private const string _sdkGenVersion = "2.597.9"; + private const string _sdkVersion = "0.15.0"; + private const string _sdkGenVersion = "2.620.2"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.14.11 2.597.9 0.0.3 LukeHagar.PlexAPI.SDK"; - private string _serverUrl = ""; - private ISpeakeasyHttpClient _client; - private Func? _securitySource; - public Updater(ISpeakeasyHttpClient client, Func? securitySource, string serverUrl, SDKConfig config) + public Updater(SDKConfig config) { - _client = client; - _securitySource = securitySource; - _serverUrl = serverUrl; SDKConfiguration = config; } @@ -97,21 +90,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = baseUrl + "/updater/status"; var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getUpdateStatus", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getUpdateStatus", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -201,21 +194,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/updater/check", request); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "checkForUpdates", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "checkForUpdates", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -298,21 +291,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/updater/apply", request); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "applyUpdates", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "applyUpdates", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode == 500 || _statusCode >= 500 && _statusCode < 600) diff --git a/LukeHagar/PlexAPI/SDK/Users.cs b/LukeHagar/PlexAPI/SDK/Users.cs index ec86263..8bdd853 100644 --- a/LukeHagar/PlexAPI/SDK/Users.cs +++ b/LukeHagar/PlexAPI/SDK/Users.cs @@ -45,19 +45,12 @@ namespace LukeHagar.PlexAPI.SDK }; public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.14.11"; - private const string _sdkGenVersion = "2.597.9"; + private const string _sdkVersion = "0.15.0"; + private const string _sdkGenVersion = "2.620.2"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.14.11 2.597.9 0.0.3 LukeHagar.PlexAPI.SDK"; - private string _serverUrl = ""; - private ISpeakeasyHttpClient _client; - private Func? _securitySource; - public Users(ISpeakeasyHttpClient client, Func? securitySource, string serverUrl, SDKConfig config) + public Users(SDKConfig config) { - _client = client; - _securitySource = securitySource; - _serverUrl = serverUrl; SDKConfiguration = config; } @@ -73,17 +66,17 @@ namespace LukeHagar.PlexAPI.SDK var urlString = baseUrl + "/users"; var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); HeaderSerializer.PopulateHeaders(ref httpRequest, request); - var hookCtx = new HookContext(baseUrl, "get-users", new List { }, null); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "get-users", new List { }, null); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) diff --git a/LukeHagar/PlexAPI/SDK/Video.cs b/LukeHagar/PlexAPI/SDK/Video.cs index 836cdac..50f92a8 100644 --- a/LukeHagar/PlexAPI/SDK/Video.cs +++ b/LukeHagar/PlexAPI/SDK/Video.cs @@ -62,19 +62,12 @@ namespace LukeHagar.PlexAPI.SDK { public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.14.11"; - private const string _sdkGenVersion = "2.597.9"; + private const string _sdkVersion = "0.15.0"; + private const string _sdkGenVersion = "2.620.2"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.14.11 2.597.9 0.0.3 LukeHagar.PlexAPI.SDK"; - private string _serverUrl = ""; - private ISpeakeasyHttpClient _client; - private Func? _securitySource; - public Video(ISpeakeasyHttpClient client, Func? securitySource, string serverUrl, SDKConfig config) + public Video(SDKConfig config) { - _client = client; - _securitySource = securitySource; - _serverUrl = serverUrl; SDKConfiguration = config; } @@ -84,21 +77,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/:/timeline", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "getTimeline", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getTimeline", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) @@ -176,21 +169,21 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/video/:/transcode/universal/start.mpd", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "startUniversalTranscode", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "startUniversalTranscode", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) diff --git a/LukeHagar/PlexAPI/SDK/Watchlist.cs b/LukeHagar/PlexAPI/SDK/Watchlist.cs index ca4817f..751e3a4 100644 --- a/LukeHagar/PlexAPI/SDK/Watchlist.cs +++ b/LukeHagar/PlexAPI/SDK/Watchlist.cs @@ -59,19 +59,12 @@ namespace LukeHagar.PlexAPI.SDK }; public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.14.11"; - private const string _sdkGenVersion = "2.597.9"; + private const string _sdkVersion = "0.15.0"; + private const string _sdkGenVersion = "2.620.2"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.14.11 2.597.9 0.0.3 LukeHagar.PlexAPI.SDK"; - private string _serverUrl = ""; - private ISpeakeasyHttpClient _client; - private Func? _securitySource; - public Watchlist(ISpeakeasyHttpClient client, Func? securitySource, string serverUrl, SDKConfig config) + public Watchlist(SDKConfig config) { - _client = client; - _securitySource = securitySource; - _serverUrl = serverUrl; SDKConfiguration = config; } @@ -86,22 +79,22 @@ namespace LukeHagar.PlexAPI.SDK var urlString = URLBuilder.Build(baseUrl, "/library/sections/watchlist/{filter}", request); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); - httpRequest.Headers.Add("user-agent", _userAgent); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); HeaderSerializer.PopulateHeaders(ref httpRequest, request); - if (_securitySource != null) + if (SDKConfiguration.SecuritySource != null) { - httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); } - var hookCtx = new HookContext(baseUrl, "get-watch-list", new List { }, _securitySource); + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "get-watch-list", new List { }, SDKConfiguration.SecuritySource); httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); HttpResponseMessage httpResponse; try { - httpResponse = await _client.SendAsync(httpRequest); + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); int _statusCode = (int)httpResponse.StatusCode; if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) diff --git a/NUGET.md b/NUGET.md index 77661f8..2eca7c4 100644 --- a/NUGET.md +++ b/NUGET.md @@ -121,8 +121,8 @@ using LukeHagar.PlexAPI.SDK.Models.Components; var sdk = new PlexAPI( protocol: "https", - ip: "e0c3:bcc0:6bac:dccc:c4ec:34b1:ca98:4cb9", - port: "40311", + ip: "4982:bc2a:b4f8:efb5:2394:5bc3:ab4f:0e6d", + port: "44765", accessToken: "" ); diff --git a/README.md b/README.md index 135109e..c24f692 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ var res = await sdk.Server.GetServerCapabilitiesAsync(); * [GetLibraryDetails](docs/sdks/library/README.md#getlibrarydetails) - Get Library Details * [DeleteLibrary](docs/sdks/library/README.md#deletelibrary) - Delete Library Section * [GetLibraryItems](docs/sdks/library/README.md#getlibraryitems) - Get Library Items -* [GetAllMediaLibrary](docs/sdks/library/README.md#getallmedialibrary) - Get all media of library +* [GetLibrarySectionsAll](docs/sdks/library/README.md#getlibrarysectionsall) - Get Library section media by tag ALL * [GetRefreshLibraryMetadata](docs/sdks/library/README.md#getrefreshlibrarymetadata) - Refresh Metadata Of The Library * [GetSearchLibrary](docs/sdks/library/README.md#getsearchlibrary) - Search Library * [GetGenresLibrary](docs/sdks/library/README.md#getgenreslibrary) - Get Genres of library media @@ -192,7 +192,7 @@ var res = await sdk.Server.GetServerCapabilitiesAsync(); ### Server Variables -The default server `https://10.10.10.47:32400` contains variables and is set to `https://10.10.10.47:32400` by default. To override default values, the following parameters are available when initializing the SDK client instance: +The default server `{protocol}://{ip}:{port}` contains variables and is set to `https://10.10.10.47:32400` by default. To override default values, the following parameters are available when initializing the SDK client instance: | Variable | Parameter | Supported Values | Default | Description | | ---------- | ------------------------------------------------------- | -------------------------- | --------------- | ---------------------------------------------- | @@ -208,8 +208,8 @@ using LukeHagar.PlexAPI.SDK.Models.Components; var sdk = new PlexAPI( protocol: "https", - ip: "e0c3:bcc0:6bac:dccc:c4ec:34b1:ca98:4cb9", - port: "40311", + ip: "4982:bc2a:b4f8:efb5:2394:5bc3:ab4f:0e6d", + port: "44765", accessToken: "" ); diff --git a/RELEASES.md b/RELEASES.md index ad164b9..6482006 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -584,4 +584,14 @@ Based on: ### Generated - [csharp v0.14.11] . ### Releases -- [NuGet v0.14.11] https://www.nuget.org/packages/LukeHagar.PlexAPI.SDK/0.14.11 - . \ No newline at end of file +- [NuGet v0.14.11] https://www.nuget.org/packages/LukeHagar.PlexAPI.SDK/0.14.11 - . + +## 2025-06-04 00:24:55 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.555.2 (2.620.2) https://github.com/speakeasy-api/speakeasy +### Generated +- [csharp v0.15.0] . +### Releases +- [NuGet v0.15.0] https://www.nuget.org/packages/LukeHagar.PlexAPI.SDK/0.15.0 - . \ No newline at end of file diff --git a/codeSamples.yaml b/codeSamples.yaml index 5a51f57..293b57e 100644 --- a/codeSamples.yaml +++ b/codeSamples.yaml @@ -187,7 +187,7 @@ actions: var sdk = new PlexAPI(accessToken: ""); - var res = await sdk.Butler.StopTaskAsync(taskName: PathParamTaskName.BackupDatabase); + var res = await sdk.Butler.StopTaskAsync(taskName: PathParamTaskName.CleanOldCacheFiles); // handle response - target: $["paths"]["/butler/{taskName}"]["post"] @@ -202,7 +202,7 @@ actions: var sdk = new PlexAPI(accessToken: ""); - var res = await sdk.Butler.StartTaskAsync(taskName: TaskName.CleanOldBundles); + var res = await sdk.Butler.StartTaskAsync(taskName: TaskName.RefreshPeriodicMetadata); // handle response - target: $["paths"]["/clients"]["get"] @@ -296,14 +296,10 @@ actions: source: |- using LukeHagar.PlexAPI.SDK; using LukeHagar.PlexAPI.SDK.Models.Components; - using LukeHagar.PlexAPI.SDK.Models.Requests; var sdk = new PlexAPI(accessToken: ""); - var res = await sdk.Hubs.GetGlobalHubsAsync( - count: 1262.49D, - onlyTransient: OnlyTransient.One - ); + var res = await sdk.Hubs.GetGlobalHubsAsync(); // handle response - target: $["paths"]["/hubs/home/recentlyAdded"]["get"] @@ -319,9 +315,10 @@ actions: var sdk = new PlexAPI(accessToken: ""); GetRecentlyAddedRequest req = new GetRecentlyAddedRequest() { - ContentDirectoryID = 470161, + ContentDirectoryID = 39486, SectionID = 2, Type = LukeHagar.PlexAPI.SDK.Models.Requests.Type.TvShow, + IncludeMeta = IncludeMeta.Enable, }; var res = await sdk.Hubs.GetRecentlyAddedAsync(req); @@ -339,8 +336,7 @@ actions: var sdk = new PlexAPI(accessToken: ""); var res = await sdk.Search.PerformSearchAsync( - query: "dylan", - sectionId: 9372.7D, + query: "arnold", limit: 5D ); @@ -358,7 +354,6 @@ actions: var res = await sdk.Search.PerformVoiceSearchAsync( query: "dead+poop", - sectionId: 4094.8D, limit: 5D ); @@ -371,15 +366,10 @@ actions: source: |- using LukeHagar.PlexAPI.SDK; using LukeHagar.PlexAPI.SDK.Models.Components; - using LukeHagar.PlexAPI.SDK.Models.Requests; var sdk = new PlexAPI(accessToken: ""); - var res = await sdk.Hubs.GetLibraryHubsAsync( - sectionId: 6728.76D, - count: 639.24D, - onlyTransient: QueryParamOnlyTransient.One - ); + var res = await sdk.Hubs.GetLibraryHubsAsync(sectionId: 492.74D); // handle response - target: $["paths"]["/identity"]["get"] @@ -409,7 +399,7 @@ actions: var res = await sdk.Library.GetTopWatchedContentAsync( type: GetTopWatchedContentQueryParamType.TvShow, - includeGuids: 1 + includeGuids: GetTopWatchedContentQueryParamIncludeGuids.Enable ); // handle response @@ -424,10 +414,7 @@ actions: var sdk = new PlexAPI(accessToken: ""); - var res = await sdk.Library.GetFileHashAsync( - url: "file://C:\Image.png&type=13", - type: 4462.17D - ); + var res = await sdk.Library.GetFileHashAsync(url: "file://C:\Image.png&type=13"); // handle response - target: $["paths"]["/library/metadata/{ratingKey}"]["get"] @@ -443,7 +430,7 @@ actions: var sdk = new PlexAPI(accessToken: ""); GetMediaMetaDataRequest req = new GetMediaMetaDataRequest() { - RatingKey = 9518, + RatingKey = "21119,21617", IncludeConcerts = true, IncludeExtras = true, IncludeOnDeck = true, @@ -484,14 +471,12 @@ actions: source: |- using LukeHagar.PlexAPI.SDK; using LukeHagar.PlexAPI.SDK.Models.Components; - using System; var sdk = new PlexAPI(accessToken: ""); var res = await sdk.Library.PostMediaArtsAsync( ratingKey: 2268, - url: "https://api.mediux.pro/assets/fcfdc487-dd07-4993-a0c1-0a3015362e5b", - requestBody: System.Text.Encoding.UTF8.GetBytes("0xee51EFC6De") + url: "https://api.mediux.pro/assets/fcfdc487-dd07-4993-a0c1-0a3015362e5b" ); // handle response @@ -531,8 +516,8 @@ actions: var sdk = new PlexAPI(accessToken: ""); var res = await sdk.Library.GetMetadataChildrenAsync( - ratingKey: 1539.14D, - includeElements: "" + ratingKey: 2403.67D, + includeElements: "Stream" ); // handle response @@ -558,14 +543,12 @@ actions: source: |- using LukeHagar.PlexAPI.SDK; using LukeHagar.PlexAPI.SDK.Models.Components; - using System; var sdk = new PlexAPI(accessToken: ""); var res = await sdk.Library.PostMediaPosterAsync( ratingKey: 2268, - url: "https://api.mediux.pro/assets/fcfdc487-dd07-4993-a0c1-0a3015362e5b", - requestBody: System.Text.Encoding.UTF8.GetBytes("0x7C3d45ad4B") + url: "https://api.mediux.pro/assets/fcfdc487-dd07-4993-a0c1-0a3015362e5b" ); // handle response @@ -624,6 +607,7 @@ actions: }, SectionID = 2, Type = QueryParamType.TvShow, + IncludeMeta = QueryParamIncludeMeta.Enable, }; var res = await sdk.Library.GetRecentlyAddedLibraryAsync(req); @@ -648,6 +632,8 @@ actions: SearchTypes = new List() { SearchTypes.People, }, + IncludeCollections = GetSearchAllLibrariesQueryParamIncludeCollections.Enable, + IncludeExternalMedia = GetSearchAllLibrariesQueryParamIncludeExternalMedia.Enable, }; var res = await sdk.Library.GetSearchAllLibrariesAsync(req); @@ -680,7 +666,7 @@ actions: var sdk = new PlexAPI(accessToken: ""); GetWatchListRequest req = new GetWatchListRequest() { - Filter = Filter.Available, + Filter = Filter.Released, XPlexToken = "CV5xoxjTpFKUzBTShsaf", }; @@ -749,12 +735,17 @@ actions: var sdk = new PlexAPI(accessToken: ""); - GetAllMediaLibraryRequest req = new GetAllMediaLibraryRequest() { + GetLibrarySectionsAllRequest req = new GetLibrarySectionsAllRequest() { SectionKey = 9518, - Type = GetAllMediaLibraryQueryParamType.TvShow, + Type = GetLibrarySectionsAllQueryParamType.TvShow, + IncludeMeta = GetLibrarySectionsAllQueryParamIncludeMeta.Enable, + IncludeGuids = QueryParamIncludeGuids.Enable, + IncludeAdvanced = IncludeAdvanced.Enable, + IncludeCollections = QueryParamIncludeCollections.Enable, + IncludeExternalMedia = QueryParamIncludeExternalMedia.Enable, }; - var res = await sdk.Library.GetAllMediaLibraryAsync(req); + var res = await sdk.Library.GetLibrarySectionsAllAsync(req); // handle response - target: $["paths"]["/library/sections/{sectionKey}/country"]["get"] @@ -807,7 +798,7 @@ actions: var res = await sdk.Library.GetRefreshLibraryMetadataAsync( sectionKey: 9518, - force: Force.One + force: Force.Zero ); // handle response @@ -842,9 +833,11 @@ actions: var sdk = new PlexAPI(accessToken: ""); GetLibraryItemsRequest req = new GetLibraryItemsRequest() { - Tag = Tag.Edition, + Tag = Tag.Newest, + IncludeGuids = IncludeGuids.Enable, Type = GetLibraryItemsQueryParamType.TvShow, SectionKey = 9518, + IncludeMeta = GetLibraryItemsQueryParamIncludeMeta.Enable, }; var res = await sdk.Library.GetLibraryItemsAsync(req); @@ -944,10 +937,9 @@ actions: GetResizedPhotoRequest req = new GetResizedPhotoRequest() { Width = 110D, Height = 165D, - Opacity = 100, - Blur = 20D, + Blur = 0D, MinSize = MinSize.Zero, - Upscale = Upscale.One, + Upscale = Upscale.Zero, Url = "/library/metadata/49564/thumb/1654258204", }; @@ -988,7 +980,7 @@ actions: var sdk = new PlexAPI(); GetTokenByPinIdRequest req = new GetTokenByPinIdRequest() { - PinID = 408895, + PinID = 232248, ClientID = "3381b62b-9ab7-4e37-827b-203e9809eb58", ClientName = "Plex for Roku", DeviceNickname = "Roku 3", @@ -1007,14 +999,10 @@ actions: source: |- using LukeHagar.PlexAPI.SDK; using LukeHagar.PlexAPI.SDK.Models.Components; - using LukeHagar.PlexAPI.SDK.Models.Requests; var sdk = new PlexAPI(accessToken: ""); - var res = await sdk.Playlists.GetPlaylistsAsync( - playlistType: PlaylistType.Audio, - smart: QueryParamSmart.Zero - ); + var res = await sdk.Playlists.GetPlaylistsAsync(); // handle response - target: $["paths"]["/playlists"]["post"] @@ -1031,9 +1019,9 @@ actions: CreatePlaylistRequest req = new CreatePlaylistRequest() { Title = "", - Type = CreatePlaylistQueryParamType.Photo, + Type = CreatePlaylistQueryParamType.Audio, Smart = Smart.One, - Uri = "https://hoarse-testing.info/", + Uri = "https://short-term-disconnection.name/", }; var res = await sdk.Playlists.CreatePlaylistAsync(req); @@ -1053,7 +1041,7 @@ actions: var res = await sdk.Playlists.UploadPlaylistAsync( path: "/home/barkley/playlist.m3u", - force: QueryParamForce.Zero, + force: QueryParamForce.One, sectionID: 1 ); @@ -1069,7 +1057,7 @@ actions: var sdk = new PlexAPI(accessToken: ""); - var res = await sdk.Playlists.DeletePlaylistAsync(playlistID: 216.22D); + var res = await sdk.Playlists.DeletePlaylistAsync(playlistID: 3432.93D); // handle response - target: $["paths"]["/playlists/{playlistID}"]["get"] @@ -1083,7 +1071,7 @@ actions: var sdk = new PlexAPI(accessToken: ""); - var res = await sdk.Playlists.GetPlaylistAsync(playlistID: 4109.48D); + var res = await sdk.Playlists.GetPlaylistAsync(playlistID: 8419.53D); // handle response - target: $["paths"]["/playlists/{playlistID}"]["put"] @@ -1097,11 +1085,7 @@ actions: var sdk = new PlexAPI(accessToken: ""); - var res = await sdk.Playlists.UpdatePlaylistAsync( - playlistID: 3915D, - title: "", - summary: "" - ); + var res = await sdk.Playlists.UpdatePlaylistAsync(playlistID: 1579.66D); // handle response - target: $["paths"]["/playlists/{playlistID}/items"]["delete"] @@ -1115,7 +1099,7 @@ actions: var sdk = new PlexAPI(accessToken: ""); - var res = await sdk.Playlists.ClearPlaylistContentsAsync(playlistID: 1893.18D); + var res = await sdk.Playlists.ClearPlaylistContentsAsync(playlistID: 4137.37D); // handle response - target: $["paths"]["/playlists/{playlistID}/items"]["get"] @@ -1131,7 +1115,7 @@ actions: var sdk = new PlexAPI(accessToken: ""); var res = await sdk.Playlists.GetPlaylistContentsAsync( - playlistID: 5004.46D, + playlistID: 5535.42D, type: GetPlaylistContentsQueryParamType.TvShow ); @@ -1148,7 +1132,7 @@ actions: var sdk = new PlexAPI(accessToken: ""); var res = await sdk.Playlists.AddPlaylistContentsAsync( - playlistID: 8502.01D, + playlistID: 7013.44D, uri: "server://12345/com.plexapp.plugins.library/library/metadata/1", playQueueID: 123D ); @@ -1303,7 +1287,7 @@ actions: var sdk = new PlexAPI(accessToken: ""); var res = await sdk.Sessions.GetSessionHistoryAsync( - sort: "", + sort: "viewedAt:desc", accountId: 1, filter: new QueryParamFilter() {}, librarySectionID: 12 diff --git a/docs/Models/Errors/GetAllMediaLibraryBadRequest.md b/docs/Models/Errors/GetLibrarySectionsAllBadRequest.md similarity index 92% rename from docs/Models/Errors/GetAllMediaLibraryBadRequest.md rename to docs/Models/Errors/GetLibrarySectionsAllBadRequest.md index ba0dc44..67bb02e 100644 --- a/docs/Models/Errors/GetAllMediaLibraryBadRequest.md +++ b/docs/Models/Errors/GetLibrarySectionsAllBadRequest.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryBadRequest +# GetLibrarySectionsAllBadRequest Bad Request - A parameter was not specified, or was specified incorrectly. @@ -7,5 +7,5 @@ Bad Request - A parameter was not specified, or was specified incorrectly. | Field | Type | Required | Description | | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -| `Errors` | List<[GetAllMediaLibraryErrors](../../Models/Errors/GetAllMediaLibraryErrors.md)> | :heavy_minus_sign: | N/A | +| `Errors` | List<[GetLibrarySectionsAllErrors](../../Models/Errors/GetLibrarySectionsAllErrors.md)> | :heavy_minus_sign: | N/A | | `RawResponse` | [HttpResponseMessage](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpresponsemessage?view=net-5.0) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/Models/Errors/GetAllMediaLibraryErrors.md b/docs/Models/Errors/GetLibrarySectionsAllErrors.md similarity index 97% rename from docs/Models/Errors/GetAllMediaLibraryErrors.md rename to docs/Models/Errors/GetLibrarySectionsAllErrors.md index 250bf05..44b9dfd 100644 --- a/docs/Models/Errors/GetAllMediaLibraryErrors.md +++ b/docs/Models/Errors/GetLibrarySectionsAllErrors.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryErrors +# GetLibrarySectionsAllErrors ## Fields diff --git a/docs/Models/Errors/GetAllMediaLibraryLibraryErrors.md b/docs/Models/Errors/GetLibrarySectionsAllLibraryErrors.md similarity index 95% rename from docs/Models/Errors/GetAllMediaLibraryLibraryErrors.md rename to docs/Models/Errors/GetLibrarySectionsAllLibraryErrors.md index 0f4f674..efd4033 100644 --- a/docs/Models/Errors/GetAllMediaLibraryLibraryErrors.md +++ b/docs/Models/Errors/GetLibrarySectionsAllLibraryErrors.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryLibraryErrors +# GetLibrarySectionsAllLibraryErrors ## Fields diff --git a/docs/Models/Errors/GetAllMediaLibraryUnauthorized.md b/docs/Models/Errors/GetLibrarySectionsAllUnauthorized.md similarity index 91% rename from docs/Models/Errors/GetAllMediaLibraryUnauthorized.md rename to docs/Models/Errors/GetLibrarySectionsAllUnauthorized.md index db4bf44..99c75c4 100644 --- a/docs/Models/Errors/GetAllMediaLibraryUnauthorized.md +++ b/docs/Models/Errors/GetLibrarySectionsAllUnauthorized.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryUnauthorized +# GetLibrarySectionsAllUnauthorized Unauthorized - Returned if the X-Plex-Token is missing from the header or query. @@ -7,5 +7,5 @@ Unauthorized - Returned if the X-Plex-Token is missing from the header or query. | Field | Type | Required | Description | | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -| `Errors` | List<[GetAllMediaLibraryLibraryErrors](../../Models/Errors/GetAllMediaLibraryLibraryErrors.md)> | :heavy_minus_sign: | N/A | +| `Errors` | List<[GetLibrarySectionsAllLibraryErrors](../../Models/Errors/GetLibrarySectionsAllLibraryErrors.md)> | :heavy_minus_sign: | N/A | | `RawResponse` | [HttpResponseMessage](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpresponsemessage?view=net-5.0) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/Models/Requests/Country.md b/docs/Models/Requests/Country.md index 978b522..2ec3364 100644 --- a/docs/Models/Requests/Country.md +++ b/docs/Models/Requests/Country.md @@ -5,8 +5,8 @@ The filter query string for country media items. ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | -| `Id` | *int* | :heavy_check_mark: | N/A | 259 | -| `Tag` | *string* | :heavy_check_mark: | The country of origin of this media item | United States of America | -| `Filter` | *string* | :heavy_minus_sign: | N/A | country=19 | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | +| `Id` | *int* | :heavy_check_mark: | The unique identifier for the country.
NOTE: This is different for each Plex server and is not globally unique.
| 259 | +| `Tag` | *string* | :heavy_check_mark: | The country of origin of this media item | United States of America | +| `Filter` | *string* | :heavy_check_mark: | N/A | country=19 | \ No newline at end of file diff --git a/docs/Models/Requests/Director.md b/docs/Models/Requests/Director.md index d5bc7ba..2150043 100644 --- a/docs/Models/Requests/Director.md +++ b/docs/Models/Requests/Director.md @@ -3,6 +3,10 @@ ## Fields -| Field | Type | Required | Description | Example | -| -------------------- | -------------------- | -------------------- | -------------------- | -------------------- | -| `Tag` | *string* | :heavy_check_mark: | The role of Director | Danny Boyle | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | +| `Id` | *int* | :heavy_check_mark: | Unique identifier for the director. | 126522 | +| `Filter` | *string* | :heavy_check_mark: | The filter string used to query this director. | director=235876 | +| `Tag` | *string* | :heavy_check_mark: | The role of Director | Danny Boyle | +| `TagKey` | *string* | :heavy_check_mark: | A unique 24-character hexadecimal key associated with the director's tag, used for internal identification. | 5d776831151a60001f24d031 | +| `Thumb` | *string* | :heavy_minus_sign: | The absolute URL of the thumbnail image for the director. | https://metadata-static.plex.tv/8/people/8d65fa96804802e08f2de09fe014408e.jpg | \ No newline at end of file diff --git a/docs/Models/Requests/Genre.md b/docs/Models/Requests/Genre.md index a4951ce..108e0f6 100644 --- a/docs/Models/Requests/Genre.md +++ b/docs/Models/Requests/Genre.md @@ -5,8 +5,8 @@ The filter query string for similar items. ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- | -| `Id` | *long* | :heavy_check_mark: | N/A | 259 | -| `Filter` | *string* | :heavy_check_mark: | N/A | genre=19 | -| `Tag` | *string* | :heavy_check_mark: | The genre name of this media-item
| Crime | \ No newline at end of file +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | +| `Id` | *int* | :heavy_check_mark: | The unique identifier for the genre.
NOTE: This is different for each Plex server and is not globally unique.
| 259 | +| `Filter` | *string* | :heavy_check_mark: | N/A | genre=19 | +| `Tag` | *string* | :heavy_check_mark: | The genre name of this media-item
| Crime | \ No newline at end of file diff --git a/docs/Models/Requests/GetActorsLibraryQueryParamType.md b/docs/Models/Requests/GetActorsLibraryQueryParamType.md index c370962..54c839f 100644 --- a/docs/Models/Requests/GetActorsLibraryQueryParamType.md +++ b/docs/Models/Requests/GetActorsLibraryQueryParamType.md @@ -11,12 +11,14 @@ E.g. A movie library will not return anything with type 3 as there are no season ## Values -| Name | Value | -| --------- | --------- | -| `Movie` | 1 | -| `TvShow` | 2 | -| `Season` | 3 | -| `Episode` | 4 | -| `Audio` | 8 | -| `Album` | 9 | -| `Track` | 10 | \ No newline at end of file +| Name | Value | +| ------------ | ------------ | +| `Movie` | 1 | +| `TvShow` | 2 | +| `Season` | 3 | +| `Episode` | 4 | +| `Artist` | 5 | +| `Album` | 6 | +| `Track` | 7 | +| `PhotoAlbum` | 8 | +| `Photo` | 9 | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllLibrariesType.md b/docs/Models/Requests/GetAllLibrariesType.md index d484421..432e044 100644 --- a/docs/Models/Requests/GetAllLibrariesType.md +++ b/docs/Models/Requests/GetAllLibrariesType.md @@ -5,11 +5,15 @@ The library type ## Values -| Name | Value | -| --------- | --------- | -| `Movie` | movie | -| `TvShow` | show | -| `Season` | season | -| `Episode` | episode | -| `Artist` | artist | -| `Album` | album | \ No newline at end of file +| Name | Value | +| ------------ | ------------ | +| `Movie` | movie | +| `TvShow` | show | +| `Season` | season | +| `Episode` | episode | +| `Artist` | artist | +| `Album` | album | +| `Track` | track | +| `PhotoAlbum` | photoalbum | +| `Photo` | photo | +| `Collection` | collection | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryFieldType.md b/docs/Models/Requests/GetAllMediaLibraryFieldType.md deleted file mode 100644 index c450cf9..0000000 --- a/docs/Models/Requests/GetAllMediaLibraryFieldType.md +++ /dev/null @@ -1,9 +0,0 @@ -# GetAllMediaLibraryFieldType - - -## Fields - -| Field | Type | Required | Description | Example | -| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | -| `Type` | *string* | :heavy_check_mark: | N/A | tag | -| `Operator` | List<[GetAllMediaLibraryOperator](../../Models/Requests/GetAllMediaLibraryOperator.md)> | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryGuids.md b/docs/Models/Requests/GetAllMediaLibraryGuids.md deleted file mode 100644 index 6e14950..0000000 --- a/docs/Models/Requests/GetAllMediaLibraryGuids.md +++ /dev/null @@ -1,8 +0,0 @@ -# GetAllMediaLibraryGuids - - -## Fields - -| Field | Type | Required | Description | Example | -| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -| `Id` | *string* | :heavy_minus_sign: | The unique identifier for the Guid. Can be imdb://tt0286347, tmdb://1763, tvdb://2337
| tvdb://2337 | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryImage.md b/docs/Models/Requests/GetAllMediaLibraryImage.md deleted file mode 100644 index 05ae784..0000000 --- a/docs/Models/Requests/GetAllMediaLibraryImage.md +++ /dev/null @@ -1,10 +0,0 @@ -# GetAllMediaLibraryImage - - -## Fields - -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | -| `Alt` | *string* | :heavy_check_mark: | N/A | Episode 1 | -| `Type` | [GetAllMediaLibraryLibraryResponseType](../../Models/Requests/GetAllMediaLibraryLibraryResponseType.md) | :heavy_check_mark: | N/A | background | -| `Url` | *string* | :heavy_check_mark: | N/A | /library/metadata/45521/thumb/1644710589 | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryLibraryOptimizedForStreaming.md b/docs/Models/Requests/GetAllMediaLibraryLibraryOptimizedForStreaming.md deleted file mode 100644 index 5c6e563..0000000 --- a/docs/Models/Requests/GetAllMediaLibraryLibraryOptimizedForStreaming.md +++ /dev/null @@ -1,18 +0,0 @@ -# GetAllMediaLibraryLibraryOptimizedForStreaming - -Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true - - -## Supported Types - -### GetAllMediaLibraryOptimizedForStreaming1 - -```csharp -GetAllMediaLibraryLibraryOptimizedForStreaming.CreateGetAllMediaLibraryOptimizedForStreaming1(/* values here */); -``` - -### Boolean - -```csharp -GetAllMediaLibraryLibraryOptimizedForStreaming.CreateBoolean(/* values here */); -``` diff --git a/docs/Models/Requests/GetAllMediaLibraryLibraryType.md b/docs/Models/Requests/GetAllMediaLibraryLibraryType.md deleted file mode 100644 index 31fa60e..0000000 --- a/docs/Models/Requests/GetAllMediaLibraryLibraryType.md +++ /dev/null @@ -1,16 +0,0 @@ -# GetAllMediaLibraryLibraryType - -The type of media content - - - -## Values - -| Name | Value | -| --------- | --------- | -| `Movie` | movie | -| `TvShow` | show | -| `Season` | season | -| `Episode` | episode | -| `Artist` | artist | -| `Album` | album | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryMedia.md b/docs/Models/Requests/GetAllMediaLibraryMedia.md deleted file mode 100644 index 723857d..0000000 --- a/docs/Models/Requests/GetAllMediaLibraryMedia.md +++ /dev/null @@ -1,26 +0,0 @@ -# GetAllMediaLibraryMedia - - -## Fields - -| Field | Type | Required | Description | Example | -| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | -| `Id` | *long* | :heavy_check_mark: | Unique media identifier. | 387322 | -| `Duration` | *int* | :heavy_minus_sign: | Duration of the media in milliseconds. | 9610350 | -| `Bitrate` | *int* | :heavy_minus_sign: | Bitrate in bits per second. | 25512 | -| `Width` | *int* | :heavy_minus_sign: | Video width in pixels. | 3840 | -| `Height` | *int* | :heavy_minus_sign: | Video height in pixels. | 1602 | -| `AspectRatio` | *float* | :heavy_minus_sign: | Aspect ratio of the video. | 2.35 | -| `AudioChannels` | *int* | :heavy_minus_sign: | Number of audio channels. | 6 | -| `DisplayOffset` | *int* | :heavy_minus_sign: | N/A | 50 | -| `AudioCodec` | *string* | :heavy_minus_sign: | Audio codec used. | eac3 | -| `VideoCodec` | *string* | :heavy_minus_sign: | Video codec used. | hevc | -| `VideoResolution` | *string* | :heavy_minus_sign: | Video resolution (e.g., 4k). | 4k | -| `Container` | *string* | :heavy_minus_sign: | File container type. | mkv | -| `VideoFrameRate` | *string* | :heavy_minus_sign: | Frame rate of the video. Values found include NTSC, PAL, 24p
| 24p | -| `VideoProfile` | *string* | :heavy_minus_sign: | Video profile (e.g., main 10). | main 10 | -| `HasVoiceActivity` | *bool* | :heavy_minus_sign: | Indicates whether voice activity is detected. | false | -| `AudioProfile` | *string* | :heavy_minus_sign: | The audio profile used for the media (e.g., DTS, Dolby Digital, etc.). | dts | -| `OptimizedForStreaming` | [GetAllMediaLibraryOptimizedForStreaming](../../Models/Requests/GetAllMediaLibraryOptimizedForStreaming.md) | :heavy_minus_sign: | Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true | | -| `Has64bitOffsets` | *bool* | :heavy_minus_sign: | N/A | false | -| `Part` | List<[GetAllMediaLibraryPart](../../Models/Requests/GetAllMediaLibraryPart.md)> | :heavy_minus_sign: | An array of parts for this media item. | | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryMeta.md b/docs/Models/Requests/GetAllMediaLibraryMeta.md deleted file mode 100644 index c1d1c5d..0000000 --- a/docs/Models/Requests/GetAllMediaLibraryMeta.md +++ /dev/null @@ -1,12 +0,0 @@ -# GetAllMediaLibraryMeta - -The Meta object is only included in the response if the `includeMeta` parameter is set to `1`. - - - -## Fields - -| Field | Type | Required | Description | -| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | -| `Type` | List<[GetAllMediaLibraryType](../../Models/Requests/GetAllMediaLibraryType.md)> | :heavy_minus_sign: | N/A | -| `FieldType` | List<[GetAllMediaLibraryFieldType](../../Models/Requests/GetAllMediaLibraryFieldType.md)> | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryOptimizedForStreaming.md b/docs/Models/Requests/GetAllMediaLibraryOptimizedForStreaming.md deleted file mode 100644 index b057e5b..0000000 --- a/docs/Models/Requests/GetAllMediaLibraryOptimizedForStreaming.md +++ /dev/null @@ -1,18 +0,0 @@ -# GetAllMediaLibraryOptimizedForStreaming - -Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true - - -## Supported Types - -### OptimizedForStreaming1 - -```csharp -GetAllMediaLibraryOptimizedForStreaming.CreateOptimizedForStreaming1(/* values here */); -``` - -### Boolean - -```csharp -GetAllMediaLibraryOptimizedForStreaming.CreateBoolean(/* values here */); -``` diff --git a/docs/Models/Requests/GetAllMediaLibraryPart.md b/docs/Models/Requests/GetAllMediaLibraryPart.md deleted file mode 100644 index eef31ae..0000000 --- a/docs/Models/Requests/GetAllMediaLibraryPart.md +++ /dev/null @@ -1,23 +0,0 @@ -# GetAllMediaLibraryPart - - -## Fields - -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | -| `Accessible` | *bool* | :heavy_minus_sign: | Indicates if the part is accessible. | true | -| `Exists` | *bool* | :heavy_minus_sign: | Indicates if the part exists. | true | -| `Id` | *long* | :heavy_check_mark: | Unique part identifier. | 418385 | -| `Key` | *string* | :heavy_check_mark: | Key to access this part. | /library/parts/418385/1735864239/file.mkv | -| `Indexes` | *string* | :heavy_minus_sign: | N/A | sd | -| `Duration` | *int* | :heavy_minus_sign: | Duration of the part in milliseconds. | 9610350 | -| `File` | *string* | :heavy_check_mark: | File path for the part. | /mnt/Movies_1/W/Wicked (2024).mkv | -| `Size` | *long* | :heavy_check_mark: | File size in bytes. | 30649952104 | -| `PacketLength` | *int* | :heavy_minus_sign: | N/A | 188 | -| `Container` | *string* | :heavy_minus_sign: | Container format of the part. | mkv | -| `VideoProfile` | *string* | :heavy_minus_sign: | Video profile for the part. | main 10 | -| `AudioProfile` | *string* | :heavy_minus_sign: | The audio profile used for the media (e.g., DTS, Dolby Digital, etc.). | dts | -| `Has64bitOffsets` | *bool* | :heavy_minus_sign: | N/A | false | -| `OptimizedForStreaming` | [GetAllMediaLibraryLibraryOptimizedForStreaming](../../Models/Requests/GetAllMediaLibraryLibraryOptimizedForStreaming.md) | :heavy_minus_sign: | Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true | | -| `HasThumbnail` | [GetAllMediaLibraryHasThumbnail](../../Models/Requests/GetAllMediaLibraryHasThumbnail.md) | :heavy_minus_sign: | N/A | 1 | -| `Stream` | List<[GetAllMediaLibraryStream](../../Models/Requests/GetAllMediaLibraryStream.md)> | :heavy_minus_sign: | An array of streams for this part. | | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryQueryParamType.md b/docs/Models/Requests/GetAllMediaLibraryQueryParamType.md deleted file mode 100644 index 9cddd84..0000000 --- a/docs/Models/Requests/GetAllMediaLibraryQueryParamType.md +++ /dev/null @@ -1,22 +0,0 @@ -# GetAllMediaLibraryQueryParamType - -The type of media to retrieve or filter by. -1 = movie -2 = show -3 = season -4 = episode -E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries - - - -## Values - -| Name | Value | -| --------- | --------- | -| `Movie` | 1 | -| `TvShow` | 2 | -| `Season` | 3 | -| `Episode` | 4 | -| `Audio` | 8 | -| `Album` | 9 | -| `Track` | 10 | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryResponseBody.md b/docs/Models/Requests/GetAllMediaLibraryResponseBody.md deleted file mode 100644 index 7556207..0000000 --- a/docs/Models/Requests/GetAllMediaLibraryResponseBody.md +++ /dev/null @@ -1,10 +0,0 @@ -# GetAllMediaLibraryResponseBody - -Successful response containing media container data. - - -## Fields - -| Field | Type | Required | Description | -| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | -| `MediaContainer` | [GetAllMediaLibraryMediaContainer](../../Models/Requests/GetAllMediaLibraryMediaContainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibrarySort.md b/docs/Models/Requests/GetAllMediaLibrarySort.md deleted file mode 100644 index 492ea79..0000000 --- a/docs/Models/Requests/GetAllMediaLibrarySort.md +++ /dev/null @@ -1,15 +0,0 @@ -# GetAllMediaLibrarySort - - -## Fields - -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | -| `Default` | *string* | :heavy_minus_sign: | N/A | asc | -| `Active` | *bool* | :heavy_minus_sign: | N/A | false | -| `ActiveDirection` | [GetAllMediaLibraryActiveDirection](../../Models/Requests/GetAllMediaLibraryActiveDirection.md) | :heavy_minus_sign: | The direction of the sort. Can be either `asc` or `desc`.
| asc | -| `DefaultDirection` | [GetAllMediaLibraryDefaultDirection](../../Models/Requests/GetAllMediaLibraryDefaultDirection.md) | :heavy_minus_sign: | The direction of the sort. Can be either `asc` or `desc`.
| asc | -| `DescKey` | *string* | :heavy_minus_sign: | N/A | titleSort:desc | -| `FirstCharacterKey` | *string* | :heavy_minus_sign: | N/A | /library/sections/2/firstCharacter | -| `Key` | *string* | :heavy_check_mark: | N/A | titleSort | -| `Title` | *string* | :heavy_check_mark: | N/A | Title | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryStream.md b/docs/Models/Requests/GetAllMediaLibraryStream.md deleted file mode 100644 index 546029b..0000000 --- a/docs/Models/Requests/GetAllMediaLibraryStream.md +++ /dev/null @@ -1,58 +0,0 @@ -# GetAllMediaLibraryStream - - -## Fields - -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | -| `Id` | *long* | :heavy_check_mark: | Unique stream identifier. | 1002625 | -| `StreamType` | [GetAllMediaLibraryStreamType](../../Models/Requests/GetAllMediaLibraryStreamType.md) | :heavy_check_mark: | Stream type:
- 1 = video
- 2 = audio
- 3 = subtitle
| 1 | -| `Format` | *string* | :heavy_minus_sign: | Format of the stream (e.g., srt). | srt | -| `Default` | *bool* | :heavy_minus_sign: | Indicates if this stream is default. | true | -| `Codec` | *string* | :heavy_check_mark: | Codec used by the stream. | hevc | -| `Index` | *int* | :heavy_minus_sign: | Index of the stream. | 0 | -| `Bitrate` | *int* | :heavy_minus_sign: | Bitrate of the stream. | 24743 | -| `Language` | *string* | :heavy_minus_sign: | Language of the stream. | English | -| `LanguageTag` | *string* | :heavy_minus_sign: | Language tag (e.g., en). | en | -| `LanguageCode` | *string* | :heavy_minus_sign: | ISO language code. | eng | -| `HeaderCompression` | *bool* | :heavy_minus_sign: | Indicates whether header compression is enabled. | true | -| `DOVIBLCompatID` | *int* | :heavy_minus_sign: | Dolby Vision BL compatibility ID. | 1 | -| `DOVIBLPresent` | *bool* | :heavy_minus_sign: | Indicates if Dolby Vision BL is present. | true | -| `DOVIELPresent` | *bool* | :heavy_minus_sign: | Indicates if Dolby Vision EL is present. | false | -| `DOVILevel` | *int* | :heavy_minus_sign: | Dolby Vision level. | 6 | -| `DOVIPresent` | *bool* | :heavy_minus_sign: | Indicates if Dolby Vision is present. | true | -| `DOVIProfile` | *int* | :heavy_minus_sign: | Dolby Vision profile. | 8 | -| `DOVIRPUPresent` | *bool* | :heavy_minus_sign: | Indicates if Dolby Vision RPU is present. | true | -| `DOVIVersion` | *string* | :heavy_minus_sign: | Dolby Vision version. | 1.0 | -| `BitDepth` | *int* | :heavy_minus_sign: | Bit depth of the video stream. | 10 | -| `ChromaLocation` | *string* | :heavy_minus_sign: | Chroma sample location. | topleft | -| `ChromaSubsampling` | *string* | :heavy_minus_sign: | Chroma subsampling format. | 4:2:0 | -| `CodedHeight` | *int* | :heavy_minus_sign: | Coded video height. | 1608 | -| `CodedWidth` | *int* | :heavy_minus_sign: | Coded video width. | 3840 | -| `ClosedCaptions` | *bool* | :heavy_minus_sign: | N/A | true | -| `ColorPrimaries` | *string* | :heavy_minus_sign: | Color primaries used. | bt2020 | -| `ColorRange` | *string* | :heavy_minus_sign: | Color range (e.g., tv). | tv | -| `ColorSpace` | *string* | :heavy_minus_sign: | Color space. | bt2020nc | -| `ColorTrc` | *string* | :heavy_minus_sign: | Color transfer characteristics. | smpte2084 | -| `FrameRate` | *float* | :heavy_minus_sign: | Frame rate of the stream. | 23.976 | -| `Key` | *string* | :heavy_minus_sign: | Key to access this stream part. | /library/streams/216389 | -| `Height` | *int* | :heavy_minus_sign: | Height of the video stream. | 1602 | -| `Level` | *int* | :heavy_minus_sign: | Video level. | 150 | -| `Original` | *bool* | :heavy_minus_sign: | Indicates if this is the original stream. | true | -| `HasScalingMatrix` | *bool* | :heavy_minus_sign: | N/A | false | -| `Profile` | *string* | :heavy_minus_sign: | Video profile. | main 10 | -| `ScanType` | *string* | :heavy_minus_sign: | N/A | progressive | -| `EmbeddedInVideo` | *string* | :heavy_minus_sign: | N/A | progressive | -| `RefFrames` | *int* | :heavy_minus_sign: | Number of reference frames. | 1 | -| `Width` | *int* | :heavy_minus_sign: | Width of the video stream. | 3840 | -| `DisplayTitle` | *string* | :heavy_check_mark: | Display title for the stream. | 4K DoVi/HDR10 (HEVC Main 10) | -| `ExtendedDisplayTitle` | *string* | :heavy_check_mark: | Extended display title for the stream. | 4K DoVi/HDR10 (HEVC Main 10) | -| `Selected` | *bool* | :heavy_minus_sign: | Indicates if this stream is selected (applicable for audio streams). | true | -| `Forced` | *bool* | :heavy_minus_sign: | N/A | true | -| `Channels` | *int* | :heavy_minus_sign: | Number of audio channels (for audio streams). | 6 | -| `AudioChannelLayout` | *string* | :heavy_minus_sign: | Audio channel layout. | 5.1(side) | -| `SamplingRate` | *int* | :heavy_minus_sign: | Sampling rate for the audio stream. | 48000 | -| `CanAutoSync` | *bool* | :heavy_minus_sign: | Indicates if the stream can auto-sync. | false | -| `HearingImpaired` | *bool* | :heavy_minus_sign: | Indicates if the stream is for the hearing impaired. | true | -| `Dub` | *bool* | :heavy_minus_sign: | Indicates if the stream is a dub. | true | -| `Title` | *string* | :heavy_minus_sign: | Optional title for the stream (e.g., language variant). | SDH | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryType.md b/docs/Models/Requests/GetAllMediaLibraryType.md deleted file mode 100644 index 97b64b0..0000000 --- a/docs/Models/Requests/GetAllMediaLibraryType.md +++ /dev/null @@ -1,15 +0,0 @@ -# GetAllMediaLibraryType - - -## Fields - -| Field | Type | Required | Description | Example | -| ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | -| `Key` | *string* | :heavy_check_mark: | N/A | /library/sections/2/all?type=2 | -| `Type` | *string* | :heavy_check_mark: | N/A | filter | -| `Subtype` | *string* | :heavy_minus_sign: | N/A | clip | -| `Title` | *string* | :heavy_check_mark: | N/A | TV Shows | -| `Active` | *bool* | :heavy_check_mark: | N/A | false | -| `Filter` | List<[GetAllMediaLibraryFilter](../../Models/Requests/GetAllMediaLibraryFilter.md)> | :heavy_minus_sign: | N/A | | -| `Sort` | List<[GetAllMediaLibrarySort](../../Models/Requests/GetAllMediaLibrarySort.md)> | :heavy_minus_sign: | N/A | | -| `Field` | List<[GetAllMediaLibraryField](../../Models/Requests/GetAllMediaLibraryField.md)> | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Requests/GetCountriesLibraryQueryParamType.md b/docs/Models/Requests/GetCountriesLibraryQueryParamType.md index 722cb19..d29a551 100644 --- a/docs/Models/Requests/GetCountriesLibraryQueryParamType.md +++ b/docs/Models/Requests/GetCountriesLibraryQueryParamType.md @@ -11,12 +11,14 @@ E.g. A movie library will not return anything with type 3 as there are no season ## Values -| Name | Value | -| --------- | --------- | -| `Movie` | 1 | -| `TvShow` | 2 | -| `Season` | 3 | -| `Episode` | 4 | -| `Audio` | 8 | -| `Album` | 9 | -| `Track` | 10 | \ No newline at end of file +| Name | Value | +| ------------ | ------------ | +| `Movie` | 1 | +| `TvShow` | 2 | +| `Season` | 3 | +| `Episode` | 4 | +| `Artist` | 5 | +| `Album` | 6 | +| `Track` | 7 | +| `PhotoAlbum` | 8 | +| `Photo` | 9 | \ No newline at end of file diff --git a/docs/Models/Requests/GetGenresLibraryQueryParamType.md b/docs/Models/Requests/GetGenresLibraryQueryParamType.md index 4ef877e..9f1c219 100644 --- a/docs/Models/Requests/GetGenresLibraryQueryParamType.md +++ b/docs/Models/Requests/GetGenresLibraryQueryParamType.md @@ -11,12 +11,14 @@ E.g. A movie library will not return anything with type 3 as there are no season ## Values -| Name | Value | -| --------- | --------- | -| `Movie` | 1 | -| `TvShow` | 2 | -| `Season` | 3 | -| `Episode` | 4 | -| `Audio` | 8 | -| `Album` | 9 | -| `Track` | 10 | \ No newline at end of file +| Name | Value | +| ------------ | ------------ | +| `Movie` | 1 | +| `TvShow` | 2 | +| `Season` | 3 | +| `Episode` | 4 | +| `Artist` | 5 | +| `Album` | 6 | +| `Track` | 7 | +| `PhotoAlbum` | 8 | +| `Photo` | 9 | \ No newline at end of file diff --git a/docs/Models/Requests/GetLibraryItemsLibraryType.md b/docs/Models/Requests/GetLibraryItemsLibraryType.md index eae5ecb..0f6999d 100644 --- a/docs/Models/Requests/GetLibraryItemsLibraryType.md +++ b/docs/Models/Requests/GetLibraryItemsLibraryType.md @@ -1,16 +1,20 @@ # GetLibraryItemsLibraryType -The type of media content +The type of media content in the Plex library. This can represent videos, music, or photos. ## Values -| Name | Value | -| --------- | --------- | -| `Movie` | movie | -| `TvShow` | show | -| `Season` | season | -| `Episode` | episode | -| `Artist` | artist | -| `Album` | album | \ No newline at end of file +| Name | Value | +| ------------ | ------------ | +| `Movie` | movie | +| `TvShow` | show | +| `Season` | season | +| `Episode` | episode | +| `Artist` | artist | +| `Album` | album | +| `Track` | track | +| `PhotoAlbum` | photoalbum | +| `Photo` | photo | +| `Collection` | collection | \ No newline at end of file diff --git a/docs/Models/Requests/GetLibraryItemsMetadata.md b/docs/Models/Requests/GetLibraryItemsMetadata.md index b1cd16d..a11aeb4 100644 --- a/docs/Models/Requests/GetLibraryItemsMetadata.md +++ b/docs/Models/Requests/GetLibraryItemsMetadata.md @@ -13,7 +13,7 @@ | `LibrarySectionID` | *long* | :heavy_minus_sign: | N/A | 1 | | `LibrarySectionTitle` | *string* | :heavy_minus_sign: | N/A | Movies | | `LibrarySectionKey` | *string* | :heavy_minus_sign: | N/A | /library/sections/1 | -| `Type` | [GetLibraryItemsLibraryType](../../Models/Requests/GetLibraryItemsLibraryType.md) | :heavy_check_mark: | The type of media content
| movie | +| `Type` | [GetLibraryItemsLibraryType](../../Models/Requests/GetLibraryItemsLibraryType.md) | :heavy_check_mark: | The type of media content in the Plex library. This can represent videos, music, or photos.
| movie | | `Title` | *string* | :heavy_check_mark: | N/A | Avatar: The Way of Water | | `Slug` | *string* | :heavy_minus_sign: | N/A | 4-for-texas | | `ContentRating` | *string* | :heavy_minus_sign: | N/A | PG-13 | diff --git a/docs/Models/Requests/GetLibraryItemsQueryParamType.md b/docs/Models/Requests/GetLibraryItemsQueryParamType.md index 2aa19a3..02791ea 100644 --- a/docs/Models/Requests/GetLibraryItemsQueryParamType.md +++ b/docs/Models/Requests/GetLibraryItemsQueryParamType.md @@ -11,12 +11,14 @@ E.g. A movie library will not return anything with type 3 as there are no season ## Values -| Name | Value | -| --------- | --------- | -| `Movie` | 1 | -| `TvShow` | 2 | -| `Season` | 3 | -| `Episode` | 4 | -| `Audio` | 8 | -| `Album` | 9 | -| `Track` | 10 | \ No newline at end of file +| Name | Value | +| ------------ | ------------ | +| `Movie` | 1 | +| `TvShow` | 2 | +| `Season` | 3 | +| `Episode` | 4 | +| `Artist` | 5 | +| `Album` | 6 | +| `Track` | 7 | +| `PhotoAlbum` | 8 | +| `Photo` | 9 | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryActiveDirection.md b/docs/Models/Requests/GetLibrarySectionsAllActiveDirection.md similarity index 83% rename from docs/Models/Requests/GetAllMediaLibraryActiveDirection.md rename to docs/Models/Requests/GetLibrarySectionsAllActiveDirection.md index 459c02e..ad9278a 100644 --- a/docs/Models/Requests/GetAllMediaLibraryActiveDirection.md +++ b/docs/Models/Requests/GetLibrarySectionsAllActiveDirection.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryActiveDirection +# GetLibrarySectionsAllActiveDirection The direction of the sort. Can be either `asc` or `desc`. diff --git a/docs/Models/Requests/GetAllMediaLibraryCollection.md b/docs/Models/Requests/GetLibrarySectionsAllCollection.md similarity index 96% rename from docs/Models/Requests/GetAllMediaLibraryCollection.md rename to docs/Models/Requests/GetLibrarySectionsAllCollection.md index 73bb1dd..6a5ba61 100644 --- a/docs/Models/Requests/GetAllMediaLibraryCollection.md +++ b/docs/Models/Requests/GetLibrarySectionsAllCollection.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryCollection +# GetLibrarySectionsAllCollection ## Fields diff --git a/docs/Models/Requests/GetAllMediaLibraryCountry.md b/docs/Models/Requests/GetLibrarySectionsAllCountry.md similarity index 95% rename from docs/Models/Requests/GetAllMediaLibraryCountry.md rename to docs/Models/Requests/GetLibrarySectionsAllCountry.md index 4be36e5..8f7c182 100644 --- a/docs/Models/Requests/GetAllMediaLibraryCountry.md +++ b/docs/Models/Requests/GetLibrarySectionsAllCountry.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryCountry +# GetLibrarySectionsAllCountry ## Fields diff --git a/docs/Models/Requests/GetAllMediaLibraryDefaultDirection.md b/docs/Models/Requests/GetLibrarySectionsAllDefaultDirection.md similarity index 83% rename from docs/Models/Requests/GetAllMediaLibraryDefaultDirection.md rename to docs/Models/Requests/GetLibrarySectionsAllDefaultDirection.md index 555c7c0..3f42363 100644 --- a/docs/Models/Requests/GetAllMediaLibraryDefaultDirection.md +++ b/docs/Models/Requests/GetLibrarySectionsAllDefaultDirection.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryDefaultDirection +# GetLibrarySectionsAllDefaultDirection The direction of the sort. Can be either `asc` or `desc`. diff --git a/docs/Models/Requests/GetAllMediaLibraryDirector.md b/docs/Models/Requests/GetLibrarySectionsAllDirector.md similarity index 91% rename from docs/Models/Requests/GetAllMediaLibraryDirector.md rename to docs/Models/Requests/GetLibrarySectionsAllDirector.md index 9cbd384..734b296 100644 --- a/docs/Models/Requests/GetAllMediaLibraryDirector.md +++ b/docs/Models/Requests/GetLibrarySectionsAllDirector.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryDirector +# GetLibrarySectionsAllDirector ## Fields diff --git a/docs/Models/Requests/GetAllMediaLibraryField.md b/docs/Models/Requests/GetLibrarySectionsAllField.md similarity index 95% rename from docs/Models/Requests/GetAllMediaLibraryField.md rename to docs/Models/Requests/GetLibrarySectionsAllField.md index 830b91e..a160c61 100644 --- a/docs/Models/Requests/GetAllMediaLibraryField.md +++ b/docs/Models/Requests/GetLibrarySectionsAllField.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryField +# GetLibrarySectionsAllField ## Fields diff --git a/docs/Models/Requests/GetLibrarySectionsAllFieldType.md b/docs/Models/Requests/GetLibrarySectionsAllFieldType.md new file mode 100644 index 0000000..b709dd2 --- /dev/null +++ b/docs/Models/Requests/GetLibrarySectionsAllFieldType.md @@ -0,0 +1,9 @@ +# GetLibrarySectionsAllFieldType + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| `Type` | *string* | :heavy_check_mark: | N/A | tag | +| `Operator` | List<[GetLibrarySectionsAllOperator](../../Models/Requests/GetLibrarySectionsAllOperator.md)> | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryFilter.md b/docs/Models/Requests/GetLibrarySectionsAllFilter.md similarity index 97% rename from docs/Models/Requests/GetAllMediaLibraryFilter.md rename to docs/Models/Requests/GetLibrarySectionsAllFilter.md index 461b515..729884f 100644 --- a/docs/Models/Requests/GetAllMediaLibraryFilter.md +++ b/docs/Models/Requests/GetLibrarySectionsAllFilter.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryFilter +# GetLibrarySectionsAllFilter ## Fields diff --git a/docs/Models/Requests/GetAllMediaLibraryGenre.md b/docs/Models/Requests/GetLibrarySectionsAllGenre.md similarity index 95% rename from docs/Models/Requests/GetAllMediaLibraryGenre.md rename to docs/Models/Requests/GetLibrarySectionsAllGenre.md index 26739a5..8e47801 100644 --- a/docs/Models/Requests/GetAllMediaLibraryGenre.md +++ b/docs/Models/Requests/GetLibrarySectionsAllGenre.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryGenre +# GetLibrarySectionsAllGenre ## Fields diff --git a/docs/Models/Requests/GetLibrarySectionsAllGuids.md b/docs/Models/Requests/GetLibrarySectionsAllGuids.md new file mode 100644 index 0000000..c8f92aa --- /dev/null +++ b/docs/Models/Requests/GetLibrarySectionsAllGuids.md @@ -0,0 +1,8 @@ +# GetLibrarySectionsAllGuids + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Id` | *string* | :heavy_check_mark: | The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb://
| {
"imdbExample": {
"summary": "IMDB example",
"value": "imdb://tt13015952"
},
"tmdbExample": {
"summary": "TMDB example",
"value": "tmdb://2434012"
},
"tvdbExample": {
"summary": "TVDB example",
"value": "tvdb://7945991"
}
} | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryHasThumbnail.md b/docs/Models/Requests/GetLibrarySectionsAllHasThumbnail.md similarity index 79% rename from docs/Models/Requests/GetAllMediaLibraryHasThumbnail.md rename to docs/Models/Requests/GetLibrarySectionsAllHasThumbnail.md index 7fd371e..327600d 100644 --- a/docs/Models/Requests/GetAllMediaLibraryHasThumbnail.md +++ b/docs/Models/Requests/GetLibrarySectionsAllHasThumbnail.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryHasThumbnail +# GetLibrarySectionsAllHasThumbnail Indicates if the part has a thumbnail. diff --git a/docs/Models/Requests/GetLibrarySectionsAllImage.md b/docs/Models/Requests/GetLibrarySectionsAllImage.md new file mode 100644 index 0000000..2cfc6f2 --- /dev/null +++ b/docs/Models/Requests/GetLibrarySectionsAllImage.md @@ -0,0 +1,10 @@ +# GetLibrarySectionsAllImage + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | +| `Alt` | *string* | :heavy_check_mark: | N/A | Episode 1 | +| `Type` | [GetLibrarySectionsAllLibraryResponseType](../../Models/Requests/GetLibrarySectionsAllLibraryResponseType.md) | :heavy_check_mark: | N/A | background | +| `Url` | *string* | :heavy_check_mark: | N/A | /library/metadata/45521/thumb/1644710589 | \ No newline at end of file diff --git a/docs/Models/Requests/GetLibrarySectionsAllLibraryOptimizedForStreaming.md b/docs/Models/Requests/GetLibrarySectionsAllLibraryOptimizedForStreaming.md new file mode 100644 index 0000000..1851ab0 --- /dev/null +++ b/docs/Models/Requests/GetLibrarySectionsAllLibraryOptimizedForStreaming.md @@ -0,0 +1,18 @@ +# GetLibrarySectionsAllLibraryOptimizedForStreaming + +Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true + + +## Supported Types + +### GetLibrarySectionsAllOptimizedForStreaming1 + +```csharp +GetLibrarySectionsAllLibraryOptimizedForStreaming.CreateGetLibrarySectionsAllOptimizedForStreaming1(/* values here */); +``` + +### Boolean + +```csharp +GetLibrarySectionsAllLibraryOptimizedForStreaming.CreateBoolean(/* values here */); +``` diff --git a/docs/Models/Requests/GetAllMediaLibraryLibraryResponseType.md b/docs/Models/Requests/GetLibrarySectionsAllLibraryResponseType.md similarity index 83% rename from docs/Models/Requests/GetAllMediaLibraryLibraryResponseType.md rename to docs/Models/Requests/GetLibrarySectionsAllLibraryResponseType.md index 891737d..ccda328 100644 --- a/docs/Models/Requests/GetAllMediaLibraryLibraryResponseType.md +++ b/docs/Models/Requests/GetLibrarySectionsAllLibraryResponseType.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryLibraryResponseType +# GetLibrarySectionsAllLibraryResponseType ## Values diff --git a/docs/Models/Requests/GetLibrarySectionsAllLibraryType.md b/docs/Models/Requests/GetLibrarySectionsAllLibraryType.md new file mode 100644 index 0000000..5b9c6fb --- /dev/null +++ b/docs/Models/Requests/GetLibrarySectionsAllLibraryType.md @@ -0,0 +1,20 @@ +# GetLibrarySectionsAllLibraryType + +The type of media content in the Plex library. This can represent videos, music, or photos. + + + +## Values + +| Name | Value | +| ------------ | ------------ | +| `Movie` | movie | +| `TvShow` | show | +| `Season` | season | +| `Episode` | episode | +| `Artist` | artist | +| `Album` | album | +| `Track` | track | +| `PhotoAlbum` | photoalbum | +| `Photo` | photo | +| `Collection` | collection | \ No newline at end of file diff --git a/docs/Models/Requests/GetLibrarySectionsAllMedia.md b/docs/Models/Requests/GetLibrarySectionsAllMedia.md new file mode 100644 index 0000000..43a0c23 --- /dev/null +++ b/docs/Models/Requests/GetLibrarySectionsAllMedia.md @@ -0,0 +1,26 @@ +# GetLibrarySectionsAllMedia + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | +| `Id` | *long* | :heavy_check_mark: | Unique media identifier. | 387322 | +| `Duration` | *int* | :heavy_minus_sign: | Duration of the media in milliseconds. | 9610350 | +| `Bitrate` | *int* | :heavy_minus_sign: | Bitrate in bits per second. | 25512 | +| `Width` | *int* | :heavy_minus_sign: | Video width in pixels. | 3840 | +| `Height` | *int* | :heavy_minus_sign: | Video height in pixels. | 1602 | +| `AspectRatio` | *float* | :heavy_minus_sign: | Aspect ratio of the video. | 2.35 | +| `AudioChannels` | *int* | :heavy_minus_sign: | Number of audio channels. | 6 | +| `DisplayOffset` | *int* | :heavy_minus_sign: | N/A | 50 | +| `AudioCodec` | *string* | :heavy_minus_sign: | Audio codec used. | eac3 | +| `VideoCodec` | *string* | :heavy_minus_sign: | Video codec used. | hevc | +| `VideoResolution` | *string* | :heavy_minus_sign: | Video resolution (e.g., 4k). | 4k | +| `Container` | *string* | :heavy_minus_sign: | File container type. | mkv | +| `VideoFrameRate` | *string* | :heavy_minus_sign: | Frame rate of the video. Values found include NTSC, PAL, 24p
| 24p | +| `VideoProfile` | *string* | :heavy_minus_sign: | Video profile (e.g., main 10). | main 10 | +| `HasVoiceActivity` | *bool* | :heavy_minus_sign: | Indicates whether voice activity is detected. | false | +| `AudioProfile` | *string* | :heavy_minus_sign: | The audio profile used for the media (e.g., DTS, Dolby Digital, etc.). | dts | +| `OptimizedForStreaming` | [GetLibrarySectionsAllOptimizedForStreaming](../../Models/Requests/GetLibrarySectionsAllOptimizedForStreaming.md) | :heavy_minus_sign: | Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true | | +| `Has64bitOffsets` | *bool* | :heavy_minus_sign: | N/A | false | +| `Part` | List<[GetLibrarySectionsAllPart](../../Models/Requests/GetLibrarySectionsAllPart.md)> | :heavy_minus_sign: | An array of parts for this media item. | | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryMediaContainer.md b/docs/Models/Requests/GetLibrarySectionsAllMediaContainer.md similarity index 96% rename from docs/Models/Requests/GetAllMediaLibraryMediaContainer.md rename to docs/Models/Requests/GetLibrarySectionsAllMediaContainer.md index 3cc7be3..4e81b8a 100644 --- a/docs/Models/Requests/GetAllMediaLibraryMediaContainer.md +++ b/docs/Models/Requests/GetLibrarySectionsAllMediaContainer.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryMediaContainer +# GetLibrarySectionsAllMediaContainer ## Fields @@ -22,5 +22,5 @@ | `Title1` | *string* | :heavy_check_mark: | The primary title of the media container. | TV Series | | `Title2` | *string* | :heavy_check_mark: | The secondary title of the media container. | By Starring Actor | | `ViewGroup` | *string* | :heavy_check_mark: | Identifier for the view group layout. | secondary | -| `Meta` | [GetAllMediaLibraryMeta](../../Models/Requests/GetAllMediaLibraryMeta.md) | :heavy_minus_sign: | The Meta object is only included in the response if the `includeMeta` parameter is set to `1`.
| | -| `Metadata` | List<[GetAllMediaLibraryMetadata](../../Models/Requests/GetAllMediaLibraryMetadata.md)> | :heavy_minus_sign: | An array of metadata items. | | \ No newline at end of file +| `Meta` | [GetLibrarySectionsAllMeta](../../Models/Requests/GetLibrarySectionsAllMeta.md) | :heavy_minus_sign: | The Meta object is only included in the response if the `includeMeta` parameter is set to `1`.
| | +| `Metadata` | List<[GetLibrarySectionsAllMetadata](../../Models/Requests/GetLibrarySectionsAllMetadata.md)> | :heavy_minus_sign: | An array of metadata items. | | \ No newline at end of file diff --git a/docs/Models/Requests/GetLibrarySectionsAllMeta.md b/docs/Models/Requests/GetLibrarySectionsAllMeta.md new file mode 100644 index 0000000..97249ee --- /dev/null +++ b/docs/Models/Requests/GetLibrarySectionsAllMeta.md @@ -0,0 +1,12 @@ +# GetLibrarySectionsAllMeta + +The Meta object is only included in the response if the `includeMeta` parameter is set to `1`. + + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | +| `Type` | List<[GetLibrarySectionsAllType](../../Models/Requests/GetLibrarySectionsAllType.md)> | :heavy_minus_sign: | N/A | +| `FieldType` | List<[GetLibrarySectionsAllFieldType](../../Models/Requests/GetLibrarySectionsAllFieldType.md)> | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryMetadata.md b/docs/Models/Requests/GetLibrarySectionsAllMetadata.md similarity index 97% rename from docs/Models/Requests/GetAllMediaLibraryMetadata.md rename to docs/Models/Requests/GetLibrarySectionsAllMetadata.md index 58d711a..4fe8037 100644 --- a/docs/Models/Requests/GetAllMediaLibraryMetadata.md +++ b/docs/Models/Requests/GetLibrarySectionsAllMetadata.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryMetadata +# GetLibrarySectionsAllMetadata Unknown @@ -13,7 +13,7 @@ Unknown | `Guid` | *string* | :heavy_check_mark: | The globally unique identifier for the media item. | plex://movie/5d7768ba96b655001fdc0408 | | `Slug` | *string* | :heavy_check_mark: | A URL‐friendly version of the media title. | 4-for-texas | | `Studio` | *string* | :heavy_minus_sign: | The studio that produced the media item. | 20th Century Studios | -| `Type` | [GetAllMediaLibraryLibraryType](../../Models/Requests/GetAllMediaLibraryLibraryType.md) | :heavy_check_mark: | N/A | movie | +| `Type` | [GetLibrarySectionsAllLibraryType](../../Models/Requests/GetLibrarySectionsAllLibraryType.md) | :heavy_check_mark: | N/A | movie | | `Title` | *string* | :heavy_check_mark: | The title of the media item. | Avatar: The Way of Water | | `TitleSort` | *string* | :heavy_check_mark: | The sort title used for ordering media items. | Whale | | `ContentRating` | *string* | :heavy_minus_sign: | The content rating for the media item. | PG-13 | @@ -62,13 +62,13 @@ Unknown | `CreatedAtTZOffset` | *string* | :heavy_minus_sign: | The time zone offset for the creation timestamp, represented as a string. This offset indicates the difference from UTC. | 0 | | `LastViewedAt` | *int* | :heavy_minus_sign: | Unix timestamp for when the media item was last viewed. | 1682752242 | | `UserRating` | *float* | :heavy_minus_sign: | The rating provided by a user for the item. This value is expressed as a decimal number. | 10 | -| `Image` | List<[GetAllMediaLibraryImage](../../Models/Requests/GetAllMediaLibraryImage.md)> | :heavy_minus_sign: | N/A | | -| `UltraBlurColors` | [GetAllMediaLibraryUltraBlurColors](../../Models/Requests/GetAllMediaLibraryUltraBlurColors.md) | :heavy_minus_sign: | N/A | | -| `Media` | List<[GetAllMediaLibraryMedia](../../Models/Requests/GetAllMediaLibraryMedia.md)> | :heavy_minus_sign: | N/A | | -| `Genre` | List<[GetAllMediaLibraryGenre](../../Models/Requests/GetAllMediaLibraryGenre.md)> | :heavy_minus_sign: | N/A | | -| `Country` | List<[GetAllMediaLibraryCountry](../../Models/Requests/GetAllMediaLibraryCountry.md)> | :heavy_minus_sign: | N/A | | -| `Director` | List<[GetAllMediaLibraryDirector](../../Models/Requests/GetAllMediaLibraryDirector.md)> | :heavy_minus_sign: | N/A | | -| `Writer` | List<[GetAllMediaLibraryWriter](../../Models/Requests/GetAllMediaLibraryWriter.md)> | :heavy_minus_sign: | N/A | | -| `Role` | List<[GetAllMediaLibraryRole](../../Models/Requests/GetAllMediaLibraryRole.md)> | :heavy_minus_sign: | N/A | | -| `Guids` | List<[GetAllMediaLibraryGuids](../../Models/Requests/GetAllMediaLibraryGuids.md)> | :heavy_minus_sign: | N/A | | -| `Collection` | List<[GetAllMediaLibraryCollection](../../Models/Requests/GetAllMediaLibraryCollection.md)> | :heavy_minus_sign: | N/A | | \ No newline at end of file +| `Image` | List<[GetLibrarySectionsAllImage](../../Models/Requests/GetLibrarySectionsAllImage.md)> | :heavy_minus_sign: | N/A | | +| `UltraBlurColors` | [GetLibrarySectionsAllUltraBlurColors](../../Models/Requests/GetLibrarySectionsAllUltraBlurColors.md) | :heavy_minus_sign: | N/A | | +| `Guids` | List<[GetLibrarySectionsAllGuids](../../Models/Requests/GetLibrarySectionsAllGuids.md)> | :heavy_minus_sign: | N/A | | +| `Media` | List<[GetLibrarySectionsAllMedia](../../Models/Requests/GetLibrarySectionsAllMedia.md)> | :heavy_minus_sign: | N/A | | +| `Genre` | List<[GetLibrarySectionsAllGenre](../../Models/Requests/GetLibrarySectionsAllGenre.md)> | :heavy_minus_sign: | N/A | | +| `Country` | List<[GetLibrarySectionsAllCountry](../../Models/Requests/GetLibrarySectionsAllCountry.md)> | :heavy_minus_sign: | N/A | | +| `Director` | List<[GetLibrarySectionsAllDirector](../../Models/Requests/GetLibrarySectionsAllDirector.md)> | :heavy_minus_sign: | N/A | | +| `Writer` | List<[GetLibrarySectionsAllWriter](../../Models/Requests/GetLibrarySectionsAllWriter.md)> | :heavy_minus_sign: | N/A | | +| `Role` | List<[GetLibrarySectionsAllRole](../../Models/Requests/GetLibrarySectionsAllRole.md)> | :heavy_minus_sign: | N/A | | +| `Collection` | List<[GetLibrarySectionsAllCollection](../../Models/Requests/GetLibrarySectionsAllCollection.md)> | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryOperator.md b/docs/Models/Requests/GetLibrarySectionsAllOperator.md similarity index 93% rename from docs/Models/Requests/GetAllMediaLibraryOperator.md rename to docs/Models/Requests/GetLibrarySectionsAllOperator.md index f42bb21..36d9bad 100644 --- a/docs/Models/Requests/GetAllMediaLibraryOperator.md +++ b/docs/Models/Requests/GetLibrarySectionsAllOperator.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryOperator +# GetLibrarySectionsAllOperator ## Fields diff --git a/docs/Models/Requests/GetLibrarySectionsAllOptimizedForStreaming.md b/docs/Models/Requests/GetLibrarySectionsAllOptimizedForStreaming.md new file mode 100644 index 0000000..e13234c --- /dev/null +++ b/docs/Models/Requests/GetLibrarySectionsAllOptimizedForStreaming.md @@ -0,0 +1,18 @@ +# GetLibrarySectionsAllOptimizedForStreaming + +Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true + + +## Supported Types + +### OptimizedForStreaming1 + +```csharp +GetLibrarySectionsAllOptimizedForStreaming.CreateOptimizedForStreaming1(/* values here */); +``` + +### Boolean + +```csharp +GetLibrarySectionsAllOptimizedForStreaming.CreateBoolean(/* values here */); +``` diff --git a/docs/Models/Requests/GetAllMediaLibraryOptimizedForStreaming1.md b/docs/Models/Requests/GetLibrarySectionsAllOptimizedForStreaming1.md similarity index 66% rename from docs/Models/Requests/GetAllMediaLibraryOptimizedForStreaming1.md rename to docs/Models/Requests/GetLibrarySectionsAllOptimizedForStreaming1.md index 44999d1..d9de3df 100644 --- a/docs/Models/Requests/GetAllMediaLibraryOptimizedForStreaming1.md +++ b/docs/Models/Requests/GetLibrarySectionsAllOptimizedForStreaming1.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryOptimizedForStreaming1 +# GetLibrarySectionsAllOptimizedForStreaming1 ## Values diff --git a/docs/Models/Requests/GetLibrarySectionsAllPart.md b/docs/Models/Requests/GetLibrarySectionsAllPart.md new file mode 100644 index 0000000..3df1597 --- /dev/null +++ b/docs/Models/Requests/GetLibrarySectionsAllPart.md @@ -0,0 +1,23 @@ +# GetLibrarySectionsAllPart + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | +| `Accessible` | *bool* | :heavy_minus_sign: | Indicates if the part is accessible. | true | +| `Exists` | *bool* | :heavy_minus_sign: | Indicates if the part exists. | true | +| `Id` | *long* | :heavy_check_mark: | Unique part identifier. | 418385 | +| `Key` | *string* | :heavy_check_mark: | Key to access this part. | /library/parts/418385/1735864239/file.mkv | +| `Indexes` | *string* | :heavy_minus_sign: | N/A | sd | +| `Duration` | *int* | :heavy_minus_sign: | Duration of the part in milliseconds. | 9610350 | +| `File` | *string* | :heavy_check_mark: | File path for the part. | /mnt/Movies_1/W/Wicked (2024).mkv | +| `Size` | *long* | :heavy_check_mark: | File size in bytes. | 30649952104 | +| `PacketLength` | *int* | :heavy_minus_sign: | N/A | 188 | +| `Container` | *string* | :heavy_minus_sign: | Container format of the part. | mkv | +| `VideoProfile` | *string* | :heavy_minus_sign: | Video profile for the part. | main 10 | +| `AudioProfile` | *string* | :heavy_minus_sign: | The audio profile used for the media (e.g., DTS, Dolby Digital, etc.). | dts | +| `Has64bitOffsets` | *bool* | :heavy_minus_sign: | N/A | false | +| `OptimizedForStreaming` | [GetLibrarySectionsAllLibraryOptimizedForStreaming](../../Models/Requests/GetLibrarySectionsAllLibraryOptimizedForStreaming.md) | :heavy_minus_sign: | Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true | | +| `HasThumbnail` | [GetLibrarySectionsAllHasThumbnail](../../Models/Requests/GetLibrarySectionsAllHasThumbnail.md) | :heavy_minus_sign: | N/A | 1 | +| `Stream` | List<[GetLibrarySectionsAllStream](../../Models/Requests/GetLibrarySectionsAllStream.md)> | :heavy_minus_sign: | An array of streams for this part. | | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryQueryParamIncludeMeta.md b/docs/Models/Requests/GetLibrarySectionsAllQueryParamIncludeMeta.md similarity index 77% rename from docs/Models/Requests/GetAllMediaLibraryQueryParamIncludeMeta.md rename to docs/Models/Requests/GetLibrarySectionsAllQueryParamIncludeMeta.md index 7991b44..7f15773 100644 --- a/docs/Models/Requests/GetAllMediaLibraryQueryParamIncludeMeta.md +++ b/docs/Models/Requests/GetLibrarySectionsAllQueryParamIncludeMeta.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryQueryParamIncludeMeta +# GetLibrarySectionsAllQueryParamIncludeMeta Adds the Meta object to the response diff --git a/docs/Models/Requests/GetLibrarySectionsAllQueryParamType.md b/docs/Models/Requests/GetLibrarySectionsAllQueryParamType.md new file mode 100644 index 0000000..7e859e6 --- /dev/null +++ b/docs/Models/Requests/GetLibrarySectionsAllQueryParamType.md @@ -0,0 +1,24 @@ +# GetLibrarySectionsAllQueryParamType + +The type of media to retrieve or filter by. +1 = movie +2 = show +3 = season +4 = episode +E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries + + + +## Values + +| Name | Value | +| ------------ | ------------ | +| `Movie` | 1 | +| `TvShow` | 2 | +| `Season` | 3 | +| `Episode` | 4 | +| `Artist` | 5 | +| `Album` | 6 | +| `Track` | 7 | +| `PhotoAlbum` | 8 | +| `Photo` | 9 | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryRequest.md b/docs/Models/Requests/GetLibrarySectionsAllRequest.md similarity index 97% rename from docs/Models/Requests/GetAllMediaLibraryRequest.md rename to docs/Models/Requests/GetLibrarySectionsAllRequest.md index f3d0453..15855e4 100644 --- a/docs/Models/Requests/GetAllMediaLibraryRequest.md +++ b/docs/Models/Requests/GetLibrarySectionsAllRequest.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryRequest +# GetLibrarySectionsAllRequest ## Fields @@ -6,8 +6,8 @@ | Field | Type | Required | Description | Example | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `SectionKey` | *int* | :heavy_check_mark: | The unique key of the Plex library.
Note: This is unique in the context of the Plex server.
| 9518 | -| `Type` | [GetAllMediaLibraryQueryParamType](../../Models/Requests/GetAllMediaLibraryQueryParamType.md) | :heavy_check_mark: | The type of media to retrieve or filter by.
1 = movie
2 = show
3 = season
4 = episode
E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries
| 2 | -| `IncludeMeta` | [GetAllMediaLibraryQueryParamIncludeMeta](../../Models/Requests/GetAllMediaLibraryQueryParamIncludeMeta.md) | :heavy_minus_sign: | Adds the Meta object to the response
| 1 | +| `Type` | [GetLibrarySectionsAllQueryParamType](../../Models/Requests/GetLibrarySectionsAllQueryParamType.md) | :heavy_check_mark: | The type of media to retrieve or filter by.
1 = movie
2 = show
3 = season
4 = episode
E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries
| 2 | +| `IncludeMeta` | [GetLibrarySectionsAllQueryParamIncludeMeta](../../Models/Requests/GetLibrarySectionsAllQueryParamIncludeMeta.md) | :heavy_minus_sign: | Adds the Meta object to the response
| 1 | | `IncludeGuids` | [QueryParamIncludeGuids](../../Models/Requests/QueryParamIncludeGuids.md) | :heavy_minus_sign: | Adds the Guid object to the response
| 1 | | `IncludeAdvanced` | [IncludeAdvanced](../../Models/Requests/IncludeAdvanced.md) | :heavy_minus_sign: | N/A | 1 | | `IncludeCollections` | [QueryParamIncludeCollections](../../Models/Requests/QueryParamIncludeCollections.md) | :heavy_minus_sign: | N/A | 1 | diff --git a/docs/Models/Requests/GetAllMediaLibraryResponse.md b/docs/Models/Requests/GetLibrarySectionsAllResponse.md similarity index 92% rename from docs/Models/Requests/GetAllMediaLibraryResponse.md rename to docs/Models/Requests/GetLibrarySectionsAllResponse.md index 89067a9..c156eb2 100644 --- a/docs/Models/Requests/GetAllMediaLibraryResponse.md +++ b/docs/Models/Requests/GetLibrarySectionsAllResponse.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryResponse +# GetLibrarySectionsAllResponse ## Fields @@ -8,4 +8,4 @@ | `ContentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | | `StatusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation | | `RawResponse` | [HttpResponseMessage](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpresponsemessage?view=net-5.0) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | -| `Object` | [GetAllMediaLibraryResponseBody](../../Models/Requests/GetAllMediaLibraryResponseBody.md) | :heavy_minus_sign: | Successful response containing media container data. | \ No newline at end of file +| `Object` | [GetLibrarySectionsAllResponseBody](../../Models/Requests/GetLibrarySectionsAllResponseBody.md) | :heavy_minus_sign: | Successful response containing media container data. | \ No newline at end of file diff --git a/docs/Models/Requests/GetLibrarySectionsAllResponseBody.md b/docs/Models/Requests/GetLibrarySectionsAllResponseBody.md new file mode 100644 index 0000000..97d7e11 --- /dev/null +++ b/docs/Models/Requests/GetLibrarySectionsAllResponseBody.md @@ -0,0 +1,10 @@ +# GetLibrarySectionsAllResponseBody + +Successful response containing media container data. + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | +| `MediaContainer` | [GetLibrarySectionsAllMediaContainer](../../Models/Requests/GetLibrarySectionsAllMediaContainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryRole.md b/docs/Models/Requests/GetLibrarySectionsAllRole.md similarity index 97% rename from docs/Models/Requests/GetAllMediaLibraryRole.md rename to docs/Models/Requests/GetLibrarySectionsAllRole.md index d6837bb..10233d2 100644 --- a/docs/Models/Requests/GetAllMediaLibraryRole.md +++ b/docs/Models/Requests/GetLibrarySectionsAllRole.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryRole +# GetLibrarySectionsAllRole ## Fields diff --git a/docs/Models/Requests/GetLibrarySectionsAllSort.md b/docs/Models/Requests/GetLibrarySectionsAllSort.md new file mode 100644 index 0000000..e72e8f9 --- /dev/null +++ b/docs/Models/Requests/GetLibrarySectionsAllSort.md @@ -0,0 +1,15 @@ +# GetLibrarySectionsAllSort + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | +| `Default` | *string* | :heavy_minus_sign: | N/A | asc | +| `Active` | *bool* | :heavy_minus_sign: | N/A | false | +| `ActiveDirection` | [GetLibrarySectionsAllActiveDirection](../../Models/Requests/GetLibrarySectionsAllActiveDirection.md) | :heavy_minus_sign: | The direction of the sort. Can be either `asc` or `desc`.
| asc | +| `DefaultDirection` | [GetLibrarySectionsAllDefaultDirection](../../Models/Requests/GetLibrarySectionsAllDefaultDirection.md) | :heavy_minus_sign: | The direction of the sort. Can be either `asc` or `desc`.
| asc | +| `DescKey` | *string* | :heavy_minus_sign: | N/A | titleSort:desc | +| `FirstCharacterKey` | *string* | :heavy_minus_sign: | N/A | /library/sections/2/firstCharacter | +| `Key` | *string* | :heavy_check_mark: | N/A | titleSort | +| `Title` | *string* | :heavy_check_mark: | N/A | Title | \ No newline at end of file diff --git a/docs/Models/Requests/GetLibrarySectionsAllStream.md b/docs/Models/Requests/GetLibrarySectionsAllStream.md new file mode 100644 index 0000000..b1f322a --- /dev/null +++ b/docs/Models/Requests/GetLibrarySectionsAllStream.md @@ -0,0 +1,58 @@ +# GetLibrarySectionsAllStream + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | +| `Id` | *long* | :heavy_check_mark: | Unique stream identifier. | 1002625 | +| `StreamType` | [GetLibrarySectionsAllStreamType](../../Models/Requests/GetLibrarySectionsAllStreamType.md) | :heavy_check_mark: | Stream type:
- 1 = video
- 2 = audio
- 3 = subtitle
| 1 | +| `Format` | *string* | :heavy_minus_sign: | Format of the stream (e.g., srt). | srt | +| `Default` | *bool* | :heavy_minus_sign: | Indicates if this stream is default. | true | +| `Codec` | *string* | :heavy_check_mark: | Codec used by the stream. | hevc | +| `Index` | *int* | :heavy_minus_sign: | Index of the stream. | 0 | +| `Bitrate` | *int* | :heavy_minus_sign: | Bitrate of the stream. | 24743 | +| `Language` | *string* | :heavy_minus_sign: | Language of the stream. | English | +| `LanguageTag` | *string* | :heavy_minus_sign: | Language tag (e.g., en). | en | +| `LanguageCode` | *string* | :heavy_minus_sign: | ISO language code. | eng | +| `HeaderCompression` | *bool* | :heavy_minus_sign: | Indicates whether header compression is enabled. | true | +| `DOVIBLCompatID` | *int* | :heavy_minus_sign: | Dolby Vision BL compatibility ID. | 1 | +| `DOVIBLPresent` | *bool* | :heavy_minus_sign: | Indicates if Dolby Vision BL is present. | true | +| `DOVIELPresent` | *bool* | :heavy_minus_sign: | Indicates if Dolby Vision EL is present. | false | +| `DOVILevel` | *int* | :heavy_minus_sign: | Dolby Vision level. | 6 | +| `DOVIPresent` | *bool* | :heavy_minus_sign: | Indicates if Dolby Vision is present. | true | +| `DOVIProfile` | *int* | :heavy_minus_sign: | Dolby Vision profile. | 8 | +| `DOVIRPUPresent` | *bool* | :heavy_minus_sign: | Indicates if Dolby Vision RPU is present. | true | +| `DOVIVersion` | *string* | :heavy_minus_sign: | Dolby Vision version. | 1.0 | +| `BitDepth` | *int* | :heavy_minus_sign: | Bit depth of the video stream. | 10 | +| `ChromaLocation` | *string* | :heavy_minus_sign: | Chroma sample location. | topleft | +| `ChromaSubsampling` | *string* | :heavy_minus_sign: | Chroma subsampling format. | 4:2:0 | +| `CodedHeight` | *int* | :heavy_minus_sign: | Coded video height. | 1608 | +| `CodedWidth` | *int* | :heavy_minus_sign: | Coded video width. | 3840 | +| `ClosedCaptions` | *bool* | :heavy_minus_sign: | N/A | true | +| `ColorPrimaries` | *string* | :heavy_minus_sign: | Color primaries used. | bt2020 | +| `ColorRange` | *string* | :heavy_minus_sign: | Color range (e.g., tv). | tv | +| `ColorSpace` | *string* | :heavy_minus_sign: | Color space. | bt2020nc | +| `ColorTrc` | *string* | :heavy_minus_sign: | Color transfer characteristics. | smpte2084 | +| `FrameRate` | *float* | :heavy_minus_sign: | Frame rate of the stream. | 23.976 | +| `Key` | *string* | :heavy_minus_sign: | Key to access this stream part. | /library/streams/216389 | +| `Height` | *int* | :heavy_minus_sign: | Height of the video stream. | 1602 | +| `Level` | *int* | :heavy_minus_sign: | Video level. | 150 | +| `Original` | *bool* | :heavy_minus_sign: | Indicates if this is the original stream. | true | +| `HasScalingMatrix` | *bool* | :heavy_minus_sign: | N/A | false | +| `Profile` | *string* | :heavy_minus_sign: | Video profile. | main 10 | +| `ScanType` | *string* | :heavy_minus_sign: | N/A | progressive | +| `EmbeddedInVideo` | *string* | :heavy_minus_sign: | N/A | progressive | +| `RefFrames` | *int* | :heavy_minus_sign: | Number of reference frames. | 1 | +| `Width` | *int* | :heavy_minus_sign: | Width of the video stream. | 3840 | +| `DisplayTitle` | *string* | :heavy_check_mark: | Display title for the stream. | 4K DoVi/HDR10 (HEVC Main 10) | +| `ExtendedDisplayTitle` | *string* | :heavy_check_mark: | Extended display title for the stream. | 4K DoVi/HDR10 (HEVC Main 10) | +| `Selected` | *bool* | :heavy_minus_sign: | Indicates if this stream is selected (applicable for audio streams). | true | +| `Forced` | *bool* | :heavy_minus_sign: | N/A | true | +| `Channels` | *int* | :heavy_minus_sign: | Number of audio channels (for audio streams). | 6 | +| `AudioChannelLayout` | *string* | :heavy_minus_sign: | Audio channel layout. | 5.1(side) | +| `SamplingRate` | *int* | :heavy_minus_sign: | Sampling rate for the audio stream. | 48000 | +| `CanAutoSync` | *bool* | :heavy_minus_sign: | Indicates if the stream can auto-sync. | false | +| `HearingImpaired` | *bool* | :heavy_minus_sign: | Indicates if the stream is for the hearing impaired. | true | +| `Dub` | *bool* | :heavy_minus_sign: | Indicates if the stream is a dub. | true | +| `Title` | *string* | :heavy_minus_sign: | Optional title for the stream (e.g., language variant). | SDH | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryStreamType.md b/docs/Models/Requests/GetLibrarySectionsAllStreamType.md similarity index 86% rename from docs/Models/Requests/GetAllMediaLibraryStreamType.md rename to docs/Models/Requests/GetLibrarySectionsAllStreamType.md index 9156115..07e5345 100644 --- a/docs/Models/Requests/GetAllMediaLibraryStreamType.md +++ b/docs/Models/Requests/GetLibrarySectionsAllStreamType.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryStreamType +# GetLibrarySectionsAllStreamType Stream type: - 1 = video diff --git a/docs/Models/Requests/GetLibrarySectionsAllType.md b/docs/Models/Requests/GetLibrarySectionsAllType.md new file mode 100644 index 0000000..a9f43ef --- /dev/null +++ b/docs/Models/Requests/GetLibrarySectionsAllType.md @@ -0,0 +1,15 @@ +# GetLibrarySectionsAllType + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | +| `Key` | *string* | :heavy_check_mark: | N/A | /library/sections/2/all?type=2 | +| `Type` | *string* | :heavy_check_mark: | N/A | filter | +| `Subtype` | *string* | :heavy_minus_sign: | N/A | clip | +| `Title` | *string* | :heavy_check_mark: | N/A | TV Shows | +| `Active` | *bool* | :heavy_check_mark: | N/A | false | +| `Filter` | List<[GetLibrarySectionsAllFilter](../../Models/Requests/GetLibrarySectionsAllFilter.md)> | :heavy_minus_sign: | N/A | | +| `Sort` | List<[GetLibrarySectionsAllSort](../../Models/Requests/GetLibrarySectionsAllSort.md)> | :heavy_minus_sign: | N/A | | +| `Field` | List<[GetLibrarySectionsAllField](../../Models/Requests/GetLibrarySectionsAllField.md)> | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryUltraBlurColors.md b/docs/Models/Requests/GetLibrarySectionsAllUltraBlurColors.md similarity index 94% rename from docs/Models/Requests/GetAllMediaLibraryUltraBlurColors.md rename to docs/Models/Requests/GetLibrarySectionsAllUltraBlurColors.md index b515745..ea42dca 100644 --- a/docs/Models/Requests/GetAllMediaLibraryUltraBlurColors.md +++ b/docs/Models/Requests/GetLibrarySectionsAllUltraBlurColors.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryUltraBlurColors +# GetLibrarySectionsAllUltraBlurColors ## Fields diff --git a/docs/Models/Requests/GetAllMediaLibraryWriter.md b/docs/Models/Requests/GetLibrarySectionsAllWriter.md similarity index 91% rename from docs/Models/Requests/GetAllMediaLibraryWriter.md rename to docs/Models/Requests/GetLibrarySectionsAllWriter.md index 9c71fcb..b7e940d 100644 --- a/docs/Models/Requests/GetAllMediaLibraryWriter.md +++ b/docs/Models/Requests/GetLibrarySectionsAllWriter.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryWriter +# GetLibrarySectionsAllWriter ## Fields diff --git a/docs/Models/Requests/GetMediaMetaDataCountry.md b/docs/Models/Requests/GetMediaMetaDataCountry.md index c38c9e5..9d9cd56 100644 --- a/docs/Models/Requests/GetMediaMetaDataCountry.md +++ b/docs/Models/Requests/GetMediaMetaDataCountry.md @@ -5,8 +5,8 @@ The filter query string for country media items. ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | -| `Id` | *int* | :heavy_check_mark: | N/A | 259 | -| `Tag` | *string* | :heavy_check_mark: | The country of origin of this media item | United States of America | -| `Filter` | *string* | :heavy_minus_sign: | N/A | country=19 | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | +| `Id` | *int* | :heavy_check_mark: | The unique identifier for the country.
NOTE: This is different for each Plex server and is not globally unique.
| 259 | +| `Tag` | *string* | :heavy_check_mark: | The country of origin of this media item | United States of America | +| `Filter` | *string* | :heavy_check_mark: | N/A | country=19 | \ No newline at end of file diff --git a/docs/Models/Requests/GetMediaMetaDataDirector.md b/docs/Models/Requests/GetMediaMetaDataDirector.md index dbad887..68955e1 100644 --- a/docs/Models/Requests/GetMediaMetaDataDirector.md +++ b/docs/Models/Requests/GetMediaMetaDataDirector.md @@ -3,10 +3,10 @@ ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | -| `Id` | *int* | :heavy_check_mark: | Unique identifier for the director. | 126522 | -| `Tag` | *string* | :heavy_check_mark: | The role of Director | Danny Boyle | -| `Filter` | *string* | :heavy_check_mark: | The filter string used to query this director. | director=235876 | -| `TagKey` | *string* | :heavy_minus_sign: | A unique key associated with the director's tag, used for internal identification. | 5d776831151a60001f24d031 | -| `Thumb` | *string* | :heavy_minus_sign: | The URL of the thumbnail image for the director. | https://metadata-static.plex.tv/8/people/8d65fa96804802e08f2de09fe014408e.jpg | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | +| `Id` | *int* | :heavy_check_mark: | Unique identifier for the director. | 126522 | +| `Tag` | *string* | :heavy_check_mark: | The role of Director | Danny Boyle | +| `Filter` | *string* | :heavy_check_mark: | The filter string used to query this director. | director=235876 | +| `TagKey` | *string* | :heavy_check_mark: | A unique 24-character hexadecimal key associated with the director's tag, used for internal identification. | 5d776831151a60001f24d031 | +| `Thumb` | *string* | :heavy_minus_sign: | The absolute URL of the thumbnail image for the director. | https://metadata-static.plex.tv/8/people/8d65fa96804802e08f2de09fe014408e.jpg | \ No newline at end of file diff --git a/docs/Models/Requests/GetMediaMetaDataGenre.md b/docs/Models/Requests/GetMediaMetaDataGenre.md index 76cd2a8..43b7bc0 100644 --- a/docs/Models/Requests/GetMediaMetaDataGenre.md +++ b/docs/Models/Requests/GetMediaMetaDataGenre.md @@ -5,8 +5,8 @@ The filter query string for similar items. ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- | -| `Id` | *long* | :heavy_check_mark: | N/A | 259 | -| `Tag` | *string* | :heavy_check_mark: | The genre name of this media-item
| Crime | -| `Filter` | *string* | :heavy_check_mark: | N/A | genre=19 | \ No newline at end of file +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | +| `Id` | *int* | :heavy_check_mark: | The unique identifier for the genre.
NOTE: This is different for each Plex server and is not globally unique.
| 259 | +| `Tag` | *string* | :heavy_check_mark: | The genre name of this media-item
| Crime | +| `Filter` | *string* | :heavy_check_mark: | N/A | genre=19 | \ No newline at end of file diff --git a/docs/Models/Requests/GetMediaMetaDataGuids.md b/docs/Models/Requests/GetMediaMetaDataGuids.md index fe4ab65..a151ef3 100644 --- a/docs/Models/Requests/GetMediaMetaDataGuids.md +++ b/docs/Models/Requests/GetMediaMetaDataGuids.md @@ -3,6 +3,6 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | -| `Id` | *string* | :heavy_check_mark: | The GUID value. | imdb://tt3032476 | \ No newline at end of file +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Id` | *string* | :heavy_check_mark: | The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb://
| {
"imdbExample": {
"summary": "IMDB example",
"value": "imdb://tt13015952"
},
"tmdbExample": {
"summary": "TMDB example",
"value": "tmdb://2434012"
},
"tvdbExample": {
"summary": "TVDB example",
"value": "tvdb://7945991"
}
} | \ No newline at end of file diff --git a/docs/Models/Requests/GetMediaMetaDataMetadata.md b/docs/Models/Requests/GetMediaMetaDataMetadata.md index 40abb16..c9ee9dc 100644 --- a/docs/Models/Requests/GetMediaMetaDataMetadata.md +++ b/docs/Models/Requests/GetMediaMetaDataMetadata.md @@ -67,6 +67,7 @@ Unknown | `LibrarySectionID` | *long* | :heavy_check_mark: | The identifier for the library section. | 1 | | `LibrarySectionTitle` | *string* | :heavy_check_mark: | The title of the library section. | Movies | | `LibrarySectionKey` | *string* | :heavy_check_mark: | The key corresponding to the library section. | /library/sections/1 | +| `Guids` | List<[GetMediaMetaDataGuids](../../Models/Requests/GetMediaMetaDataGuids.md)> | :heavy_minus_sign: | N/A | | | `Media` | List<[GetMediaMetaDataMedia](../../Models/Requests/GetMediaMetaDataMedia.md)> | :heavy_minus_sign: | N/A | | | `Genre` | List<[GetMediaMetaDataGenre](../../Models/Requests/GetMediaMetaDataGenre.md)> | :heavy_minus_sign: | N/A | | | `Country` | List<[GetMediaMetaDataCountry](../../Models/Requests/GetMediaMetaDataCountry.md)> | :heavy_minus_sign: | N/A | | @@ -74,7 +75,6 @@ Unknown | `Writer` | List<[GetMediaMetaDataWriter](../../Models/Requests/GetMediaMetaDataWriter.md)> | :heavy_minus_sign: | N/A | | | `Producer` | List<[GetMediaMetaDataProducer](../../Models/Requests/GetMediaMetaDataProducer.md)> | :heavy_minus_sign: | N/A | | | `Role` | List<[GetMediaMetaDataRole](../../Models/Requests/GetMediaMetaDataRole.md)> | :heavy_minus_sign: | N/A | | -| `Guids` | List<[GetMediaMetaDataGuids](../../Models/Requests/GetMediaMetaDataGuids.md)> | :heavy_minus_sign: | N/A | | | `Ratings` | List<[Ratings](../../Models/Requests/Ratings.md)> | :heavy_minus_sign: | N/A | | | `Similar` | List<[GetMediaMetaDataSimilar](../../Models/Requests/GetMediaMetaDataSimilar.md)> | :heavy_minus_sign: | N/A | | | `Location` | List<[GetMediaMetaDataLocation](../../Models/Requests/GetMediaMetaDataLocation.md)> | :heavy_minus_sign: | N/A | | diff --git a/docs/Models/Requests/GetMediaMetaDataRequest.md b/docs/Models/Requests/GetMediaMetaDataRequest.md index 2255fdc..a6f5cae 100644 --- a/docs/Models/Requests/GetMediaMetaDataRequest.md +++ b/docs/Models/Requests/GetMediaMetaDataRequest.md @@ -3,19 +3,19 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | -| `RatingKey` | *long* | :heavy_check_mark: | the id of the library item to return the children of. | 9518 | -| `IncludeConcerts` | *bool* | :heavy_minus_sign: | Include concerts data if set to true. | true | -| `IncludeExtras` | *bool* | :heavy_minus_sign: | Include extra content (e.g. bonus features). | true | -| `IncludeOnDeck` | *bool* | :heavy_minus_sign: | Include on-deck items. | true | -| `IncludePopularLeaves` | *bool* | :heavy_minus_sign: | Include popular leaves (episodes/chapters). | true | -| `IncludePreferences` | *bool* | :heavy_minus_sign: | Include preferences information. | true | -| `IncludeReviews` | *bool* | :heavy_minus_sign: | Include reviews for the content. | true | -| `IncludeChapters` | *bool* | :heavy_minus_sign: | Include chapter details. | true | -| `IncludeStations` | *bool* | :heavy_minus_sign: | Include station data. | true | -| `IncludeExternalMedia` | *bool* | :heavy_minus_sign: | Include external media data. | true | -| `AsyncAugmentMetadata` | *bool* | :heavy_minus_sign: | Trigger asynchronous metadata augmentation. | true | -| `AsyncCheckFiles` | *bool* | :heavy_minus_sign: | Trigger asynchronous file checking. | true | -| `AsyncRefreshAnalysis` | *bool* | :heavy_minus_sign: | Trigger asynchronous refresh of analysis. | true | -| `AsyncRefreshLocalMediaAgent` | *bool* | :heavy_minus_sign: | Trigger asynchronous refresh of the local media agent. | true | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | +| `RatingKey` | *string* | :heavy_check_mark: | The id(s) of the library item(s) to return metadata for. Can be a single ID or comma-separated list of IDs. | 21119,21617 | +| `IncludeConcerts` | *bool* | :heavy_minus_sign: | Include concerts data if set to true. | true | +| `IncludeExtras` | *bool* | :heavy_minus_sign: | Include extra content (e.g. bonus features). | true | +| `IncludeOnDeck` | *bool* | :heavy_minus_sign: | Include on-deck items. | true | +| `IncludePopularLeaves` | *bool* | :heavy_minus_sign: | Include popular leaves (episodes/chapters). | true | +| `IncludePreferences` | *bool* | :heavy_minus_sign: | Include preferences information. | true | +| `IncludeReviews` | *bool* | :heavy_minus_sign: | Include reviews for the content. | true | +| `IncludeChapters` | *bool* | :heavy_minus_sign: | Include chapter details. | true | +| `IncludeStations` | *bool* | :heavy_minus_sign: | Include station data. | true | +| `IncludeExternalMedia` | *bool* | :heavy_minus_sign: | Include external media data. | true | +| `AsyncAugmentMetadata` | *bool* | :heavy_minus_sign: | Trigger asynchronous metadata augmentation. | true | +| `AsyncCheckFiles` | *bool* | :heavy_minus_sign: | Trigger asynchronous file checking. | true | +| `AsyncRefreshAnalysis` | *bool* | :heavy_minus_sign: | Trigger asynchronous refresh of analysis. | true | +| `AsyncRefreshLocalMediaAgent` | *bool* | :heavy_minus_sign: | Trigger asynchronous refresh of the local media agent. | true | \ No newline at end of file diff --git a/docs/Models/Requests/GetMediaMetaDataRole.md b/docs/Models/Requests/GetMediaMetaDataRole.md index d125da2..88d369c 100644 --- a/docs/Models/Requests/GetMediaMetaDataRole.md +++ b/docs/Models/Requests/GetMediaMetaDataRole.md @@ -3,11 +3,11 @@ ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | -| `Id` | *long* | :heavy_check_mark: | Unique identifier for the actor or role. | 126522 | -| `Tag` | *string* | :heavy_check_mark: | The display tag for the actor (typically the actor's name). | Teller | -| `Role` | *string* | :heavy_minus_sign: | The role played by the actor in the media item. | Self - Judge | -| `Filter` | *string* | :heavy_check_mark: | The filter string used to query this actor. For example, it may indicate that this is an actor with a given key. | actor=126522 | -| `TagKey` | *string* | :heavy_minus_sign: | A unique key associated with the actor's tag, used for internal identification. | 5d77683d85719b001f3a535e | -| `Thumb` | *string* | :heavy_minus_sign: | The URL of the thumbnail image for the actor. | https://metadata-static.plex.tv/7/people/708568fd018d7aa8b1032dcf867747e8.jpg | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Id` | *int* | :heavy_check_mark: | The unique identifier for the role.
NOTE: This is different for each Plex server and is not globally unique.
| 126522 | +| `Tag` | *string* | :heavy_check_mark: | The display tag for the actor (typically the actor's name). | Teller | +| `Role` | *string* | :heavy_minus_sign: | The role played by the actor in the media item. | Self - Judge | +| `Filter` | *string* | :heavy_check_mark: | The filter string used to query this actor. For example, it may indicate that this is an actor with a given key. | actor=126522 | +| `TagKey` | *string* | :heavy_check_mark: | A 24-character hexadecimal unique key associated with the actor's tag, used for internal identification.
NOTE: This is globally unique across all Plex Servers.
| 5d77683d85719b001f3a535e | +| `Thumb` | *string* | :heavy_minus_sign: | The absolute URL of the thumbnail image for the actor. | https://metadata-static.plex.tv/7/people/708568fd018d7aa8b1032dcf867747e8.jpg | \ No newline at end of file diff --git a/docs/Models/Requests/GetMediaMetaDataType.md b/docs/Models/Requests/GetMediaMetaDataType.md index 02105f9..415e437 100644 --- a/docs/Models/Requests/GetMediaMetaDataType.md +++ b/docs/Models/Requests/GetMediaMetaDataType.md @@ -1,16 +1,20 @@ # GetMediaMetaDataType -The type of media content +The type of media content in the Plex library. This can represent videos, music, or photos. ## Values -| Name | Value | -| --------- | --------- | -| `Movie` | movie | -| `TvShow` | show | -| `Season` | season | -| `Episode` | episode | -| `Artist` | artist | -| `Album` | album | \ No newline at end of file +| Name | Value | +| ------------ | ------------ | +| `Movie` | movie | +| `TvShow` | show | +| `Season` | season | +| `Episode` | episode | +| `Artist` | artist | +| `Album` | album | +| `Track` | track | +| `PhotoAlbum` | photoalbum | +| `Photo` | photo | +| `Collection` | collection | \ No newline at end of file diff --git a/docs/Models/Requests/GetMediaMetaDataWriter.md b/docs/Models/Requests/GetMediaMetaDataWriter.md index f9f5bde..f125f1f 100644 --- a/docs/Models/Requests/GetMediaMetaDataWriter.md +++ b/docs/Models/Requests/GetMediaMetaDataWriter.md @@ -3,10 +3,10 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | -| `Id` | *int* | :heavy_check_mark: | Unique identifier for the writer. | 126522 | -| `Tag` | *string* | :heavy_check_mark: | The role of Writer | Jamie P. Hanson | -| `Filter` | *string* | :heavy_check_mark: | The filter string used to query this writer. | writer=126522 | -| `Thumb` | *string* | :heavy_minus_sign: | The URL of the thumbnail image for the writer. | https://metadata-static.plex.tv/8/people/8d65fa96804802e08f2de09fe014408e.jpg | -| `TagKey` | *string* | :heavy_minus_sign: | A unique key associated with the writers tag, used for internal identification. | 5d77683d85719b001f3a535e | \ No newline at end of file +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | +| `Id` | *int* | :heavy_check_mark: | Unique identifier for the writer. | 126522 | +| `Tag` | *string* | :heavy_check_mark: | The role of Writer | Jamie P. Hanson | +| `Filter` | *string* | :heavy_check_mark: | The filter string used to query this writer. | writer=126522 | +| `Thumb` | *string* | :heavy_minus_sign: | The absolute URL of the thumbnail image for the writer. | https://metadata-static.plex.tv/8/people/8d65fa96804802e08f2de09fe014408e.jpg | +| `TagKey` | *string* | :heavy_minus_sign: | A 24-character hexadecimal unique key associated with the writer’s tag, used for internal identification. | 5d77683d85719b001f3a535e | \ No newline at end of file diff --git a/docs/Models/Requests/GetPlaylistContentsQueryParamType.md b/docs/Models/Requests/GetPlaylistContentsQueryParamType.md index 7d477fb..fc52d53 100644 --- a/docs/Models/Requests/GetPlaylistContentsQueryParamType.md +++ b/docs/Models/Requests/GetPlaylistContentsQueryParamType.md @@ -11,12 +11,14 @@ E.g. A movie library will not return anything with type 3 as there are no season ## Values -| Name | Value | -| --------- | --------- | -| `Movie` | 1 | -| `TvShow` | 2 | -| `Season` | 3 | -| `Episode` | 4 | -| `Audio` | 8 | -| `Album` | 9 | -| `Track` | 10 | \ No newline at end of file +| Name | Value | +| ------------ | ------------ | +| `Movie` | 1 | +| `TvShow` | 2 | +| `Season` | 3 | +| `Episode` | 4 | +| `Artist` | 5 | +| `Album` | 6 | +| `Track` | 7 | +| `PhotoAlbum` | 8 | +| `Photo` | 9 | \ No newline at end of file diff --git a/docs/Models/Requests/GetRecentlyAddedHubsType.md b/docs/Models/Requests/GetRecentlyAddedHubsType.md index 750ece0..4d903e9 100644 --- a/docs/Models/Requests/GetRecentlyAddedHubsType.md +++ b/docs/Models/Requests/GetRecentlyAddedHubsType.md @@ -1,16 +1,20 @@ # GetRecentlyAddedHubsType -The type of media content +The type of media content in the Plex library. This can represent videos, music, or photos. ## Values -| Name | Value | -| --------- | --------- | -| `Movie` | movie | -| `TvShow` | show | -| `Season` | season | -| `Episode` | episode | -| `Artist` | artist | -| `Album` | album | \ No newline at end of file +| Name | Value | +| ------------ | ------------ | +| `Movie` | movie | +| `TvShow` | show | +| `Season` | season | +| `Episode` | episode | +| `Artist` | artist | +| `Album` | album | +| `Track` | track | +| `PhotoAlbum` | photoalbum | +| `Photo` | photo | +| `Collection` | collection | \ No newline at end of file diff --git a/docs/Models/Requests/GetRecentlyAddedMetadata.md b/docs/Models/Requests/GetRecentlyAddedMetadata.md index 5d8d14d..12d935a 100644 --- a/docs/Models/Requests/GetRecentlyAddedMetadata.md +++ b/docs/Models/Requests/GetRecentlyAddedMetadata.md @@ -71,6 +71,7 @@ Unknown | `Year` | *int* | :heavy_minus_sign: | The release year of the media item. | 2022 | | `Image` | List<[GetRecentlyAddedImage](../../Models/Requests/GetRecentlyAddedImage.md)> | :heavy_minus_sign: | N/A | | | `UltraBlurColors` | [UltraBlurColors](../../Models/Requests/UltraBlurColors.md) | :heavy_minus_sign: | N/A | | +| `Guids` | List<[Guids](../../Models/Requests/Guids.md)> | :heavy_minus_sign: | N/A | | | `Media` | List<[Models.Requests.Media](../../Models/Requests/Media.md)> | :heavy_minus_sign: | N/A | | | `Genre` | List<[Genre](../../Models/Requests/Genre.md)> | :heavy_minus_sign: | N/A | | | `Country` | List<[Country](../../Models/Requests/Country.md)> | :heavy_minus_sign: | N/A | | @@ -81,5 +82,4 @@ Unknown | `Rating1` | List<[Rating](../../Models/Requests/Rating.md)> | :heavy_minus_sign: | N/A | | | `Similar` | List<[Similar](../../Models/Requests/Similar.md)> | :heavy_minus_sign: | N/A | | | `Location` | List<[Location](../../Models/Requests/Location.md)> | :heavy_minus_sign: | N/A | | -| `Guids` | List<[Guids](../../Models/Requests/Guids.md)> | :heavy_minus_sign: | N/A | | | `Collection` | List<[Collection](../../Models/Requests/Collection.md)> | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Requests/GetSearchAllLibrariesMetadata.md b/docs/Models/Requests/GetSearchAllLibrariesMetadata.md index 4a40e28..fc60f13 100644 --- a/docs/Models/Requests/GetSearchAllLibrariesMetadata.md +++ b/docs/Models/Requests/GetSearchAllLibrariesMetadata.md @@ -13,7 +13,7 @@ | `LibrarySectionID` | *long* | :heavy_minus_sign: | N/A | 1 | | `LibrarySectionTitle` | *string* | :heavy_minus_sign: | N/A | Movies | | `LibrarySectionKey` | *string* | :heavy_minus_sign: | N/A | /library/sections/1 | -| `Type` | [GetSearchAllLibrariesType](../../Models/Requests/GetSearchAllLibrariesType.md) | :heavy_check_mark: | The type of media content
| movie | +| `Type` | [GetSearchAllLibrariesType](../../Models/Requests/GetSearchAllLibrariesType.md) | :heavy_check_mark: | The type of media content in the Plex library. This can represent videos, music, or photos.
| movie | | `Title` | *string* | :heavy_check_mark: | N/A | Avatar: The Way of Water | | `Slug` | *string* | :heavy_minus_sign: | N/A | 4-for-texas | | `ContentRating` | *string* | :heavy_minus_sign: | N/A | PG-13 | diff --git a/docs/Models/Requests/GetSearchAllLibrariesType.md b/docs/Models/Requests/GetSearchAllLibrariesType.md index 427226f..289c76f 100644 --- a/docs/Models/Requests/GetSearchAllLibrariesType.md +++ b/docs/Models/Requests/GetSearchAllLibrariesType.md @@ -1,16 +1,20 @@ # GetSearchAllLibrariesType -The type of media content +The type of media content in the Plex library. This can represent videos, music, or photos. ## Values -| Name | Value | -| --------- | --------- | -| `Movie` | movie | -| `TvShow` | show | -| `Season` | season | -| `Episode` | episode | -| `Artist` | artist | -| `Album` | album | \ No newline at end of file +| Name | Value | +| ------------ | ------------ | +| `Movie` | movie | +| `TvShow` | show | +| `Season` | season | +| `Episode` | episode | +| `Artist` | artist | +| `Album` | album | +| `Track` | track | +| `PhotoAlbum` | photoalbum | +| `Photo` | photo | +| `Collection` | collection | \ No newline at end of file diff --git a/docs/Models/Requests/GetSearchLibraryQueryParamType.md b/docs/Models/Requests/GetSearchLibraryQueryParamType.md index 38b2684..698cb53 100644 --- a/docs/Models/Requests/GetSearchLibraryQueryParamType.md +++ b/docs/Models/Requests/GetSearchLibraryQueryParamType.md @@ -11,12 +11,14 @@ E.g. A movie library will not return anything with type 3 as there are no season ## Values -| Name | Value | -| --------- | --------- | -| `Movie` | 1 | -| `TvShow` | 2 | -| `Season` | 3 | -| `Episode` | 4 | -| `Audio` | 8 | -| `Album` | 9 | -| `Track` | 10 | \ No newline at end of file +| Name | Value | +| ------------ | ------------ | +| `Movie` | 1 | +| `TvShow` | 2 | +| `Season` | 3 | +| `Episode` | 4 | +| `Artist` | 5 | +| `Album` | 6 | +| `Track` | 7 | +| `PhotoAlbum` | 8 | +| `Photo` | 9 | \ No newline at end of file diff --git a/docs/Models/Requests/GetTopWatchedContentMediaContainer.md b/docs/Models/Requests/GetTopWatchedContentMediaContainer.md index f796902..16175b8 100644 --- a/docs/Models/Requests/GetTopWatchedContentMediaContainer.md +++ b/docs/Models/Requests/GetTopWatchedContentMediaContainer.md @@ -5,9 +5,9 @@ | Field | Type | Required | Description | Example | | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | -| `Size` | *int* | :heavy_minus_sign: | N/A | 1 | -| `AllowSync` | *bool* | :heavy_minus_sign: | N/A | true | -| `Identifier` | *string* | :heavy_minus_sign: | N/A | com.plexapp.plugins.library | -| `MediaTagPrefix` | *string* | :heavy_minus_sign: | N/A | /system/bundle/media/flags/ | -| `MediaTagVersion` | *int* | :heavy_minus_sign: | N/A | 1698860922 | +| `Size` | *int* | :heavy_check_mark: | Number of media items returned in this response. | 50 | +| `AllowSync` | *bool* | :heavy_check_mark: | Indicates whether syncing is allowed. | false | +| `Identifier` | *string* | :heavy_check_mark: | An plugin identifier for the media container. | com.plexapp.plugins.library | +| `MediaTagPrefix` | *string* | :heavy_check_mark: | The prefix used for media tag resource paths. | /system/bundle/media/flags/ | +| `MediaTagVersion` | *long* | :heavy_check_mark: | The version number for media tags. | 1734362201 | | `Metadata` | List<[GetTopWatchedContentMetadata](../../Models/Requests/GetTopWatchedContentMetadata.md)> | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Requests/GetTopWatchedContentQueryParamIncludeGuids.md b/docs/Models/Requests/GetTopWatchedContentQueryParamIncludeGuids.md new file mode 100644 index 0000000..22fb318 --- /dev/null +++ b/docs/Models/Requests/GetTopWatchedContentQueryParamIncludeGuids.md @@ -0,0 +1,12 @@ +# GetTopWatchedContentQueryParamIncludeGuids + +Adds the Guid object to the response + + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/GetTopWatchedContentQueryParamType.md b/docs/Models/Requests/GetTopWatchedContentQueryParamType.md index ada3d48..a2fedd2 100644 --- a/docs/Models/Requests/GetTopWatchedContentQueryParamType.md +++ b/docs/Models/Requests/GetTopWatchedContentQueryParamType.md @@ -11,12 +11,14 @@ E.g. A movie library will not return anything with type 3 as there are no season ## Values -| Name | Value | -| --------- | --------- | -| `Movie` | 1 | -| `TvShow` | 2 | -| `Season` | 3 | -| `Episode` | 4 | -| `Audio` | 8 | -| `Album` | 9 | -| `Track` | 10 | \ No newline at end of file +| Name | Value | +| ------------ | ------------ | +| `Movie` | 1 | +| `TvShow` | 2 | +| `Season` | 3 | +| `Episode` | 4 | +| `Artist` | 5 | +| `Album` | 6 | +| `Track` | 7 | +| `PhotoAlbum` | 8 | +| `Photo` | 9 | \ No newline at end of file diff --git a/docs/Models/Requests/GetTopWatchedContentRequest.md b/docs/Models/Requests/GetTopWatchedContentRequest.md index cdb0d86..d62f37f 100644 --- a/docs/Models/Requests/GetTopWatchedContentRequest.md +++ b/docs/Models/Requests/GetTopWatchedContentRequest.md @@ -5,5 +5,5 @@ | Field | Type | Required | Description | Example | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `IncludeGuids` | *long* | :heavy_minus_sign: | Adds the Guids object to the response
| 1 | -| `Type` | [GetTopWatchedContentQueryParamType](../../Models/Requests/GetTopWatchedContentQueryParamType.md) | :heavy_check_mark: | The type of media to retrieve or filter by.
1 = movie
2 = show
3 = season
4 = episode
E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries
| 2 | \ No newline at end of file +| `Type` | [GetTopWatchedContentQueryParamType](../../Models/Requests/GetTopWatchedContentQueryParamType.md) | :heavy_check_mark: | The type of media to retrieve or filter by.
1 = movie
2 = show
3 = season
4 = episode
E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries
| 2 | +| `IncludeGuids` | [GetTopWatchedContentQueryParamIncludeGuids](../../Models/Requests/GetTopWatchedContentQueryParamIncludeGuids.md) | :heavy_minus_sign: | Adds the Guid object to the response
| 1 | \ No newline at end of file diff --git a/docs/Models/Requests/Guids.md b/docs/Models/Requests/Guids.md index 4b447c8..6802b5d 100644 --- a/docs/Models/Requests/Guids.md +++ b/docs/Models/Requests/Guids.md @@ -3,6 +3,6 @@ ## Fields -| Field | Type | Required | Description | Example | -| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -| `Id` | *string* | :heavy_minus_sign: | The unique identifier for the Guid. Can be imdb://tt0286347, tmdb://1763, tvdb://2337
| tvdb://2337 | \ No newline at end of file +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Id` | *string* | :heavy_check_mark: | The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb://
| {
"imdbExample": {
"summary": "IMDB example",
"value": "imdb://tt13015952"
},
"tmdbExample": {
"summary": "TMDB example",
"value": "tmdb://2434012"
},
"tvdbExample": {
"summary": "TVDB example",
"value": "tvdb://7945991"
}
} | \ No newline at end of file diff --git a/docs/Models/Requests/Producer.md b/docs/Models/Requests/Producer.md index e673365..6833152 100644 --- a/docs/Models/Requests/Producer.md +++ b/docs/Models/Requests/Producer.md @@ -3,10 +3,10 @@ ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | -| `Id` | *int* | :heavy_check_mark: | Unique identifier for the producer. | 126522 | -| `Filter` | *string* | :heavy_check_mark: | The filter string used to query this producer. | producer=126522 | -| `Tag` | *string* | :heavy_check_mark: | The name of the producer | Amelia Knapp | -| `TagKey` | *string* | :heavy_minus_sign: | A unique key associated with the producer's tag, used for internal identification. | 5d77683d85719b001f3a535e | -| `Thumb` | *string* | :heavy_minus_sign: | The URL of the thumbnail image for the actor. | https://metadata-static.plex.tv/7/people/708568fd018d7aa8b1032dcf867747e8.jpg | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | +| `Id` | *int* | :heavy_check_mark: | Unique identifier for the producer. | 126522 | +| `Filter` | *string* | :heavy_check_mark: | The filter string used to query this producer. | producer=126522 | +| `Tag` | *string* | :heavy_check_mark: | The name of the producer | Amelia Knapp | +| `TagKey` | *string* | :heavy_check_mark: | A 24-character hexadecimal unique key associated with the producer's tag, used for internal identification.
| 5d77683d85719b001f3a535e | +| `Thumb` | *string* | :heavy_minus_sign: | The absolute URL of the thumbnail image for the producer. | https://metadata-static.plex.tv/7/people/708568fd018d7aa8b1032dcf867747e8.jpg | \ No newline at end of file diff --git a/docs/Models/Requests/QueryParamType.md b/docs/Models/Requests/QueryParamType.md index cfaf2bd..6a256b3 100644 --- a/docs/Models/Requests/QueryParamType.md +++ b/docs/Models/Requests/QueryParamType.md @@ -11,12 +11,14 @@ E.g. A movie library will not return anything with type 3 as there are no season ## Values -| Name | Value | -| --------- | --------- | -| `Movie` | 1 | -| `TvShow` | 2 | -| `Season` | 3 | -| `Episode` | 4 | -| `Audio` | 8 | -| `Album` | 9 | -| `Track` | 10 | \ No newline at end of file +| Name | Value | +| ------------ | ------------ | +| `Movie` | 1 | +| `TvShow` | 2 | +| `Season` | 3 | +| `Episode` | 4 | +| `Artist` | 5 | +| `Album` | 6 | +| `Track` | 7 | +| `PhotoAlbum` | 8 | +| `Photo` | 9 | \ No newline at end of file diff --git a/docs/Models/Requests/Rating.md b/docs/Models/Requests/Rating.md index a3fc891..2cc60b3 100644 --- a/docs/Models/Requests/Rating.md +++ b/docs/Models/Requests/Rating.md @@ -5,8 +5,8 @@ The type of rating, for example 'audience' or 'critic'. ## Fields -| Field | Type | Required | Description | Example | -| ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | -| `Image` | *string* | :heavy_check_mark: | N/A | imdb://image.rating | -| `Value` | *double* | :heavy_check_mark: | N/A | 5.1 | -| `Type` | *string* | :heavy_check_mark: | N/A | audience | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | +| `Image` | *string* | :heavy_check_mark: | The URL for the rating image, for example from IMDb. | imdb://image.rating | +| `Value` | *float* | :heavy_check_mark: | N/A | 5.1 | +| `Type` | *string* | :heavy_check_mark: | N/A | audience | \ No newline at end of file diff --git a/docs/Models/Requests/Role.md b/docs/Models/Requests/Role.md index 10caad9..504d146 100644 --- a/docs/Models/Requests/Role.md +++ b/docs/Models/Requests/Role.md @@ -3,11 +3,11 @@ ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | -| `Id` | *long* | :heavy_check_mark: | Unique identifier for the actor or role. | 126522 | -| `Filter` | *string* | :heavy_check_mark: | The filter string used to query this actor. For example, it may indicate that this is an actor with a given key. | actor=126522 | -| `Tag` | *string* | :heavy_check_mark: | The display tag for the actor (typically the actor's name). | Teller | -| `TagKey` | *string* | :heavy_minus_sign: | A unique key associated with the actor's tag, used for internal identification. | 5d77683d85719b001f3a535e | -| `Role` | *string* | :heavy_minus_sign: | The role played by the actor in the media item. | Self - Judge | -| `Thumb` | *string* | :heavy_minus_sign: | The URL of the thumbnail image for the actor. | https://metadata-static.plex.tv/7/people/708568fd018d7aa8b1032dcf867747e8.jpg | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Id` | *int* | :heavy_check_mark: | The unique identifier for the role.
NOTE: This is different for each Plex server and is not globally unique.
| 126522 | +| `Filter` | *string* | :heavy_check_mark: | The filter string used to query this actor. For example, it may indicate that this is an actor with a given key. | actor=126522 | +| `Tag` | *string* | :heavy_check_mark: | The display tag for the actor (typically the actor's name). | Teller | +| `TagKey` | *string* | :heavy_check_mark: | A 24-character hexadecimal unique key associated with the actor's tag, used for internal identification.
NOTE: This is globally unique across all Plex Servers.
| 5d77683d85719b001f3a535e | +| `Role` | *string* | :heavy_minus_sign: | The role played by the actor in the media item. | Self - Judge | +| `Thumb` | *string* | :heavy_minus_sign: | The absolute URL of the thumbnail image for the actor. | https://metadata-static.plex.tv/7/people/708568fd018d7aa8b1032dcf867747e8.jpg | \ No newline at end of file diff --git a/docs/Models/Requests/Similar.md b/docs/Models/Requests/Similar.md index 523fabb..a0683b4 100644 --- a/docs/Models/Requests/Similar.md +++ b/docs/Models/Requests/Similar.md @@ -7,6 +7,6 @@ The display tag for the similar item, typically the title. | Field | Type | Required | Description | Example | | --------------------- | --------------------- | --------------------- | --------------------- | --------------------- | -| `Id` | *long* | :heavy_check_mark: | N/A | 259 | +| `Id` | *int* | :heavy_check_mark: | N/A | 259 | | `Filter` | *string* | :heavy_check_mark: | N/A | similar=259 | | `Tag` | *string* | :heavy_check_mark: | N/A | Criss Angel Mindfreak | \ No newline at end of file diff --git a/docs/Models/Requests/Type.md b/docs/Models/Requests/Type.md index db3f9b7..e353fcf 100644 --- a/docs/Models/Requests/Type.md +++ b/docs/Models/Requests/Type.md @@ -11,12 +11,14 @@ E.g. A movie library will not return anything with type 3 as there are no season ## Values -| Name | Value | -| --------- | --------- | -| `Movie` | 1 | -| `TvShow` | 2 | -| `Season` | 3 | -| `Episode` | 4 | -| `Audio` | 8 | -| `Album` | 9 | -| `Track` | 10 | \ No newline at end of file +| Name | Value | +| ------------ | ------------ | +| `Movie` | 1 | +| `TvShow` | 2 | +| `Season` | 3 | +| `Episode` | 4 | +| `Artist` | 5 | +| `Album` | 6 | +| `Track` | 7 | +| `PhotoAlbum` | 8 | +| `Photo` | 9 | \ No newline at end of file diff --git a/docs/Models/Requests/Writer.md b/docs/Models/Requests/Writer.md index fbe5252..50e40c3 100644 --- a/docs/Models/Requests/Writer.md +++ b/docs/Models/Requests/Writer.md @@ -3,9 +3,10 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | -| `Id` | *int* | :heavy_check_mark: | Unique identifier for the writer. | 126522 | -| `Filter` | *string* | :heavy_check_mark: | The filter string used to query this writer. | writer=126522 | -| `Tag` | *string* | :heavy_check_mark: | The role of Writer | Jamie P. Hanson | -| `TagKey` | *string* | :heavy_minus_sign: | A unique key associated with the writers tag, used for internal identification. | 5d77683d85719b001f3a535e | \ No newline at end of file +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | +| `Id` | *int* | :heavy_check_mark: | Unique identifier for the writer. | 126522 | +| `Filter` | *string* | :heavy_check_mark: | The filter string used to query this writer. | writer=126522 | +| `Tag` | *string* | :heavy_check_mark: | The role of Writer | Jamie P. Hanson | +| `TagKey` | *string* | :heavy_minus_sign: | A 24-character hexadecimal unique key associated with the writer’s tag, used for internal identification. | 5d77683d85719b001f3a535e | +| `Thumb` | *string* | :heavy_minus_sign: | The absolute URL of the thumbnail image for the writer. | https://metadata-static.plex.tv/8/people/8d65fa96804802e08f2de09fe014408e.jpg | \ No newline at end of file diff --git a/docs/sdks/butler/README.md b/docs/sdks/butler/README.md index 48bc191..1f8ec36 100644 --- a/docs/sdks/butler/README.md +++ b/docs/sdks/butler/README.md @@ -125,7 +125,7 @@ using LukeHagar.PlexAPI.SDK.Models.Requests; var sdk = new PlexAPI(accessToken: ""); -var res = await sdk.Butler.StartTaskAsync(taskName: TaskName.CleanOldBundles); +var res = await sdk.Butler.StartTaskAsync(taskName: TaskName.RefreshPeriodicMetadata); // handle response ``` @@ -162,7 +162,7 @@ using LukeHagar.PlexAPI.SDK.Models.Requests; var sdk = new PlexAPI(accessToken: ""); -var res = await sdk.Butler.StopTaskAsync(taskName: PathParamTaskName.BackupDatabase); +var res = await sdk.Butler.StopTaskAsync(taskName: PathParamTaskName.CleanOldCacheFiles); // handle response ``` diff --git a/docs/sdks/hubs/README.md b/docs/sdks/hubs/README.md index f61921e..bfdc021 100644 --- a/docs/sdks/hubs/README.md +++ b/docs/sdks/hubs/README.md @@ -21,14 +21,10 @@ Get Global Hubs filtered by the parameters provided. ```csharp using LukeHagar.PlexAPI.SDK; using LukeHagar.PlexAPI.SDK.Models.Components; -using LukeHagar.PlexAPI.SDK.Models.Requests; var sdk = new PlexAPI(accessToken: ""); -var res = await sdk.Hubs.GetGlobalHubsAsync( - count: 1262.49D, - onlyTransient: OnlyTransient.One -); +var res = await sdk.Hubs.GetGlobalHubsAsync(); // handle response ``` @@ -67,9 +63,10 @@ using LukeHagar.PlexAPI.SDK.Models.Requests; var sdk = new PlexAPI(accessToken: ""); GetRecentlyAddedRequest req = new GetRecentlyAddedRequest() { - ContentDirectoryID = 470161, + ContentDirectoryID = 39486, SectionID = 2, Type = LukeHagar.PlexAPI.SDK.Models.Requests.Type.TvShow, + IncludeMeta = IncludeMeta.Enable, }; var res = await sdk.Hubs.GetRecentlyAddedAsync(req); @@ -103,15 +100,10 @@ This endpoint will return a list of library specific hubs ```csharp using LukeHagar.PlexAPI.SDK; using LukeHagar.PlexAPI.SDK.Models.Components; -using LukeHagar.PlexAPI.SDK.Models.Requests; var sdk = new PlexAPI(accessToken: ""); -var res = await sdk.Hubs.GetLibraryHubsAsync( - sectionId: 6728.76D, - count: 639.24D, - onlyTransient: QueryParamOnlyTransient.One -); +var res = await sdk.Hubs.GetLibraryHubsAsync(sectionId: 492.74D); // handle response ``` diff --git a/docs/sdks/library/README.md b/docs/sdks/library/README.md index b77d344..d004a9a 100644 --- a/docs/sdks/library/README.md +++ b/docs/sdks/library/README.md @@ -14,7 +14,7 @@ API Calls interacting with Plex Media Server Libraries * [GetLibraryDetails](#getlibrarydetails) - Get Library Details * [DeleteLibrary](#deletelibrary) - Delete Library Section * [GetLibraryItems](#getlibraryitems) - Get Library Items -* [GetAllMediaLibrary](#getallmedialibrary) - Get all media of library +* [GetLibrarySectionsAll](#getlibrarysectionsall) - Get Library section media by tag ALL * [GetRefreshLibraryMetadata](#getrefreshlibrarymetadata) - Refresh Metadata Of The Library * [GetSearchLibrary](#getsearchlibrary) - Search Library * [GetGenresLibrary](#getgenreslibrary) - Get Genres of library media @@ -41,10 +41,7 @@ using LukeHagar.PlexAPI.SDK.Models.Components; var sdk = new PlexAPI(accessToken: ""); -var res = await sdk.Library.GetFileHashAsync( - url: "file://C:\Image.png&type=13", - type: 4462.17D -); +var res = await sdk.Library.GetFileHashAsync(url: "file://C:\Image.png&type=13"); // handle response ``` @@ -101,6 +98,7 @@ GetRecentlyAddedLibraryRequest req = new GetRecentlyAddedLibraryRequest() { }, SectionID = 2, Type = QueryParamType.TvShow, + IncludeMeta = QueryParamIncludeMeta.Enable, }; var res = await sdk.Library.GetRecentlyAddedLibraryAsync(req); @@ -310,9 +308,11 @@ using LukeHagar.PlexAPI.SDK.Models.Requests; var sdk = new PlexAPI(accessToken: ""); GetLibraryItemsRequest req = new GetLibraryItemsRequest() { - Tag = Tag.Edition, + Tag = Tag.Newest, + IncludeGuids = IncludeGuids.Enable, Type = GetLibraryItemsQueryParamType.TvShow, SectionKey = 9518, + IncludeMeta = GetLibraryItemsQueryParamIncludeMeta.Enable, }; var res = await sdk.Library.GetLibraryItemsAsync(req); @@ -338,7 +338,7 @@ var res = await sdk.Library.GetLibraryItemsAsync(req); | LukeHagar.PlexAPI.SDK.Models.Errors.GetLibraryItemsUnauthorized | 401 | application/json | | LukeHagar.PlexAPI.SDK.Models.Errors.SDKException | 4XX, 5XX | \*/\* | -## GetAllMediaLibrary +## GetLibrarySectionsAll Retrieves a list of all general media data for this library. @@ -352,33 +352,38 @@ using LukeHagar.PlexAPI.SDK.Models.Requests; var sdk = new PlexAPI(accessToken: ""); -GetAllMediaLibraryRequest req = new GetAllMediaLibraryRequest() { +GetLibrarySectionsAllRequest req = new GetLibrarySectionsAllRequest() { SectionKey = 9518, - Type = GetAllMediaLibraryQueryParamType.TvShow, + Type = GetLibrarySectionsAllQueryParamType.TvShow, + IncludeMeta = GetLibrarySectionsAllQueryParamIncludeMeta.Enable, + IncludeGuids = QueryParamIncludeGuids.Enable, + IncludeAdvanced = IncludeAdvanced.Enable, + IncludeCollections = QueryParamIncludeCollections.Enable, + IncludeExternalMedia = QueryParamIncludeExternalMedia.Enable, }; -var res = await sdk.Library.GetAllMediaLibraryAsync(req); +var res = await sdk.Library.GetLibrarySectionsAllAsync(req); // handle response ``` ### Parameters -| Parameter | Type | Required | Description | -| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | -| `request` | [GetAllMediaLibraryRequest](../../Models/Requests/GetAllMediaLibraryRequest.md) | :heavy_check_mark: | The request object to use for the request. | +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `request` | [GetLibrarySectionsAllRequest](../../Models/Requests/GetLibrarySectionsAllRequest.md) | :heavy_check_mark: | The request object to use for the request. | ### Response -**[GetAllMediaLibraryResponse](../../Models/Requests/GetAllMediaLibraryResponse.md)** +**[GetLibrarySectionsAllResponse](../../Models/Requests/GetLibrarySectionsAllResponse.md)** ### Errors -| Error Type | Status Code | Content Type | -| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | -| LukeHagar.PlexAPI.SDK.Models.Errors.GetAllMediaLibraryBadRequest | 400 | application/json | -| LukeHagar.PlexAPI.SDK.Models.Errors.GetAllMediaLibraryUnauthorized | 401 | application/json | -| LukeHagar.PlexAPI.SDK.Models.Errors.SDKException | 4XX, 5XX | \*/\* | +| Error Type | Status Code | Content Type | +| --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | +| LukeHagar.PlexAPI.SDK.Models.Errors.GetLibrarySectionsAllBadRequest | 400 | application/json | +| LukeHagar.PlexAPI.SDK.Models.Errors.GetLibrarySectionsAllUnauthorized | 401 | application/json | +| LukeHagar.PlexAPI.SDK.Models.Errors.SDKException | 4XX, 5XX | \*/\* | ## GetRefreshLibraryMetadata @@ -396,7 +401,7 @@ var sdk = new PlexAPI(accessToken: ""); var res = await sdk.Library.GetRefreshLibraryMetadataAsync( sectionKey: 9518, - force: Force.One + force: Force.Zero ); // handle response @@ -623,6 +628,8 @@ GetSearchAllLibrariesRequest req = new GetSearchAllLibrariesRequest() { SearchTypes = new List() { SearchTypes.People, }, + IncludeCollections = GetSearchAllLibrariesQueryParamIncludeCollections.Enable, + IncludeExternalMedia = GetSearchAllLibrariesQueryParamIncludeExternalMedia.Enable, }; var res = await sdk.Library.GetSearchAllLibrariesAsync(req); @@ -650,7 +657,8 @@ var res = await sdk.Library.GetSearchAllLibrariesAsync(req); ## GetMediaMetaData -This endpoint will return all the (meta)data of a library item specified with by the ratingKey. +This endpoint will return all the (meta)data of one or more library items specified by the ratingKey. +Multiple rating keys can be provided as a comma-separated list (e.g., "21119,21617"). ### Example Usage @@ -663,7 +671,7 @@ using LukeHagar.PlexAPI.SDK.Models.Requests; var sdk = new PlexAPI(accessToken: ""); GetMediaMetaDataRequest req = new GetMediaMetaDataRequest() { - RatingKey = 9518, + RatingKey = "21119,21617", IncludeConcerts = true, IncludeExtras = true, IncludeOnDeck = true, @@ -744,14 +752,12 @@ Uploads an image to use as the background artwork for a library item, either fro ```csharp using LukeHagar.PlexAPI.SDK; using LukeHagar.PlexAPI.SDK.Models.Components; -using System; var sdk = new PlexAPI(accessToken: ""); var res = await sdk.Library.PostMediaArtsAsync( ratingKey: 2268, - url: "https://api.mediux.pro/assets/fcfdc487-dd07-4993-a0c1-0a3015362e5b", - requestBody: System.Text.Encoding.UTF8.GetBytes("0xee51EFC6De") + url: "https://api.mediux.pro/assets/fcfdc487-dd07-4993-a0c1-0a3015362e5b" ); // handle response @@ -817,14 +823,12 @@ Uploads a poster to a library item, either from a local file or a remote URL ```csharp using LukeHagar.PlexAPI.SDK; using LukeHagar.PlexAPI.SDK.Models.Components; -using System; var sdk = new PlexAPI(accessToken: ""); var res = await sdk.Library.PostMediaPosterAsync( ratingKey: 2268, - url: "https://api.mediux.pro/assets/fcfdc487-dd07-4993-a0c1-0a3015362e5b", - requestBody: System.Text.Encoding.UTF8.GetBytes("0x7C3d45ad4B") + url: "https://api.mediux.pro/assets/fcfdc487-dd07-4993-a0c1-0a3015362e5b" ); // handle response @@ -862,8 +866,8 @@ using LukeHagar.PlexAPI.SDK.Models.Components; var sdk = new PlexAPI(accessToken: ""); var res = await sdk.Library.GetMetadataChildrenAsync( - ratingKey: 1539.14D, - includeElements: "" + ratingKey: 2403.67D, + includeElements: "Stream" ); // handle response @@ -904,7 +908,7 @@ var sdk = new PlexAPI(accessToken: ""); var res = await sdk.Library.GetTopWatchedContentAsync( type: GetTopWatchedContentQueryParamType.TvShow, - includeGuids: 1 + includeGuids: GetTopWatchedContentQueryParamIncludeGuids.Enable ); // handle response @@ -915,7 +919,7 @@ var res = await sdk.Library.GetTopWatchedContentAsync( | Parameter | Type | Required | Description | Example | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `Type` | [GetTopWatchedContentQueryParamType](../../Models/Requests/GetTopWatchedContentQueryParamType.md) | :heavy_check_mark: | The type of media to retrieve or filter by.
1 = movie
2 = show
3 = season
4 = episode
E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries
| 2 | -| `IncludeGuids` | *long* | :heavy_minus_sign: | Adds the Guids object to the response
| 1 | +| `IncludeGuids` | [GetTopWatchedContentQueryParamIncludeGuids](../../Models/Requests/GetTopWatchedContentQueryParamIncludeGuids.md) | :heavy_minus_sign: | Adds the Guid object to the response
| 1 | ### Response diff --git a/docs/sdks/playlists/README.md b/docs/sdks/playlists/README.md index 324ace6..40f6782 100644 --- a/docs/sdks/playlists/README.md +++ b/docs/sdks/playlists/README.md @@ -39,9 +39,9 @@ var sdk = new PlexAPI(accessToken: ""); CreatePlaylistRequest req = new CreatePlaylistRequest() { Title = "", - Type = CreatePlaylistQueryParamType.Photo, + Type = CreatePlaylistQueryParamType.Audio, Smart = Smart.One, - Uri = "https://hoarse-testing.info/", + Uri = "https://short-term-disconnection.name/", }; var res = await sdk.Playlists.CreatePlaylistAsync(req); @@ -76,14 +76,10 @@ Get All Playlists given the specified filters. ```csharp using LukeHagar.PlexAPI.SDK; using LukeHagar.PlexAPI.SDK.Models.Components; -using LukeHagar.PlexAPI.SDK.Models.Requests; var sdk = new PlexAPI(accessToken: ""); -var res = await sdk.Playlists.GetPlaylistsAsync( - playlistType: PlaylistType.Audio, - smart: QueryParamSmart.Zero -); +var res = await sdk.Playlists.GetPlaylistsAsync(); // handle response ``` @@ -121,7 +117,7 @@ using LukeHagar.PlexAPI.SDK.Models.Components; var sdk = new PlexAPI(accessToken: ""); -var res = await sdk.Playlists.GetPlaylistAsync(playlistID: 4109.48D); +var res = await sdk.Playlists.GetPlaylistAsync(playlistID: 8419.53D); // handle response ``` @@ -157,7 +153,7 @@ using LukeHagar.PlexAPI.SDK.Models.Components; var sdk = new PlexAPI(accessToken: ""); -var res = await sdk.Playlists.DeletePlaylistAsync(playlistID: 216.22D); +var res = await sdk.Playlists.DeletePlaylistAsync(playlistID: 3432.93D); // handle response ``` @@ -193,11 +189,7 @@ using LukeHagar.PlexAPI.SDK.Models.Components; var sdk = new PlexAPI(accessToken: ""); -var res = await sdk.Playlists.UpdatePlaylistAsync( - playlistID: 3915D, - title: "", - summary: "" -); +var res = await sdk.Playlists.UpdatePlaylistAsync(playlistID: 1579.66D); // handle response ``` @@ -240,7 +232,7 @@ using LukeHagar.PlexAPI.SDK.Models.Requests; var sdk = new PlexAPI(accessToken: ""); var res = await sdk.Playlists.GetPlaylistContentsAsync( - playlistID: 5004.46D, + playlistID: 5535.42D, type: GetPlaylistContentsQueryParamType.TvShow ); @@ -279,7 +271,7 @@ using LukeHagar.PlexAPI.SDK.Models.Components; var sdk = new PlexAPI(accessToken: ""); -var res = await sdk.Playlists.ClearPlaylistContentsAsync(playlistID: 1893.18D); +var res = await sdk.Playlists.ClearPlaylistContentsAsync(playlistID: 4137.37D); // handle response ``` @@ -317,7 +309,7 @@ using LukeHagar.PlexAPI.SDK.Models.Components; var sdk = new PlexAPI(accessToken: ""); var res = await sdk.Playlists.AddPlaylistContentsAsync( - playlistID: 8502.01D, + playlistID: 7013.44D, uri: "server://12345/com.plexapp.plugins.library/library/metadata/1", playQueueID: 123D ); @@ -361,7 +353,7 @@ var sdk = new PlexAPI(accessToken: ""); var res = await sdk.Playlists.UploadPlaylistAsync( path: "/home/barkley/playlist.m3u", - force: QueryParamForce.Zero, + force: QueryParamForce.One, sectionID: 1 ); diff --git a/docs/sdks/plex/README.md b/docs/sdks/plex/README.md index 9ef15e8..2a381f3 100644 --- a/docs/sdks/plex/README.md +++ b/docs/sdks/plex/README.md @@ -250,7 +250,7 @@ using LukeHagar.PlexAPI.SDK.Models.Requests; var sdk = new PlexAPI(); GetTokenByPinIdRequest req = new GetTokenByPinIdRequest() { - PinID = 408895, + PinID = 232248, ClientID = "3381b62b-9ab7-4e37-827b-203e9809eb58", ClientName = "Plex for Roku", DeviceNickname = "Roku 3", diff --git a/docs/sdks/search/README.md b/docs/sdks/search/README.md index e80e6b8..166521c 100644 --- a/docs/sdks/search/README.md +++ b/docs/sdks/search/README.md @@ -37,8 +37,7 @@ using LukeHagar.PlexAPI.SDK.Models.Components; var sdk = new PlexAPI(accessToken: ""); var res = await sdk.Search.PerformSearchAsync( - query: "dylan", - sectionId: 9372.7D, + query: "arnold", limit: 5D ); @@ -83,7 +82,6 @@ var sdk = new PlexAPI(accessToken: ""); var res = await sdk.Search.PerformVoiceSearchAsync( query: "dead+poop", - sectionId: 4094.8D, limit: 5D ); diff --git a/docs/sdks/server/README.md b/docs/sdks/server/README.md index 67b4cbe..b937ee3 100644 --- a/docs/sdks/server/README.md +++ b/docs/sdks/server/README.md @@ -207,10 +207,9 @@ var sdk = new PlexAPI(accessToken: ""); GetResizedPhotoRequest req = new GetResizedPhotoRequest() { Width = 110D, Height = 165D, - Opacity = 100, - Blur = 20D, + Blur = 0D, MinSize = MinSize.Zero, - Upscale = Upscale.One, + Upscale = Upscale.Zero, Url = "/library/metadata/49564/thumb/1654258204", }; diff --git a/docs/sdks/sessions/README.md b/docs/sdks/sessions/README.md index ad633f8..90df246 100644 --- a/docs/sdks/sessions/README.md +++ b/docs/sdks/sessions/README.md @@ -56,7 +56,7 @@ using LukeHagar.PlexAPI.SDK.Models.Requests; var sdk = new PlexAPI(accessToken: ""); var res = await sdk.Sessions.GetSessionHistoryAsync( - sort: "", + sort: "viewedAt:desc", accountId: 1, filter: new QueryParamFilter() {}, librarySectionID: 12 diff --git a/docs/sdks/watchlist/README.md b/docs/sdks/watchlist/README.md index cfc021a..18d4c8a 100644 --- a/docs/sdks/watchlist/README.md +++ b/docs/sdks/watchlist/README.md @@ -24,7 +24,7 @@ using LukeHagar.PlexAPI.SDK.Models.Requests; var sdk = new PlexAPI(accessToken: ""); GetWatchListRequest req = new GetWatchListRequest() { - Filter = Filter.Available, + Filter = Filter.Released, XPlexToken = "CV5xoxjTpFKUzBTShsaf", };