diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 4861646..dbd7f09 100755 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,12 +1,12 @@ lockVersion: 2.0.0 id: 01a51eb2-5d90-4a24-b154-68e491d02c36 management: - docChecksum: 48621865085324b8b8eda5901f092a37 + docChecksum: b2624bb972abebc11eff6d460c59de68 docVersion: 0.0.3 - speakeasyVersion: 1.542.3 - generationVersion: 2.597.9 - releaseVersion: 0.14.8 - configChecksum: 7a6c0ae2a900f0d6371849aa5db3edfb + speakeasyVersion: 1.555.3 + generationVersion: 2.620.2 + releaseVersion: 0.14.9 + configChecksum: 16eeae297c6af49fea354d95ff3f0357 repoURL: https://github.com/LukeHagar/plexphp.git repoSubDirectory: . installationURL: https://github.com/LukeHagar/plexphp @@ -14,14 +14,14 @@ management: features: php: constsAndDefaults: 0.2.0 - core: 3.8.4 + core: 3.8.5 deprecations: 2.81.1 enums: 2.81.1 errors: 0.3.0 flattening: 2.81.1 globalSecurity: 2.81.8 globalSecurityFlattening: 0.1.2 - globalServerURLs: 2.82.1 + globalServerURLs: 2.82.2 methodArguments: 0.1.0 methodServerURLs: 2.82.1 nameOverrides: 2.81.2 @@ -78,10 +78,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 @@ -142,6 +138,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 @@ -419,41 +419,6 @@ generatedFiles: - docs/Models/Operations/GetAllLibrariesResponse.md - docs/Models/Operations/GetAllLibrariesResponseBody.md - docs/Models/Operations/GetAllLibrariesType.md - - docs/Models/Operations/GetAllMediaLibraryActiveDirection.md - - docs/Models/Operations/GetAllMediaLibraryCollection.md - - docs/Models/Operations/GetAllMediaLibraryCountry.md - - docs/Models/Operations/GetAllMediaLibraryDefaultDirection.md - - docs/Models/Operations/GetAllMediaLibraryDirector.md - - docs/Models/Operations/GetAllMediaLibraryField.md - - docs/Models/Operations/GetAllMediaLibraryFieldType.md - - docs/Models/Operations/GetAllMediaLibraryFilter.md - - docs/Models/Operations/GetAllMediaLibraryGenre.md - - docs/Models/Operations/GetAllMediaLibraryGuids.md - - docs/Models/Operations/GetAllMediaLibraryHasThumbnail.md - - docs/Models/Operations/GetAllMediaLibraryImage.md - - docs/Models/Operations/GetAllMediaLibraryLibraryOptimizedForStreaming.md - - docs/Models/Operations/GetAllMediaLibraryLibraryResponseType.md - - docs/Models/Operations/GetAllMediaLibraryLibraryType.md - - docs/Models/Operations/GetAllMediaLibraryMedia.md - - docs/Models/Operations/GetAllMediaLibraryMediaContainer.md - - docs/Models/Operations/GetAllMediaLibraryMeta.md - - docs/Models/Operations/GetAllMediaLibraryMetadata.md - - docs/Models/Operations/GetAllMediaLibraryOperator.md - - docs/Models/Operations/GetAllMediaLibraryOptimizedForStreaming.md - - docs/Models/Operations/GetAllMediaLibraryOptimizedForStreaming1.md - - docs/Models/Operations/GetAllMediaLibraryPart.md - - docs/Models/Operations/GetAllMediaLibraryQueryParamIncludeMeta.md - - docs/Models/Operations/GetAllMediaLibraryQueryParamType.md - - docs/Models/Operations/GetAllMediaLibraryRequest.md - - docs/Models/Operations/GetAllMediaLibraryResponse.md - - docs/Models/Operations/GetAllMediaLibraryResponseBody.md - - docs/Models/Operations/GetAllMediaLibraryRole.md - - docs/Models/Operations/GetAllMediaLibrarySort.md - - docs/Models/Operations/GetAllMediaLibraryStream.md - - docs/Models/Operations/GetAllMediaLibraryStreamType.md - - docs/Models/Operations/GetAllMediaLibraryType.md - - docs/Models/Operations/GetAllMediaLibraryUltraBlurColors.md - - docs/Models/Operations/GetAllMediaLibraryWriter.md - docs/Models/Operations/GetAvailableClientsMediaContainer.md - docs/Models/Operations/GetAvailableClientsResponse.md - docs/Models/Operations/GetAvailableClientsResponseBody.md @@ -558,6 +523,41 @@ generatedFiles: - docs/Models/Operations/GetLibraryItemsType.md - docs/Models/Operations/GetLibraryItemsUltraBlurColors.md - docs/Models/Operations/GetLibraryItemsWriter.md + - docs/Models/Operations/GetLibrarySectionsAllActiveDirection.md + - docs/Models/Operations/GetLibrarySectionsAllCollection.md + - docs/Models/Operations/GetLibrarySectionsAllCountry.md + - docs/Models/Operations/GetLibrarySectionsAllDefaultDirection.md + - docs/Models/Operations/GetLibrarySectionsAllDirector.md + - docs/Models/Operations/GetLibrarySectionsAllField.md + - docs/Models/Operations/GetLibrarySectionsAllFieldType.md + - docs/Models/Operations/GetLibrarySectionsAllFilter.md + - docs/Models/Operations/GetLibrarySectionsAllGenre.md + - docs/Models/Operations/GetLibrarySectionsAllGuids.md + - docs/Models/Operations/GetLibrarySectionsAllHasThumbnail.md + - docs/Models/Operations/GetLibrarySectionsAllImage.md + - docs/Models/Operations/GetLibrarySectionsAllLibraryOptimizedForStreaming.md + - docs/Models/Operations/GetLibrarySectionsAllLibraryResponseType.md + - docs/Models/Operations/GetLibrarySectionsAllLibraryType.md + - docs/Models/Operations/GetLibrarySectionsAllMedia.md + - docs/Models/Operations/GetLibrarySectionsAllMediaContainer.md + - docs/Models/Operations/GetLibrarySectionsAllMeta.md + - docs/Models/Operations/GetLibrarySectionsAllMetadata.md + - docs/Models/Operations/GetLibrarySectionsAllOperator.md + - docs/Models/Operations/GetLibrarySectionsAllOptimizedForStreaming.md + - docs/Models/Operations/GetLibrarySectionsAllOptimizedForStreaming1.md + - docs/Models/Operations/GetLibrarySectionsAllPart.md + - docs/Models/Operations/GetLibrarySectionsAllQueryParamIncludeMeta.md + - docs/Models/Operations/GetLibrarySectionsAllQueryParamType.md + - docs/Models/Operations/GetLibrarySectionsAllRequest.md + - docs/Models/Operations/GetLibrarySectionsAllResponse.md + - docs/Models/Operations/GetLibrarySectionsAllResponseBody.md + - docs/Models/Operations/GetLibrarySectionsAllRole.md + - docs/Models/Operations/GetLibrarySectionsAllSort.md + - docs/Models/Operations/GetLibrarySectionsAllStream.md + - docs/Models/Operations/GetLibrarySectionsAllStreamType.md + - docs/Models/Operations/GetLibrarySectionsAllType.md + - docs/Models/Operations/GetLibrarySectionsAllUltraBlurColors.md + - docs/Models/Operations/GetLibrarySectionsAllWriter.md - docs/Models/Operations/GetMediaArtsMediaContainer.md - docs/Models/Operations/GetMediaArtsMetadata.md - docs/Models/Operations/GetMediaArtsRequest.md @@ -777,6 +777,7 @@ generatedFiles: - docs/Models/Operations/GetTopWatchedContentGuids.md - docs/Models/Operations/GetTopWatchedContentMediaContainer.md - docs/Models/Operations/GetTopWatchedContentMetadata.md + - docs/Models/Operations/GetTopWatchedContentQueryParamIncludeGuids.md - docs/Models/Operations/GetTopWatchedContentQueryParamType.md - docs/Models/Operations/GetTopWatchedContentRequest.md - docs/Models/Operations/GetTopWatchedContentResponse.md @@ -1061,12 +1062,6 @@ generatedFiles: - src/Models/Errors/GetAllLibrariesLibraryErrors.php - src/Models/Errors/GetAllLibrariesUnauthorized.php - src/Models/Errors/GetAllLibrariesUnauthorizedThrowable.php - - src/Models/Errors/GetAllMediaLibraryBadRequest.php - - src/Models/Errors/GetAllMediaLibraryBadRequestThrowable.php - - src/Models/Errors/GetAllMediaLibraryErrors.php - - src/Models/Errors/GetAllMediaLibraryLibraryErrors.php - - src/Models/Errors/GetAllMediaLibraryUnauthorized.php - - src/Models/Errors/GetAllMediaLibraryUnauthorizedThrowable.php - src/Models/Errors/GetAvailableClientsBadRequest.php - src/Models/Errors/GetAvailableClientsBadRequestThrowable.php - src/Models/Errors/GetAvailableClientsErrors.php @@ -1157,6 +1152,12 @@ generatedFiles: - src/Models/Errors/GetLibraryItemsLibraryErrors.php - src/Models/Errors/GetLibraryItemsUnauthorized.php - src/Models/Errors/GetLibraryItemsUnauthorizedThrowable.php + - src/Models/Errors/GetLibrarySectionsAllBadRequest.php + - src/Models/Errors/GetLibrarySectionsAllBadRequestThrowable.php + - src/Models/Errors/GetLibrarySectionsAllErrors.php + - src/Models/Errors/GetLibrarySectionsAllLibraryErrors.php + - src/Models/Errors/GetLibrarySectionsAllUnauthorized.php + - src/Models/Errors/GetLibrarySectionsAllUnauthorizedThrowable.php - src/Models/Errors/GetMediaMetaDataBadRequest.php - src/Models/Errors/GetMediaMetaDataBadRequestThrowable.php - src/Models/Errors/GetMediaMetaDataErrors.php @@ -1537,39 +1538,6 @@ generatedFiles: - src/Models/Operations/GetAllLibrariesResponse.php - src/Models/Operations/GetAllLibrariesResponseBody.php - src/Models/Operations/GetAllLibrariesType.php - - src/Models/Operations/GetAllMediaLibraryActiveDirection.php - - src/Models/Operations/GetAllMediaLibraryCollection.php - - src/Models/Operations/GetAllMediaLibraryCountry.php - - src/Models/Operations/GetAllMediaLibraryDefaultDirection.php - - src/Models/Operations/GetAllMediaLibraryDirector.php - - src/Models/Operations/GetAllMediaLibraryField.php - - src/Models/Operations/GetAllMediaLibraryFieldType.php - - src/Models/Operations/GetAllMediaLibraryFilter.php - - src/Models/Operations/GetAllMediaLibraryGenre.php - - src/Models/Operations/GetAllMediaLibraryGuids.php - - src/Models/Operations/GetAllMediaLibraryHasThumbnail.php - - src/Models/Operations/GetAllMediaLibraryImage.php - - src/Models/Operations/GetAllMediaLibraryLibraryResponseType.php - - src/Models/Operations/GetAllMediaLibraryLibraryType.php - - src/Models/Operations/GetAllMediaLibraryMedia.php - - src/Models/Operations/GetAllMediaLibraryMediaContainer.php - - src/Models/Operations/GetAllMediaLibraryMeta.php - - src/Models/Operations/GetAllMediaLibraryMetadata.php - - src/Models/Operations/GetAllMediaLibraryOperator.php - - src/Models/Operations/GetAllMediaLibraryOptimizedForStreaming1.php - - src/Models/Operations/GetAllMediaLibraryPart.php - - src/Models/Operations/GetAllMediaLibraryQueryParamIncludeMeta.php - - src/Models/Operations/GetAllMediaLibraryQueryParamType.php - - src/Models/Operations/GetAllMediaLibraryRequest.php - - src/Models/Operations/GetAllMediaLibraryResponse.php - - src/Models/Operations/GetAllMediaLibraryResponseBody.php - - src/Models/Operations/GetAllMediaLibraryRole.php - - src/Models/Operations/GetAllMediaLibrarySort.php - - src/Models/Operations/GetAllMediaLibraryStream.php - - src/Models/Operations/GetAllMediaLibraryStreamType.php - - src/Models/Operations/GetAllMediaLibraryType.php - - src/Models/Operations/GetAllMediaLibraryUltraBlurColors.php - - src/Models/Operations/GetAllMediaLibraryWriter.php - src/Models/Operations/GetAvailableClientsMediaContainer.php - src/Models/Operations/GetAvailableClientsResponse.php - src/Models/Operations/GetAvailableClientsResponseBody.php @@ -1674,6 +1642,39 @@ generatedFiles: - src/Models/Operations/GetLibraryItemsType.php - src/Models/Operations/GetLibraryItemsUltraBlurColors.php - src/Models/Operations/GetLibraryItemsWriter.php + - src/Models/Operations/GetLibrarySectionsAllActiveDirection.php + - src/Models/Operations/GetLibrarySectionsAllCollection.php + - src/Models/Operations/GetLibrarySectionsAllCountry.php + - src/Models/Operations/GetLibrarySectionsAllDefaultDirection.php + - src/Models/Operations/GetLibrarySectionsAllDirector.php + - src/Models/Operations/GetLibrarySectionsAllField.php + - src/Models/Operations/GetLibrarySectionsAllFieldType.php + - src/Models/Operations/GetLibrarySectionsAllFilter.php + - src/Models/Operations/GetLibrarySectionsAllGenre.php + - src/Models/Operations/GetLibrarySectionsAllGuids.php + - src/Models/Operations/GetLibrarySectionsAllHasThumbnail.php + - src/Models/Operations/GetLibrarySectionsAllImage.php + - src/Models/Operations/GetLibrarySectionsAllLibraryResponseType.php + - src/Models/Operations/GetLibrarySectionsAllLibraryType.php + - src/Models/Operations/GetLibrarySectionsAllMedia.php + - src/Models/Operations/GetLibrarySectionsAllMediaContainer.php + - src/Models/Operations/GetLibrarySectionsAllMeta.php + - src/Models/Operations/GetLibrarySectionsAllMetadata.php + - src/Models/Operations/GetLibrarySectionsAllOperator.php + - src/Models/Operations/GetLibrarySectionsAllOptimizedForStreaming1.php + - src/Models/Operations/GetLibrarySectionsAllPart.php + - src/Models/Operations/GetLibrarySectionsAllQueryParamIncludeMeta.php + - src/Models/Operations/GetLibrarySectionsAllQueryParamType.php + - src/Models/Operations/GetLibrarySectionsAllRequest.php + - src/Models/Operations/GetLibrarySectionsAllResponse.php + - src/Models/Operations/GetLibrarySectionsAllResponseBody.php + - src/Models/Operations/GetLibrarySectionsAllRole.php + - src/Models/Operations/GetLibrarySectionsAllSort.php + - src/Models/Operations/GetLibrarySectionsAllStream.php + - src/Models/Operations/GetLibrarySectionsAllStreamType.php + - src/Models/Operations/GetLibrarySectionsAllType.php + - src/Models/Operations/GetLibrarySectionsAllUltraBlurColors.php + - src/Models/Operations/GetLibrarySectionsAllWriter.php - src/Models/Operations/GetMediaArtsMediaContainer.php - src/Models/Operations/GetMediaArtsMetadata.php - src/Models/Operations/GetMediaArtsRequest.php @@ -1890,6 +1891,7 @@ generatedFiles: - src/Models/Operations/GetTopWatchedContentGuids.php - src/Models/Operations/GetTopWatchedContentMediaContainer.php - src/Models/Operations/GetTopWatchedContentMetadata.php + - src/Models/Operations/GetTopWatchedContentQueryParamIncludeGuids.php - src/Models/Operations/GetTopWatchedContentQueryParamType.php - src/Models/Operations/GetTopWatchedContentRequest.php - src/Models/Operations/GetTopWatchedContentResponse.php @@ -2116,36 +2118,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: @@ -2159,9 +2161,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: @@ -2170,12 +2172,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: @@ -2185,7 +2187,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": @@ -2194,11 +2196,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: @@ -2208,7 +2210,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: @@ -2216,9 +2218,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: @@ -2228,9 +2230,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: @@ -2245,11 +2247,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: @@ -2264,11 +2266,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: @@ -2287,7 +2289,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: @@ -2310,9 +2312,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: @@ -2329,68 +2331,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: @@ -2399,9 +2401,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: @@ -2422,11 +2424,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: @@ -2442,12 +2444,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" @@ -2461,16 +2463,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 @@ -2478,31 +2480,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: @@ -2511,9 +2512,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: @@ -2521,11 +2522,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: @@ -2533,9 +2534,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: @@ -2549,20 +2550,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: @@ -2572,9 +2573,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: @@ -2584,14 +2585,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 @@ -2601,13 +2602,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 @@ -2622,11 +2623,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: @@ -2636,9 +2637,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: @@ -2650,9 +2651,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: @@ -2666,7 +2667,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: @@ -2678,9 +2679,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: @@ -2690,11 +2691,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: @@ -2707,16 +2708,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 @@ -2733,11 +2734,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: @@ -2745,7 +2746,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: @@ -2760,7 +2761,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: @@ -2772,20 +2773,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: @@ -2798,34 +2799,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 @@ -2835,7 +2836,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: @@ -2847,7 +2848,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: @@ -2856,124 +2857,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: @@ -2989,19 +2989,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: @@ -3017,11 +3017,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: @@ -3029,9 +3029,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: @@ -3041,11 +3041,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: @@ -3053,18 +3053,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: @@ -3073,75 +3073,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: @@ -3152,7 +3158,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: @@ -3160,9 +3166,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: @@ -3171,7 +3177,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: @@ -3179,9 +3185,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: @@ -3190,7 +3196,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: @@ -3212,10 +3218,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 5f0ff7b..b15db6d 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: false oAuth2PasswordEnabled: false php: - version: 0.14.8 + version: 0.14.9 additionalDependencies: autoload: {} autoload-dev: {} diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index b464101..ceaee1f 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -1,4 +1,4 @@ -speakeasyVersion: 1.542.3 +speakeasyVersion: 1.555.3 sources: my-source: sourceNamespace: my-source @@ -9,19 +9,19 @@ sources: - main plexapi: sourceNamespace: plexapi - sourceRevisionDigest: sha256:37adc934a79841fb00cfe6ed569f5b1c88534b20202ecbde64b4e84828cee22a - sourceBlobDigest: sha256:ffb5b8d288111a763e4d035c8c9e37f5c89690d146b7297493b43a71d8298e6c + sourceRevisionDigest: sha256:78d07ad78ff60d0e9918696208d8c68a562e170d4e9c431797c02995fb8816d0 + sourceBlobDigest: sha256:d38dd2a36c1b2fd73409267f7b30c2d5d45d709616141803ea01db424ec68ae4 tags: - latest - - speakeasy-sdk-regen-1746490278 + - speakeasy-sdk-regen-1749082302 targets: plexphp: source: plexapi sourceNamespace: plexapi - sourceRevisionDigest: sha256:37adc934a79841fb00cfe6ed569f5b1c88534b20202ecbde64b4e84828cee22a - sourceBlobDigest: sha256:ffb5b8d288111a763e4d035c8c9e37f5c89690d146b7297493b43a71d8298e6c + sourceRevisionDigest: sha256:78d07ad78ff60d0e9918696208d8c68a562e170d4e9c431797c02995fb8816d0 + sourceBlobDigest: sha256:d38dd2a36c1b2fd73409267f7b30c2d5d45d709616141803ea01db424ec68ae4 codeSamplesNamespace: code-samples-php-plexphp - codeSamplesRevisionDigest: sha256:d68f139a4c5678d2a46aad679423268b5f5cc548378be4c9f1fe1f820feed44f + codeSamplesRevisionDigest: sha256:4ca8d0766e43f9b1d14040ccc0fef1806a7a1b762560ecc219d955f4cc05e011 workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/README.md b/README.md index 606cd27..3166fe7 100644 --- a/README.md +++ b/README.md @@ -175,7 +175,7 @@ if ($response->object !== null) { * [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 @@ -363,8 +363,8 @@ use LukeHagar\Plex_API; $sdk = Plex_API\PlexAPI::builder() ->setProtocol('https') - ->setIp('e0c3:bcc0:6bac:dccc:c4ec:34b1:ca98:4cb9') - ->setPort('40311') + ->setIp('4982:bc2a:b4f8:efb5:2394:5bc3:ab4f:0e6d') + ->setPort('44765') ->setSecurity( '' ) diff --git a/RELEASES.md b/RELEASES.md index 7b528e4..c5ef857 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -882,4 +882,14 @@ Based on: ### Generated - [php v0.14.8] . ### Releases -- [Composer v0.14.8] https://packagist.org/packages/lukehagar/plex-api#v0.14.8 - . \ No newline at end of file +- [Composer v0.14.8] https://packagist.org/packages/lukehagar/plex-api#v0.14.8 - . + +## 2025-06-05 00:11:24 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.555.3 (2.620.2) https://github.com/speakeasy-api/speakeasy +### Generated +- [php v0.14.9] . +### Releases +- [Composer v0.14.9] https://packagist.org/packages/lukehagar/plex-api#v0.14.9 - . \ No newline at end of file diff --git a/codeSamples.yaml b/codeSamples.yaml index 3bc34a6..a68ec13 100644 --- a/codeSamples.yaml +++ b/codeSamples.yaml @@ -337,7 +337,7 @@ actions: $response = $sdk->butler->stopTask( - taskName: Operations\PathParamTaskName::BackupDatabase + taskName: Operations\PathParamTaskName::CleanOldCacheFiles ); if ($response->statusCode === 200) { @@ -365,7 +365,7 @@ actions: $response = $sdk->butler->startTask( - taskName: Operations\TaskName::CleanOldBundles + taskName: Operations\TaskName::RefreshPeriodicMetadata ); if ($response->statusCode === 200) { @@ -540,7 +540,6 @@ actions: require 'vendor/autoload.php'; use LukeHagar\Plex_API; - use LukeHagar\Plex_API\Models\Operations; $sdk = Plex_API\PlexAPI::builder() ->setSecurity( @@ -551,8 +550,6 @@ actions: $response = $sdk->hubs->getGlobalHubs( - count: 1262.49, - onlyTransient: Operations\OnlyTransient::One ); @@ -579,9 +576,10 @@ actions: ->build(); $request = new Operations\GetRecentlyAddedRequest( - contentDirectoryID: 470161, + contentDirectoryID: 39486, sectionID: 2, type: Operations\Type::TvShow, + includeMeta: Operations\IncludeMeta::Enable, ); $response = $sdk->hubs->getRecentlyAdded( @@ -612,8 +610,7 @@ actions: $response = $sdk->search->performSearch( - query: 'dylan', - sectionId: 9372.7, + query: 'arnold', limit: 5 ); @@ -643,7 +640,6 @@ actions: $response = $sdk->search->performVoiceSearch( query: 'dead+poop', - sectionId: 4094.8, limit: 5 ); @@ -662,7 +658,6 @@ actions: require 'vendor/autoload.php'; use LukeHagar\Plex_API; - use LukeHagar\Plex_API\Models\Operations; $sdk = Plex_API\PlexAPI::builder() ->setSecurity( @@ -673,10 +668,7 @@ actions: $response = $sdk->hubs->getLibraryHubs( - sectionId: 6728.76, - count: 639.24, - onlyTransient: Operations\QueryParamOnlyTransient::One - + sectionId: 492.74 ); if ($response->object !== null) { @@ -728,7 +720,7 @@ actions: $response = $sdk->library->getTopWatchedContent( type: Operations\GetTopWatchedContentQueryParamType::TvShow, - includeGuids: 1 + includeGuids: Operations\GetTopWatchedContentQueryParamIncludeGuids::Enable ); @@ -756,9 +748,7 @@ actions: $response = $sdk->library->getFileHash( - url: 'file://C:\Image.png&type=13', - type: 4462.17 - + url: 'file://C:\Image.png&type=13' ); if ($response->statusCode === 200) { @@ -784,7 +774,7 @@ actions: ->build(); $request = new Operations\GetMediaMetaDataRequest( - ratingKey: 9518, + ratingKey: '21119,21617', includeConcerts: true, includeExtras: true, includeOnDeck: true, @@ -856,8 +846,7 @@ actions: $response = $sdk->library->postMediaArts( ratingKey: 2268, - url: 'https://api.mediux.pro/assets/fcfdc487-dd07-4993-a0c1-0a3015362e5b', - requestBody: '0xee51EFC6De' + url: 'https://api.mediux.pro/assets/fcfdc487-dd07-4993-a0c1-0a3015362e5b' ); @@ -920,8 +909,8 @@ actions: $response = $sdk->library->getMetadataChildren( - ratingKey: 1539.14, - includeElements: '' + ratingKey: 2403.67, + includeElements: 'Stream' ); @@ -977,8 +966,7 @@ actions: $response = $sdk->library->postMediaPoster( ratingKey: 2268, - url: 'https://api.mediux.pro/assets/fcfdc487-dd07-4993-a0c1-0a3015362e5b', - requestBody: '0x7C3d45ad4B' + url: 'https://api.mediux.pro/assets/fcfdc487-dd07-4993-a0c1-0a3015362e5b' ); @@ -1057,6 +1045,7 @@ actions: ], sectionID: 2, type: Operations\QueryParamType::TvShow, + includeMeta: Operations\QueryParamIncludeMeta::Enable, ); $response = $sdk->library->getRecentlyAddedLibrary( @@ -1091,6 +1080,8 @@ actions: searchTypes: [ Operations\SearchTypes::People, ], + includeCollections: Operations\GetSearchAllLibrariesQueryParamIncludeCollections::Enable, + includeExternalMedia: Operations\GetSearchAllLibrariesQueryParamIncludeExternalMedia::Enable, ); $response = $sdk->library->getSearchAllLibraries( @@ -1147,7 +1138,7 @@ actions: ->build(); $request = new Operations\GetWatchListRequest( - filter: Operations\Filter::Available, + filter: Operations\Filter::Released, xPlexToken: 'CV5xoxjTpFKUzBTShsaf', ); @@ -1264,12 +1255,17 @@ actions: ) ->build(); - $request = new Operations\GetAllMediaLibraryRequest( + $request = new Operations\GetLibrarySectionsAllRequest( sectionKey: 9518, - type: Operations\GetAllMediaLibraryQueryParamType::TvShow, + type: Operations\GetLibrarySectionsAllQueryParamType::TvShow, + includeMeta: Operations\GetLibrarySectionsAllQueryParamIncludeMeta::Enable, + includeGuids: Operations\QueryParamIncludeGuids::Enable, + includeAdvanced: Operations\IncludeAdvanced::Enable, + includeCollections: Operations\QueryParamIncludeCollections::Enable, + includeExternalMedia: Operations\QueryParamIncludeExternalMedia::Enable, ); - $response = $sdk->library->getAllMediaLibrary( + $response = $sdk->library->getLibrarySectionsAll( request: $request ); @@ -1359,7 +1355,7 @@ actions: $response = $sdk->library->getRefreshLibraryMetadata( sectionKey: 9518, - force: Operations\Force::One + force: Operations\Force::Zero ); @@ -1416,9 +1412,11 @@ actions: ->build(); $request = new Operations\GetLibraryItemsRequest( - tag: Operations\Tag::Edition, + tag: Operations\Tag::Newest, + includeGuids: Operations\IncludeGuids::Enable, type: Operations\GetLibraryItemsQueryParamType::TvShow, sectionKey: 9518, + includeMeta: Operations\GetLibraryItemsQueryParamIncludeMeta::Enable, ); $response = $sdk->library->getLibraryItems( @@ -1591,10 +1589,9 @@ actions: $request = new Operations\GetResizedPhotoRequest( width: 110, height: 165, - opacity: 100, - blur: 20, + blur: 0, minSize: Operations\MinSize::Zero, - upscale: Operations\Upscale::One, + upscale: Operations\Upscale::Zero, url: '/library/metadata/49564/thumb/1654258204', ); @@ -1651,7 +1648,7 @@ actions: $sdk = Plex_API\PlexAPI::builder()->build(); $request = new Operations\GetTokenByPinIdRequest( - pinID: 408895, + pinID: 232248, clientID: '3381b62b-9ab7-4e37-827b-203e9809eb58', clientName: 'Plex for Roku', deviceNickname: 'Roku 3', @@ -1677,7 +1674,6 @@ actions: require 'vendor/autoload.php'; use LukeHagar\Plex_API; - use LukeHagar\Plex_API\Models\Operations; $sdk = Plex_API\PlexAPI::builder() ->setSecurity( @@ -1688,8 +1684,6 @@ actions: $response = $sdk->playlists->getPlaylists( - playlistType: Operations\PlaylistType::Audio, - smart: Operations\QueryParamSmart::Zero ); @@ -1717,9 +1711,9 @@ actions: $request = new Operations\CreatePlaylistRequest( title: '', - type: Operations\CreatePlaylistQueryParamType::Photo, + type: Operations\CreatePlaylistQueryParamType::Audio, smart: Operations\Smart::One, - uri: 'https://hoarse-testing.info/', + uri: 'https://short-term-disconnection.name/', ); $response = $sdk->playlists->createPlaylist( @@ -1752,7 +1746,7 @@ actions: $response = $sdk->playlists->uploadPlaylist( path: '/home/barkley/playlist.m3u', - force: Operations\QueryParamForce::Zero, + force: Operations\QueryParamForce::One, sectionID: 1 ); @@ -1781,7 +1775,7 @@ actions: $response = $sdk->playlists->deletePlaylist( - playlistID: 216.22 + playlistID: 3432.93 ); if ($response->statusCode === 200) { @@ -1808,7 +1802,7 @@ actions: $response = $sdk->playlists->getPlaylist( - playlistID: 4109.48 + playlistID: 8419.53 ); if ($response->object !== null) { @@ -1835,10 +1829,7 @@ actions: $response = $sdk->playlists->updatePlaylist( - playlistID: 3915, - title: '', - summary: '' - + playlistID: 1579.66 ); if ($response->statusCode === 200) { @@ -1865,7 +1856,7 @@ actions: $response = $sdk->playlists->clearPlaylistContents( - playlistID: 1893.18 + playlistID: 4137.37 ); if ($response->statusCode === 200) { @@ -1893,7 +1884,7 @@ actions: $response = $sdk->playlists->getPlaylistContents( - playlistID: 5004.46, + playlistID: 5535.42, type: Operations\GetPlaylistContentsQueryParamType::TvShow ); @@ -1922,7 +1913,7 @@ actions: $response = $sdk->playlists->addPlaylistContents( - playlistID: 8502.01, + playlistID: 7013.44, uri: 'server://12345/com.plexapp.plugins.library/library/metadata/1', playQueueID: 123 @@ -2204,7 +2195,7 @@ actions: $filter = new Operations\QueryParamFilter(); $response = $sdk->sessions->getSessionHistory( - sort: '', + sort: 'viewedAt:desc', accountId: 1, filter: $filter, librarySectionID: 12 diff --git a/docs/Models/Errors/GetAllMediaLibraryUnauthorized.md b/docs/Models/Errors/GetAllMediaLibraryUnauthorized.md deleted file mode 100644 index 73b726f..0000000 --- a/docs/Models/Errors/GetAllMediaLibraryUnauthorized.md +++ /dev/null @@ -1,11 +0,0 @@ -# GetAllMediaLibraryUnauthorized - -Unauthorized - Returned if the X-Plex-Token is missing from the header or query. - - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | -| `errors` | array<[Errors\GetAllMediaLibraryLibraryErrors](../../Models/Errors/GetAllMediaLibraryLibraryErrors.md)> | :heavy_minus_sign: | N/A | -| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/Models/Errors/GetAllMediaLibraryBadRequest.md b/docs/Models/Errors/GetLibrarySectionsAllBadRequest.md similarity index 91% rename from docs/Models/Errors/GetAllMediaLibraryBadRequest.md rename to docs/Models/Errors/GetLibrarySectionsAllBadRequest.md index cb530e8..8f5ad1d 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` | array<[Errors\GetAllMediaLibraryErrors](../../Models/Errors/GetAllMediaLibraryErrors.md)> | :heavy_minus_sign: | N/A | +| `errors` | array<[Errors\GetLibrarySectionsAllErrors](../../Models/Errors/GetLibrarySectionsAllErrors.md)> | :heavy_minus_sign: | N/A | | `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :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 3865ed2..21c4b35 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 f2773b8..839a9aa 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/GetLibrarySectionsAllUnauthorized.md b/docs/Models/Errors/GetLibrarySectionsAllUnauthorized.md new file mode 100644 index 0000000..15110fd --- /dev/null +++ b/docs/Models/Errors/GetLibrarySectionsAllUnauthorized.md @@ -0,0 +1,11 @@ +# GetLibrarySectionsAllUnauthorized + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | +| `errors` | array<[Errors\GetLibrarySectionsAllLibraryErrors](../../Models/Errors/GetLibrarySectionsAllLibraryErrors.md)> | :heavy_minus_sign: | N/A | +| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/Models/Operations/Country.md b/docs/Models/Operations/Country.md index 7d78b84..b29ade6 100644 --- a/docs/Models/Operations/Country.md +++ b/docs/Models/Operations/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/Operations/Director.md b/docs/Models/Operations/Director.md index bda44cf..cd13f6d 100644 --- a/docs/Models/Operations/Director.md +++ b/docs/Models/Operations/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/Operations/Genre.md b/docs/Models/Operations/Genre.md index 92e53b2..3cd8abd 100644 --- a/docs/Models/Operations/Genre.md +++ b/docs/Models/Operations/Genre.md @@ -5,8 +5,8 @@ The filter query string for similar items. ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- | -| `id` | *int* | :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/Operations/GetActorsLibraryQueryParamType.md b/docs/Models/Operations/GetActorsLibraryQueryParamType.md index c370962..54c839f 100644 --- a/docs/Models/Operations/GetActorsLibraryQueryParamType.md +++ b/docs/Models/Operations/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/Operations/GetAllLibrariesType.md b/docs/Models/Operations/GetAllLibrariesType.md index d484421..432e044 100644 --- a/docs/Models/Operations/GetAllLibrariesType.md +++ b/docs/Models/Operations/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/Operations/GetAllMediaLibraryFieldType.md b/docs/Models/Operations/GetAllMediaLibraryFieldType.md deleted file mode 100644 index ec79211..0000000 --- a/docs/Models/Operations/GetAllMediaLibraryFieldType.md +++ /dev/null @@ -1,9 +0,0 @@ -# GetAllMediaLibraryFieldType - - -## Fields - -| Field | Type | Required | Description | Example | -| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | -| `type` | *string* | :heavy_check_mark: | N/A | tag | -| `operator` | array<[Operations\GetAllMediaLibraryOperator](../../Models/Operations/GetAllMediaLibraryOperator.md)> | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/Models/Operations/GetAllMediaLibraryGuids.md b/docs/Models/Operations/GetAllMediaLibraryGuids.md deleted file mode 100644 index 87fd56e..0000000 --- a/docs/Models/Operations/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/Operations/GetAllMediaLibraryImage.md b/docs/Models/Operations/GetAllMediaLibraryImage.md deleted file mode 100644 index 93b255e..0000000 --- a/docs/Models/Operations/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` | [Operations\GetAllMediaLibraryLibraryResponseType](../../Models/Operations/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/Operations/GetAllMediaLibraryLibraryOptimizedForStreaming.md b/docs/Models/Operations/GetAllMediaLibraryLibraryOptimizedForStreaming.md deleted file mode 100644 index 1d72949..0000000 --- a/docs/Models/Operations/GetAllMediaLibraryLibraryOptimizedForStreaming.md +++ /dev/null @@ -1,25 +0,0 @@ -# GetAllMediaLibraryLibraryOptimizedForStreaming - -Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true - - -## Supported Types - -### `Operations\GetAllMediaLibraryOptimizedForStreaming1` - -```php -/** -* @var Operations\GetAllMediaLibraryOptimizedForStreaming1 -*/ -Operations\GetAllMediaLibraryOptimizedForStreaming1 $value = /* values here */ -``` - -### `bool` - -```php -/** -* @var bool -*/ -bool $value = /* values here */ -``` - diff --git a/docs/Models/Operations/GetAllMediaLibraryLibraryType.md b/docs/Models/Operations/GetAllMediaLibraryLibraryType.md deleted file mode 100644 index 31fa60e..0000000 --- a/docs/Models/Operations/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/Operations/GetAllMediaLibraryMedia.md b/docs/Models/Operations/GetAllMediaLibraryMedia.md deleted file mode 100644 index 45e4667..0000000 --- a/docs/Models/Operations/GetAllMediaLibraryMedia.md +++ /dev/null @@ -1,26 +0,0 @@ -# GetAllMediaLibraryMedia - - -## Fields - -| Field | Type | Required | Description | Example | -| ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | -| `id` | *int* | :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` | [Operations\OptimizedForStreaming1\|bool\|null](../../Models/Operations/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` | array<[Operations\GetAllMediaLibraryPart](../../Models/Operations/GetAllMediaLibraryPart.md)> | :heavy_minus_sign: | An array of parts for this media item. | | \ No newline at end of file diff --git a/docs/Models/Operations/GetAllMediaLibraryMediaContainer.md b/docs/Models/Operations/GetAllMediaLibraryMediaContainer.md deleted file mode 100644 index 8f79333..0000000 --- a/docs/Models/Operations/GetAllMediaLibraryMediaContainer.md +++ /dev/null @@ -1,26 +0,0 @@ -# GetAllMediaLibraryMediaContainer - - -## Fields - -| Field | Type | Required | Description | Example | -| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | -| `size` | *int* | :heavy_check_mark: | Number of media items returned in this response. | 50 | -| `totalSize` | *int* | :heavy_check_mark: | Total number of media items in the library. | 50 | -| `offset` | *int* | :heavy_check_mark: | Offset value for pagination. | 0 | -| `allowSync` | *bool* | :heavy_check_mark: | Indicates whether syncing is allowed. | false | -| `art` | *string* | :heavy_check_mark: | URL for the background artwork of the media container. | /:/resources/show-fanart.jpg | -| `content` | *string* | :heavy_check_mark: | The content type or mode. | secondary | -| `identifier` | *string* | :heavy_check_mark: | An plugin identifier for the media container. | com.plexapp.plugins.library | -| `librarySectionID` | *int* | :heavy_check_mark: | The unique identifier for the library section. | 2 | -| `librarySectionTitle` | *string* | :heavy_check_mark: | The title of the library section. | TV Series | -| `librarySectionUUID` | *?string* | :heavy_minus_sign: | The universally unique identifier for the library section. | e69655a2-ef48-4aba-bb19-0cc34d1e7d36 | -| `mediaTagPrefix` | *string* | :heavy_check_mark: | The prefix used for media tag resource paths. | /system/bundle/media/flags/ | -| `mediaTagVersion` | *int* | :heavy_check_mark: | The version number for media tags. | 1734362201 | -| `thumb` | *string* | :heavy_check_mark: | URL for the thumbnail image of the media container. | /:/resources/show.png | -| `nocache` | *bool* | :heavy_check_mark: | Specifies whether caching is disabled. | true | -| `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` | [?Operations\GetAllMediaLibraryMeta](../../Models/Operations/GetAllMediaLibraryMeta.md) | :heavy_minus_sign: | The Meta object is only included in the response if the `includeMeta` parameter is set to `1`.
| | -| `metadata` | array<[Operations\GetAllMediaLibraryMetadata](../../Models/Operations/GetAllMediaLibraryMetadata.md)> | :heavy_minus_sign: | An array of metadata items. | | \ No newline at end of file diff --git a/docs/Models/Operations/GetAllMediaLibraryMeta.md b/docs/Models/Operations/GetAllMediaLibraryMeta.md deleted file mode 100644 index eb46b9e..0000000 --- a/docs/Models/Operations/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` | array<[Operations\GetAllMediaLibraryType](../../Models/Operations/GetAllMediaLibraryType.md)> | :heavy_minus_sign: | N/A | -| `fieldType` | array<[Operations\GetAllMediaLibraryFieldType](../../Models/Operations/GetAllMediaLibraryFieldType.md)> | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/Models/Operations/GetAllMediaLibraryQueryParamType.md b/docs/Models/Operations/GetAllMediaLibraryQueryParamType.md deleted file mode 100644 index 9cddd84..0000000 --- a/docs/Models/Operations/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/Operations/GetAllMediaLibraryResponse.md b/docs/Models/Operations/GetAllMediaLibraryResponse.md deleted file mode 100644 index 0aa6656..0000000 --- a/docs/Models/Operations/GetAllMediaLibraryResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# GetAllMediaLibraryResponse - - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | -| `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` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | -| `object` | [?Operations\GetAllMediaLibraryResponseBody](../../Models/Operations/GetAllMediaLibraryResponseBody.md) | :heavy_minus_sign: | Successful response containing media container data. | \ No newline at end of file diff --git a/docs/Models/Operations/GetAllMediaLibraryResponseBody.md b/docs/Models/Operations/GetAllMediaLibraryResponseBody.md deleted file mode 100644 index e0c3573..0000000 --- a/docs/Models/Operations/GetAllMediaLibraryResponseBody.md +++ /dev/null @@ -1,10 +0,0 @@ -# GetAllMediaLibraryResponseBody - -Successful response containing media container data. - - -## Fields - -| Field | Type | Required | Description | -| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | -| `mediaContainer` | [?Operations\GetAllMediaLibraryMediaContainer](../../Models/Operations/GetAllMediaLibraryMediaContainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/Models/Operations/GetAllMediaLibrarySort.md b/docs/Models/Operations/GetAllMediaLibrarySort.md deleted file mode 100644 index 79e23af..0000000 --- a/docs/Models/Operations/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` | [?Operations\GetAllMediaLibraryActiveDirection](../../Models/Operations/GetAllMediaLibraryActiveDirection.md) | :heavy_minus_sign: | The direction of the sort. Can be either `asc` or `desc`.
| asc | -| `defaultDirection` | [?Operations\GetAllMediaLibraryDefaultDirection](../../Models/Operations/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/Operations/GetAllMediaLibraryStream.md b/docs/Models/Operations/GetAllMediaLibraryStream.md deleted file mode 100644 index 21a59b2..0000000 --- a/docs/Models/Operations/GetAllMediaLibraryStream.md +++ /dev/null @@ -1,58 +0,0 @@ -# GetAllMediaLibraryStream - - -## Fields - -| Field | Type | Required | Description | Example | -| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -| `id` | *int* | :heavy_check_mark: | Unique stream identifier. | 1002625 | -| `streamType` | [Operations\GetAllMediaLibraryStreamType](../../Models/Operations/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/Operations/GetAllMediaLibraryType.md b/docs/Models/Operations/GetAllMediaLibraryType.md deleted file mode 100644 index c36e7d1..0000000 --- a/docs/Models/Operations/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` | array<[Operations\GetAllMediaLibraryFilter](../../Models/Operations/GetAllMediaLibraryFilter.md)> | :heavy_minus_sign: | N/A | | -| `sort` | array<[Operations\GetAllMediaLibrarySort](../../Models/Operations/GetAllMediaLibrarySort.md)> | :heavy_minus_sign: | N/A | | -| `field` | array<[Operations\GetAllMediaLibraryField](../../Models/Operations/GetAllMediaLibraryField.md)> | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Operations/GetCountriesLibraryQueryParamType.md b/docs/Models/Operations/GetCountriesLibraryQueryParamType.md index 722cb19..d29a551 100644 --- a/docs/Models/Operations/GetCountriesLibraryQueryParamType.md +++ b/docs/Models/Operations/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/Operations/GetGenresLibraryQueryParamType.md b/docs/Models/Operations/GetGenresLibraryQueryParamType.md index 4ef877e..9f1c219 100644 --- a/docs/Models/Operations/GetGenresLibraryQueryParamType.md +++ b/docs/Models/Operations/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/Operations/GetLibraryItemsLibraryType.md b/docs/Models/Operations/GetLibraryItemsLibraryType.md index eae5ecb..0f6999d 100644 --- a/docs/Models/Operations/GetLibraryItemsLibraryType.md +++ b/docs/Models/Operations/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/Operations/GetLibraryItemsMetadata.md b/docs/Models/Operations/GetLibraryItemsMetadata.md index a1fe1dc..ef70222 100644 --- a/docs/Models/Operations/GetLibraryItemsMetadata.md +++ b/docs/Models/Operations/GetLibraryItemsMetadata.md @@ -13,7 +13,7 @@ | `librarySectionID` | *?int* | :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` | [Operations\GetLibraryItemsLibraryType](../../Models/Operations/GetLibraryItemsLibraryType.md) | :heavy_check_mark: | The type of media content
| movie | +| `type` | [Operations\GetLibraryItemsLibraryType](../../Models/Operations/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/Operations/GetLibraryItemsQueryParamType.md b/docs/Models/Operations/GetLibraryItemsQueryParamType.md index 2aa19a3..02791ea 100644 --- a/docs/Models/Operations/GetLibraryItemsQueryParamType.md +++ b/docs/Models/Operations/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/Operations/GetAllMediaLibraryActiveDirection.md b/docs/Models/Operations/GetLibrarySectionsAllActiveDirection.md similarity index 83% rename from docs/Models/Operations/GetAllMediaLibraryActiveDirection.md rename to docs/Models/Operations/GetLibrarySectionsAllActiveDirection.md index 459c02e..ad9278a 100644 --- a/docs/Models/Operations/GetAllMediaLibraryActiveDirection.md +++ b/docs/Models/Operations/GetLibrarySectionsAllActiveDirection.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryActiveDirection +# GetLibrarySectionsAllActiveDirection The direction of the sort. Can be either `asc` or `desc`. diff --git a/docs/Models/Operations/GetAllMediaLibraryCollection.md b/docs/Models/Operations/GetLibrarySectionsAllCollection.md similarity index 96% rename from docs/Models/Operations/GetAllMediaLibraryCollection.md rename to docs/Models/Operations/GetLibrarySectionsAllCollection.md index 16d9547..f6c9d64 100644 --- a/docs/Models/Operations/GetAllMediaLibraryCollection.md +++ b/docs/Models/Operations/GetLibrarySectionsAllCollection.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryCollection +# GetLibrarySectionsAllCollection ## Fields diff --git a/docs/Models/Operations/GetAllMediaLibraryCountry.md b/docs/Models/Operations/GetLibrarySectionsAllCountry.md similarity index 95% rename from docs/Models/Operations/GetAllMediaLibraryCountry.md rename to docs/Models/Operations/GetLibrarySectionsAllCountry.md index 057a844..3d750a5 100644 --- a/docs/Models/Operations/GetAllMediaLibraryCountry.md +++ b/docs/Models/Operations/GetLibrarySectionsAllCountry.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryCountry +# GetLibrarySectionsAllCountry ## Fields diff --git a/docs/Models/Operations/GetAllMediaLibraryDefaultDirection.md b/docs/Models/Operations/GetLibrarySectionsAllDefaultDirection.md similarity index 83% rename from docs/Models/Operations/GetAllMediaLibraryDefaultDirection.md rename to docs/Models/Operations/GetLibrarySectionsAllDefaultDirection.md index 555c7c0..3f42363 100644 --- a/docs/Models/Operations/GetAllMediaLibraryDefaultDirection.md +++ b/docs/Models/Operations/GetLibrarySectionsAllDefaultDirection.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryDefaultDirection +# GetLibrarySectionsAllDefaultDirection The direction of the sort. Can be either `asc` or `desc`. diff --git a/docs/Models/Operations/GetAllMediaLibraryDirector.md b/docs/Models/Operations/GetLibrarySectionsAllDirector.md similarity index 91% rename from docs/Models/Operations/GetAllMediaLibraryDirector.md rename to docs/Models/Operations/GetLibrarySectionsAllDirector.md index cbbd4ed..cfe7452 100644 --- a/docs/Models/Operations/GetAllMediaLibraryDirector.md +++ b/docs/Models/Operations/GetLibrarySectionsAllDirector.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryDirector +# GetLibrarySectionsAllDirector ## Fields diff --git a/docs/Models/Operations/GetAllMediaLibraryField.md b/docs/Models/Operations/GetLibrarySectionsAllField.md similarity index 95% rename from docs/Models/Operations/GetAllMediaLibraryField.md rename to docs/Models/Operations/GetLibrarySectionsAllField.md index d763176..9dd313a 100644 --- a/docs/Models/Operations/GetAllMediaLibraryField.md +++ b/docs/Models/Operations/GetLibrarySectionsAllField.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryField +# GetLibrarySectionsAllField ## Fields diff --git a/docs/Models/Operations/GetLibrarySectionsAllFieldType.md b/docs/Models/Operations/GetLibrarySectionsAllFieldType.md new file mode 100644 index 0000000..ce946a7 --- /dev/null +++ b/docs/Models/Operations/GetLibrarySectionsAllFieldType.md @@ -0,0 +1,9 @@ +# GetLibrarySectionsAllFieldType + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | +| `type` | *string* | :heavy_check_mark: | N/A | tag | +| `operator` | array<[Operations\GetLibrarySectionsAllOperator](../../Models/Operations/GetLibrarySectionsAllOperator.md)> | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/Models/Operations/GetAllMediaLibraryFilter.md b/docs/Models/Operations/GetLibrarySectionsAllFilter.md similarity index 97% rename from docs/Models/Operations/GetAllMediaLibraryFilter.md rename to docs/Models/Operations/GetLibrarySectionsAllFilter.md index 6ac0841..d9f4b7d 100644 --- a/docs/Models/Operations/GetAllMediaLibraryFilter.md +++ b/docs/Models/Operations/GetLibrarySectionsAllFilter.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryFilter +# GetLibrarySectionsAllFilter ## Fields diff --git a/docs/Models/Operations/GetAllMediaLibraryGenre.md b/docs/Models/Operations/GetLibrarySectionsAllGenre.md similarity index 95% rename from docs/Models/Operations/GetAllMediaLibraryGenre.md rename to docs/Models/Operations/GetLibrarySectionsAllGenre.md index d3222ff..cd46a71 100644 --- a/docs/Models/Operations/GetAllMediaLibraryGenre.md +++ b/docs/Models/Operations/GetLibrarySectionsAllGenre.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryGenre +# GetLibrarySectionsAllGenre ## Fields diff --git a/docs/Models/Operations/GetLibrarySectionsAllGuids.md b/docs/Models/Operations/GetLibrarySectionsAllGuids.md new file mode 100644 index 0000000..5fa7ad8 --- /dev/null +++ b/docs/Models/Operations/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/Operations/GetAllMediaLibraryHasThumbnail.md b/docs/Models/Operations/GetLibrarySectionsAllHasThumbnail.md similarity index 79% rename from docs/Models/Operations/GetAllMediaLibraryHasThumbnail.md rename to docs/Models/Operations/GetLibrarySectionsAllHasThumbnail.md index 7fd371e..327600d 100644 --- a/docs/Models/Operations/GetAllMediaLibraryHasThumbnail.md +++ b/docs/Models/Operations/GetLibrarySectionsAllHasThumbnail.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryHasThumbnail +# GetLibrarySectionsAllHasThumbnail Indicates if the part has a thumbnail. diff --git a/docs/Models/Operations/GetLibrarySectionsAllImage.md b/docs/Models/Operations/GetLibrarySectionsAllImage.md new file mode 100644 index 0000000..56d2ad8 --- /dev/null +++ b/docs/Models/Operations/GetLibrarySectionsAllImage.md @@ -0,0 +1,10 @@ +# GetLibrarySectionsAllImage + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | +| `alt` | *string* | :heavy_check_mark: | N/A | Episode 1 | +| `type` | [Operations\GetLibrarySectionsAllLibraryResponseType](../../Models/Operations/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/Operations/GetLibrarySectionsAllLibraryOptimizedForStreaming.md b/docs/Models/Operations/GetLibrarySectionsAllLibraryOptimizedForStreaming.md new file mode 100644 index 0000000..da04372 --- /dev/null +++ b/docs/Models/Operations/GetLibrarySectionsAllLibraryOptimizedForStreaming.md @@ -0,0 +1,25 @@ +# GetLibrarySectionsAllLibraryOptimizedForStreaming + +Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true + + +## Supported Types + +### `Operations\GetLibrarySectionsAllOptimizedForStreaming1` + +```php +/** +* @var Operations\GetLibrarySectionsAllOptimizedForStreaming1 +*/ +Operations\GetLibrarySectionsAllOptimizedForStreaming1 $value = /* values here */ +``` + +### `bool` + +```php +/** +* @var bool +*/ +bool $value = /* values here */ +``` + diff --git a/docs/Models/Operations/GetAllMediaLibraryLibraryResponseType.md b/docs/Models/Operations/GetLibrarySectionsAllLibraryResponseType.md similarity index 83% rename from docs/Models/Operations/GetAllMediaLibraryLibraryResponseType.md rename to docs/Models/Operations/GetLibrarySectionsAllLibraryResponseType.md index 891737d..ccda328 100644 --- a/docs/Models/Operations/GetAllMediaLibraryLibraryResponseType.md +++ b/docs/Models/Operations/GetLibrarySectionsAllLibraryResponseType.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryLibraryResponseType +# GetLibrarySectionsAllLibraryResponseType ## Values diff --git a/docs/Models/Operations/GetLibrarySectionsAllLibraryType.md b/docs/Models/Operations/GetLibrarySectionsAllLibraryType.md new file mode 100644 index 0000000..5b9c6fb --- /dev/null +++ b/docs/Models/Operations/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/Operations/GetLibrarySectionsAllMedia.md b/docs/Models/Operations/GetLibrarySectionsAllMedia.md new file mode 100644 index 0000000..12480c5 --- /dev/null +++ b/docs/Models/Operations/GetLibrarySectionsAllMedia.md @@ -0,0 +1,26 @@ +# GetLibrarySectionsAllMedia + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `id` | *int* | :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` | [Operations\OptimizedForStreaming1\|bool\|null](../../Models/Operations/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` | array<[Operations\GetLibrarySectionsAllPart](../../Models/Operations/GetLibrarySectionsAllPart.md)> | :heavy_minus_sign: | An array of parts for this media item. | | \ No newline at end of file diff --git a/docs/Models/Operations/GetLibrarySectionsAllMediaContainer.md b/docs/Models/Operations/GetLibrarySectionsAllMediaContainer.md new file mode 100644 index 0000000..c868670 --- /dev/null +++ b/docs/Models/Operations/GetLibrarySectionsAllMediaContainer.md @@ -0,0 +1,26 @@ +# GetLibrarySectionsAllMediaContainer + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | +| `size` | *int* | :heavy_check_mark: | Number of media items returned in this response. | 50 | +| `totalSize` | *int* | :heavy_check_mark: | Total number of media items in the library. | 50 | +| `offset` | *int* | :heavy_check_mark: | Offset value for pagination. | 0 | +| `allowSync` | *bool* | :heavy_check_mark: | Indicates whether syncing is allowed. | false | +| `art` | *string* | :heavy_check_mark: | URL for the background artwork of the media container. | /:/resources/show-fanart.jpg | +| `content` | *string* | :heavy_check_mark: | The content type or mode. | secondary | +| `identifier` | *string* | :heavy_check_mark: | An plugin identifier for the media container. | com.plexapp.plugins.library | +| `librarySectionID` | *int* | :heavy_check_mark: | The unique identifier for the library section. | 2 | +| `librarySectionTitle` | *string* | :heavy_check_mark: | The title of the library section. | TV Series | +| `librarySectionUUID` | *?string* | :heavy_minus_sign: | The universally unique identifier for the library section. | e69655a2-ef48-4aba-bb19-0cc34d1e7d36 | +| `mediaTagPrefix` | *string* | :heavy_check_mark: | The prefix used for media tag resource paths. | /system/bundle/media/flags/ | +| `mediaTagVersion` | *int* | :heavy_check_mark: | The version number for media tags. | 1734362201 | +| `thumb` | *string* | :heavy_check_mark: | URL for the thumbnail image of the media container. | /:/resources/show.png | +| `nocache` | *bool* | :heavy_check_mark: | Specifies whether caching is disabled. | true | +| `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` | [?Operations\GetLibrarySectionsAllMeta](../../Models/Operations/GetLibrarySectionsAllMeta.md) | :heavy_minus_sign: | The Meta object is only included in the response if the `includeMeta` parameter is set to `1`.
| | +| `metadata` | array<[Operations\GetLibrarySectionsAllMetadata](../../Models/Operations/GetLibrarySectionsAllMetadata.md)> | :heavy_minus_sign: | An array of metadata items. | | \ No newline at end of file diff --git a/docs/Models/Operations/GetLibrarySectionsAllMeta.md b/docs/Models/Operations/GetLibrarySectionsAllMeta.md new file mode 100644 index 0000000..5d312cb --- /dev/null +++ b/docs/Models/Operations/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` | array<[Operations\GetLibrarySectionsAllType](../../Models/Operations/GetLibrarySectionsAllType.md)> | :heavy_minus_sign: | N/A | +| `fieldType` | array<[Operations\GetLibrarySectionsAllFieldType](../../Models/Operations/GetLibrarySectionsAllFieldType.md)> | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/Models/Operations/GetAllMediaLibraryMetadata.md b/docs/Models/Operations/GetLibrarySectionsAllMetadata.md similarity index 97% rename from docs/Models/Operations/GetAllMediaLibraryMetadata.md rename to docs/Models/Operations/GetLibrarySectionsAllMetadata.md index 70e65e7..20df379 100644 --- a/docs/Models/Operations/GetAllMediaLibraryMetadata.md +++ b/docs/Models/Operations/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` | [Operations\GetAllMediaLibraryLibraryType](../../Models/Operations/GetAllMediaLibraryLibraryType.md) | :heavy_check_mark: | N/A | movie | +| `type` | [Operations\GetLibrarySectionsAllLibraryType](../../Models/Operations/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` | array<[Operations\GetAllMediaLibraryImage](../../Models/Operations/GetAllMediaLibraryImage.md)> | :heavy_minus_sign: | N/A | | -| `ultraBlurColors` | [?Operations\GetAllMediaLibraryUltraBlurColors](../../Models/Operations/GetAllMediaLibraryUltraBlurColors.md) | :heavy_minus_sign: | N/A | | -| `media` | array<[Operations\GetAllMediaLibraryMedia](../../Models/Operations/GetAllMediaLibraryMedia.md)> | :heavy_minus_sign: | N/A | | -| `genre` | array<[Operations\GetAllMediaLibraryGenre](../../Models/Operations/GetAllMediaLibraryGenre.md)> | :heavy_minus_sign: | N/A | | -| `country` | array<[Operations\GetAllMediaLibraryCountry](../../Models/Operations/GetAllMediaLibraryCountry.md)> | :heavy_minus_sign: | N/A | | -| `director` | array<[Operations\GetAllMediaLibraryDirector](../../Models/Operations/GetAllMediaLibraryDirector.md)> | :heavy_minus_sign: | N/A | | -| `writer` | array<[Operations\GetAllMediaLibraryWriter](../../Models/Operations/GetAllMediaLibraryWriter.md)> | :heavy_minus_sign: | N/A | | -| `role` | array<[Operations\GetAllMediaLibraryRole](../../Models/Operations/GetAllMediaLibraryRole.md)> | :heavy_minus_sign: | N/A | | -| `guids` | array<[Operations\GetAllMediaLibraryGuids](../../Models/Operations/GetAllMediaLibraryGuids.md)> | :heavy_minus_sign: | N/A | | -| `collection` | array<[Operations\GetAllMediaLibraryCollection](../../Models/Operations/GetAllMediaLibraryCollection.md)> | :heavy_minus_sign: | N/A | | \ No newline at end of file +| `image` | array<[Operations\GetLibrarySectionsAllImage](../../Models/Operations/GetLibrarySectionsAllImage.md)> | :heavy_minus_sign: | N/A | | +| `ultraBlurColors` | [?Operations\GetLibrarySectionsAllUltraBlurColors](../../Models/Operations/GetLibrarySectionsAllUltraBlurColors.md) | :heavy_minus_sign: | N/A | | +| `guids` | array<[Operations\GetLibrarySectionsAllGuids](../../Models/Operations/GetLibrarySectionsAllGuids.md)> | :heavy_minus_sign: | N/A | | +| `media` | array<[Operations\GetLibrarySectionsAllMedia](../../Models/Operations/GetLibrarySectionsAllMedia.md)> | :heavy_minus_sign: | N/A | | +| `genre` | array<[Operations\GetLibrarySectionsAllGenre](../../Models/Operations/GetLibrarySectionsAllGenre.md)> | :heavy_minus_sign: | N/A | | +| `country` | array<[Operations\GetLibrarySectionsAllCountry](../../Models/Operations/GetLibrarySectionsAllCountry.md)> | :heavy_minus_sign: | N/A | | +| `director` | array<[Operations\GetLibrarySectionsAllDirector](../../Models/Operations/GetLibrarySectionsAllDirector.md)> | :heavy_minus_sign: | N/A | | +| `writer` | array<[Operations\GetLibrarySectionsAllWriter](../../Models/Operations/GetLibrarySectionsAllWriter.md)> | :heavy_minus_sign: | N/A | | +| `role` | array<[Operations\GetLibrarySectionsAllRole](../../Models/Operations/GetLibrarySectionsAllRole.md)> | :heavy_minus_sign: | N/A | | +| `collection` | array<[Operations\GetLibrarySectionsAllCollection](../../Models/Operations/GetLibrarySectionsAllCollection.md)> | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Operations/GetAllMediaLibraryOperator.md b/docs/Models/Operations/GetLibrarySectionsAllOperator.md similarity index 93% rename from docs/Models/Operations/GetAllMediaLibraryOperator.md rename to docs/Models/Operations/GetLibrarySectionsAllOperator.md index 665f472..3d8c0fc 100644 --- a/docs/Models/Operations/GetAllMediaLibraryOperator.md +++ b/docs/Models/Operations/GetLibrarySectionsAllOperator.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryOperator +# GetLibrarySectionsAllOperator ## Fields diff --git a/docs/Models/Operations/GetAllMediaLibraryOptimizedForStreaming.md b/docs/Models/Operations/GetLibrarySectionsAllOptimizedForStreaming.md similarity index 88% rename from docs/Models/Operations/GetAllMediaLibraryOptimizedForStreaming.md rename to docs/Models/Operations/GetLibrarySectionsAllOptimizedForStreaming.md index 59caf18..26271b5 100644 --- a/docs/Models/Operations/GetAllMediaLibraryOptimizedForStreaming.md +++ b/docs/Models/Operations/GetLibrarySectionsAllOptimizedForStreaming.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryOptimizedForStreaming +# GetLibrarySectionsAllOptimizedForStreaming Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true diff --git a/docs/Models/Operations/GetAllMediaLibraryOptimizedForStreaming1.md b/docs/Models/Operations/GetLibrarySectionsAllOptimizedForStreaming1.md similarity index 66% rename from docs/Models/Operations/GetAllMediaLibraryOptimizedForStreaming1.md rename to docs/Models/Operations/GetLibrarySectionsAllOptimizedForStreaming1.md index 44999d1..d9de3df 100644 --- a/docs/Models/Operations/GetAllMediaLibraryOptimizedForStreaming1.md +++ b/docs/Models/Operations/GetLibrarySectionsAllOptimizedForStreaming1.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryOptimizedForStreaming1 +# GetLibrarySectionsAllOptimizedForStreaming1 ## Values diff --git a/docs/Models/Operations/GetAllMediaLibraryPart.md b/docs/Models/Operations/GetLibrarySectionsAllPart.md similarity index 52% rename from docs/Models/Operations/GetAllMediaLibraryPart.md rename to docs/Models/Operations/GetLibrarySectionsAllPart.md index 666b1bc..4008a6f 100644 --- a/docs/Models/Operations/GetAllMediaLibraryPart.md +++ b/docs/Models/Operations/GetLibrarySectionsAllPart.md @@ -1,23 +1,23 @@ -# GetAllMediaLibraryPart +# 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` | *int* | :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` | *int* | :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` | [Operations\GetAllMediaLibraryOptimizedForStreaming1\|bool\|null](../../Models/Operations/GetAllMediaLibraryLibraryOptimizedForStreaming.md) | :heavy_minus_sign: | Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true | | -| `hasThumbnail` | [?Operations\GetAllMediaLibraryHasThumbnail](../../Models/Operations/GetAllMediaLibraryHasThumbnail.md) | :heavy_minus_sign: | N/A | 1 | -| `stream` | array<[Operations\GetAllMediaLibraryStream](../../Models/Operations/GetAllMediaLibraryStream.md)> | :heavy_minus_sign: | An array of streams for this part. | | \ No newline at end of file +| 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` | *int* | :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` | *int* | :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` | [Operations\GetLibrarySectionsAllOptimizedForStreaming1\|bool\|null](../../Models/Operations/GetLibrarySectionsAllLibraryOptimizedForStreaming.md) | :heavy_minus_sign: | Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true | | +| `hasThumbnail` | [?Operations\GetLibrarySectionsAllHasThumbnail](../../Models/Operations/GetLibrarySectionsAllHasThumbnail.md) | :heavy_minus_sign: | N/A | 1 | +| `stream` | array<[Operations\GetLibrarySectionsAllStream](../../Models/Operations/GetLibrarySectionsAllStream.md)> | :heavy_minus_sign: | An array of streams for this part. | | \ No newline at end of file diff --git a/docs/Models/Operations/GetAllMediaLibraryQueryParamIncludeMeta.md b/docs/Models/Operations/GetLibrarySectionsAllQueryParamIncludeMeta.md similarity index 77% rename from docs/Models/Operations/GetAllMediaLibraryQueryParamIncludeMeta.md rename to docs/Models/Operations/GetLibrarySectionsAllQueryParamIncludeMeta.md index 7991b44..7f15773 100644 --- a/docs/Models/Operations/GetAllMediaLibraryQueryParamIncludeMeta.md +++ b/docs/Models/Operations/GetLibrarySectionsAllQueryParamIncludeMeta.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryQueryParamIncludeMeta +# GetLibrarySectionsAllQueryParamIncludeMeta Adds the Meta object to the response diff --git a/docs/Models/Operations/GetLibrarySectionsAllQueryParamType.md b/docs/Models/Operations/GetLibrarySectionsAllQueryParamType.md new file mode 100644 index 0000000..7e859e6 --- /dev/null +++ b/docs/Models/Operations/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/Operations/GetAllMediaLibraryRequest.md b/docs/Models/Operations/GetLibrarySectionsAllRequest.md similarity index 97% rename from docs/Models/Operations/GetAllMediaLibraryRequest.md rename to docs/Models/Operations/GetLibrarySectionsAllRequest.md index c4a7ef0..e7beee9 100644 --- a/docs/Models/Operations/GetAllMediaLibraryRequest.md +++ b/docs/Models/Operations/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` | [Operations\GetAllMediaLibraryQueryParamType](../../Models/Operations/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` | [?Operations\GetAllMediaLibraryQueryParamIncludeMeta](../../Models/Operations/GetAllMediaLibraryQueryParamIncludeMeta.md) | :heavy_minus_sign: | Adds the Meta object to the response
| 1 | +| `type` | [Operations\GetLibrarySectionsAllQueryParamType](../../Models/Operations/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` | [?Operations\GetLibrarySectionsAllQueryParamIncludeMeta](../../Models/Operations/GetLibrarySectionsAllQueryParamIncludeMeta.md) | :heavy_minus_sign: | Adds the Meta object to the response
| 1 | | `includeGuids` | [?Operations\QueryParamIncludeGuids](../../Models/Operations/QueryParamIncludeGuids.md) | :heavy_minus_sign: | Adds the Guid object to the response
| 1 | | `includeAdvanced` | [?Operations\IncludeAdvanced](../../Models/Operations/IncludeAdvanced.md) | :heavy_minus_sign: | N/A | 1 | | `includeCollections` | [?Operations\QueryParamIncludeCollections](../../Models/Operations/QueryParamIncludeCollections.md) | :heavy_minus_sign: | N/A | 1 | diff --git a/docs/Models/Operations/GetLibrarySectionsAllResponse.md b/docs/Models/Operations/GetLibrarySectionsAllResponse.md new file mode 100644 index 0000000..649f5ea --- /dev/null +++ b/docs/Models/Operations/GetLibrarySectionsAllResponse.md @@ -0,0 +1,11 @@ +# GetLibrarySectionsAllResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | +| `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` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [?Operations\GetLibrarySectionsAllResponseBody](../../Models/Operations/GetLibrarySectionsAllResponseBody.md) | :heavy_minus_sign: | Successful response containing media container data. | \ No newline at end of file diff --git a/docs/Models/Operations/GetLibrarySectionsAllResponseBody.md b/docs/Models/Operations/GetLibrarySectionsAllResponseBody.md new file mode 100644 index 0000000..7bcf6eb --- /dev/null +++ b/docs/Models/Operations/GetLibrarySectionsAllResponseBody.md @@ -0,0 +1,10 @@ +# GetLibrarySectionsAllResponseBody + +Successful response containing media container data. + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | +| `mediaContainer` | [?Operations\GetLibrarySectionsAllMediaContainer](../../Models/Operations/GetLibrarySectionsAllMediaContainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/Models/Operations/GetAllMediaLibraryRole.md b/docs/Models/Operations/GetLibrarySectionsAllRole.md similarity index 97% rename from docs/Models/Operations/GetAllMediaLibraryRole.md rename to docs/Models/Operations/GetLibrarySectionsAllRole.md index 22a59d1..3d8d5dd 100644 --- a/docs/Models/Operations/GetAllMediaLibraryRole.md +++ b/docs/Models/Operations/GetLibrarySectionsAllRole.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryRole +# GetLibrarySectionsAllRole ## Fields diff --git a/docs/Models/Operations/GetLibrarySectionsAllSort.md b/docs/Models/Operations/GetLibrarySectionsAllSort.md new file mode 100644 index 0000000..4275968 --- /dev/null +++ b/docs/Models/Operations/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` | [?Operations\GetLibrarySectionsAllActiveDirection](../../Models/Operations/GetLibrarySectionsAllActiveDirection.md) | :heavy_minus_sign: | The direction of the sort. Can be either `asc` or `desc`.
| asc | +| `defaultDirection` | [?Operations\GetLibrarySectionsAllDefaultDirection](../../Models/Operations/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/Operations/GetLibrarySectionsAllStream.md b/docs/Models/Operations/GetLibrarySectionsAllStream.md new file mode 100644 index 0000000..25e2b12 --- /dev/null +++ b/docs/Models/Operations/GetLibrarySectionsAllStream.md @@ -0,0 +1,58 @@ +# GetLibrarySectionsAllStream + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| `id` | *int* | :heavy_check_mark: | Unique stream identifier. | 1002625 | +| `streamType` | [Operations\GetLibrarySectionsAllStreamType](../../Models/Operations/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/Operations/GetAllMediaLibraryStreamType.md b/docs/Models/Operations/GetLibrarySectionsAllStreamType.md similarity index 86% rename from docs/Models/Operations/GetAllMediaLibraryStreamType.md rename to docs/Models/Operations/GetLibrarySectionsAllStreamType.md index 9156115..07e5345 100644 --- a/docs/Models/Operations/GetAllMediaLibraryStreamType.md +++ b/docs/Models/Operations/GetLibrarySectionsAllStreamType.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryStreamType +# GetLibrarySectionsAllStreamType Stream type: - 1 = video diff --git a/docs/Models/Operations/GetLibrarySectionsAllType.md b/docs/Models/Operations/GetLibrarySectionsAllType.md new file mode 100644 index 0000000..6457110 --- /dev/null +++ b/docs/Models/Operations/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` | array<[Operations\GetLibrarySectionsAllFilter](../../Models/Operations/GetLibrarySectionsAllFilter.md)> | :heavy_minus_sign: | N/A | | +| `sort` | array<[Operations\GetLibrarySectionsAllSort](../../Models/Operations/GetLibrarySectionsAllSort.md)> | :heavy_minus_sign: | N/A | | +| `field` | array<[Operations\GetLibrarySectionsAllField](../../Models/Operations/GetLibrarySectionsAllField.md)> | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Operations/GetAllMediaLibraryUltraBlurColors.md b/docs/Models/Operations/GetLibrarySectionsAllUltraBlurColors.md similarity index 94% rename from docs/Models/Operations/GetAllMediaLibraryUltraBlurColors.md rename to docs/Models/Operations/GetLibrarySectionsAllUltraBlurColors.md index 19e8ce2..6d0186a 100644 --- a/docs/Models/Operations/GetAllMediaLibraryUltraBlurColors.md +++ b/docs/Models/Operations/GetLibrarySectionsAllUltraBlurColors.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryUltraBlurColors +# GetLibrarySectionsAllUltraBlurColors ## Fields diff --git a/docs/Models/Operations/GetAllMediaLibraryWriter.md b/docs/Models/Operations/GetLibrarySectionsAllWriter.md similarity index 91% rename from docs/Models/Operations/GetAllMediaLibraryWriter.md rename to docs/Models/Operations/GetLibrarySectionsAllWriter.md index 4c55c19..9148caf 100644 --- a/docs/Models/Operations/GetAllMediaLibraryWriter.md +++ b/docs/Models/Operations/GetLibrarySectionsAllWriter.md @@ -1,4 +1,4 @@ -# GetAllMediaLibraryWriter +# GetLibrarySectionsAllWriter ## Fields diff --git a/docs/Models/Operations/GetMediaMetaDataCountry.md b/docs/Models/Operations/GetMediaMetaDataCountry.md index 44a81be..4c7af15 100644 --- a/docs/Models/Operations/GetMediaMetaDataCountry.md +++ b/docs/Models/Operations/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/Operations/GetMediaMetaDataDirector.md b/docs/Models/Operations/GetMediaMetaDataDirector.md index 9cfede0..ac26288 100644 --- a/docs/Models/Operations/GetMediaMetaDataDirector.md +++ b/docs/Models/Operations/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/Operations/GetMediaMetaDataGenre.md b/docs/Models/Operations/GetMediaMetaDataGenre.md index ecaff1c..6530008 100644 --- a/docs/Models/Operations/GetMediaMetaDataGenre.md +++ b/docs/Models/Operations/GetMediaMetaDataGenre.md @@ -5,8 +5,8 @@ The filter query string for similar items. ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- | -| `id` | *int* | :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/Operations/GetMediaMetaDataGuids.md b/docs/Models/Operations/GetMediaMetaDataGuids.md index 30a1b8d..5e5245a 100644 --- a/docs/Models/Operations/GetMediaMetaDataGuids.md +++ b/docs/Models/Operations/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/Operations/GetMediaMetaDataMetadata.md b/docs/Models/Operations/GetMediaMetaDataMetadata.md index a30b35a..0752ba3 100644 --- a/docs/Models/Operations/GetMediaMetaDataMetadata.md +++ b/docs/Models/Operations/GetMediaMetaDataMetadata.md @@ -67,6 +67,7 @@ Unknown | `librarySectionID` | *int* | :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` | array<[Operations\GetMediaMetaDataGuids](../../Models/Operations/GetMediaMetaDataGuids.md)> | :heavy_minus_sign: | N/A | | | `media` | array<[Operations\GetMediaMetaDataMedia](../../Models/Operations/GetMediaMetaDataMedia.md)> | :heavy_minus_sign: | N/A | | | `genre` | array<[Operations\GetMediaMetaDataGenre](../../Models/Operations/GetMediaMetaDataGenre.md)> | :heavy_minus_sign: | N/A | | | `country` | array<[Operations\GetMediaMetaDataCountry](../../Models/Operations/GetMediaMetaDataCountry.md)> | :heavy_minus_sign: | N/A | | @@ -74,7 +75,6 @@ Unknown | `writer` | array<[Operations\GetMediaMetaDataWriter](../../Models/Operations/GetMediaMetaDataWriter.md)> | :heavy_minus_sign: | N/A | | | `producer` | array<[Operations\GetMediaMetaDataProducer](../../Models/Operations/GetMediaMetaDataProducer.md)> | :heavy_minus_sign: | N/A | | | `role` | array<[Operations\GetMediaMetaDataRole](../../Models/Operations/GetMediaMetaDataRole.md)> | :heavy_minus_sign: | N/A | | -| `guids` | array<[Operations\GetMediaMetaDataGuids](../../Models/Operations/GetMediaMetaDataGuids.md)> | :heavy_minus_sign: | N/A | | | `ratings` | array<[Operations\Ratings](../../Models/Operations/Ratings.md)> | :heavy_minus_sign: | N/A | | | `similar` | array<[Operations\GetMediaMetaDataSimilar](../../Models/Operations/GetMediaMetaDataSimilar.md)> | :heavy_minus_sign: | N/A | | | `location` | array<[Operations\GetMediaMetaDataLocation](../../Models/Operations/GetMediaMetaDataLocation.md)> | :heavy_minus_sign: | N/A | | diff --git a/docs/Models/Operations/GetMediaMetaDataRequest.md b/docs/Models/Operations/GetMediaMetaDataRequest.md index 6229fff..3e5201b 100644 --- a/docs/Models/Operations/GetMediaMetaDataRequest.md +++ b/docs/Models/Operations/GetMediaMetaDataRequest.md @@ -3,19 +3,19 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | -| `ratingKey` | *int* | :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/Operations/GetMediaMetaDataRole.md b/docs/Models/Operations/GetMediaMetaDataRole.md index 654cd8f..7fe1301 100644 --- a/docs/Models/Operations/GetMediaMetaDataRole.md +++ b/docs/Models/Operations/GetMediaMetaDataRole.md @@ -3,11 +3,11 @@ ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | -| `id` | *int* | :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/Operations/GetMediaMetaDataType.md b/docs/Models/Operations/GetMediaMetaDataType.md index 02105f9..415e437 100644 --- a/docs/Models/Operations/GetMediaMetaDataType.md +++ b/docs/Models/Operations/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/Operations/GetMediaMetaDataWriter.md b/docs/Models/Operations/GetMediaMetaDataWriter.md index 08ff205..353cd3b 100644 --- a/docs/Models/Operations/GetMediaMetaDataWriter.md +++ b/docs/Models/Operations/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/Operations/GetPlaylistContentsQueryParamType.md b/docs/Models/Operations/GetPlaylistContentsQueryParamType.md index 7d477fb..fc52d53 100644 --- a/docs/Models/Operations/GetPlaylistContentsQueryParamType.md +++ b/docs/Models/Operations/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/Operations/GetRecentlyAddedHubsType.md b/docs/Models/Operations/GetRecentlyAddedHubsType.md index 750ece0..4d903e9 100644 --- a/docs/Models/Operations/GetRecentlyAddedHubsType.md +++ b/docs/Models/Operations/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/Operations/GetRecentlyAddedMetadata.md b/docs/Models/Operations/GetRecentlyAddedMetadata.md index 57887b9..75419d2 100644 --- a/docs/Models/Operations/GetRecentlyAddedMetadata.md +++ b/docs/Models/Operations/GetRecentlyAddedMetadata.md @@ -71,6 +71,7 @@ Unknown | `year` | *?int* | :heavy_minus_sign: | The release year of the media item. | 2022 | | `image` | array<[Operations\GetRecentlyAddedImage](../../Models/Operations/GetRecentlyAddedImage.md)> | :heavy_minus_sign: | N/A | | | `ultraBlurColors` | [?Operations\UltraBlurColors](../../Models/Operations/UltraBlurColors.md) | :heavy_minus_sign: | N/A | | +| `guids` | array<[Operations\Guids](../../Models/Operations/Guids.md)> | :heavy_minus_sign: | N/A | | | `media` | array<[Operations\Media](../../Models/Operations/Media.md)> | :heavy_minus_sign: | N/A | | | `genre` | array<[Operations\Genre](../../Models/Operations/Genre.md)> | :heavy_minus_sign: | N/A | | | `country` | array<[Operations\Country](../../Models/Operations/Country.md)> | :heavy_minus_sign: | N/A | | @@ -81,5 +82,4 @@ Unknown | `rating1` | array<[Operations\Rating](../../Models/Operations/Rating.md)> | :heavy_minus_sign: | N/A | | | `similar` | array<[Operations\Similar](../../Models/Operations/Similar.md)> | :heavy_minus_sign: | N/A | | | `location` | array<[Operations\Location](../../Models/Operations/Location.md)> | :heavy_minus_sign: | N/A | | -| `guids` | array<[Operations\Guids](../../Models/Operations/Guids.md)> | :heavy_minus_sign: | N/A | | | `collection` | array<[Operations\Collection](../../Models/Operations/Collection.md)> | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Operations/GetSearchAllLibrariesMetadata.md b/docs/Models/Operations/GetSearchAllLibrariesMetadata.md index 9288bac..2086cae 100644 --- a/docs/Models/Operations/GetSearchAllLibrariesMetadata.md +++ b/docs/Models/Operations/GetSearchAllLibrariesMetadata.md @@ -13,7 +13,7 @@ | `librarySectionID` | *?int* | :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` | [Operations\GetSearchAllLibrariesType](../../Models/Operations/GetSearchAllLibrariesType.md) | :heavy_check_mark: | The type of media content
| movie | +| `type` | [Operations\GetSearchAllLibrariesType](../../Models/Operations/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/Operations/GetSearchAllLibrariesType.md b/docs/Models/Operations/GetSearchAllLibrariesType.md index 427226f..289c76f 100644 --- a/docs/Models/Operations/GetSearchAllLibrariesType.md +++ b/docs/Models/Operations/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/Operations/GetSearchLibraryQueryParamType.md b/docs/Models/Operations/GetSearchLibraryQueryParamType.md index 38b2684..698cb53 100644 --- a/docs/Models/Operations/GetSearchLibraryQueryParamType.md +++ b/docs/Models/Operations/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/Operations/GetTopWatchedContentMediaContainer.md b/docs/Models/Operations/GetTopWatchedContentMediaContainer.md index f9b60f7..028fba2 100644 --- a/docs/Models/Operations/GetTopWatchedContentMediaContainer.md +++ b/docs/Models/Operations/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` | *int* | :heavy_check_mark: | The version number for media tags. | 1734362201 | | `metadata` | array<[Operations\GetTopWatchedContentMetadata](../../Models/Operations/GetTopWatchedContentMetadata.md)> | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Operations/GetTopWatchedContentQueryParamIncludeGuids.md b/docs/Models/Operations/GetTopWatchedContentQueryParamIncludeGuids.md new file mode 100644 index 0000000..22fb318 --- /dev/null +++ b/docs/Models/Operations/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/Operations/GetTopWatchedContentQueryParamType.md b/docs/Models/Operations/GetTopWatchedContentQueryParamType.md index ada3d48..a2fedd2 100644 --- a/docs/Models/Operations/GetTopWatchedContentQueryParamType.md +++ b/docs/Models/Operations/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/Operations/GetTopWatchedContentRequest.md b/docs/Models/Operations/GetTopWatchedContentRequest.md index a2a3c63..86b2e25 100644 --- a/docs/Models/Operations/GetTopWatchedContentRequest.md +++ b/docs/Models/Operations/GetTopWatchedContentRequest.md @@ -5,5 +5,5 @@ | Field | Type | Required | Description | Example | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `includeGuids` | *?int* | :heavy_minus_sign: | Adds the Guids object to the response
| 1 | -| `type` | [Operations\GetTopWatchedContentQueryParamType](../../Models/Operations/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` | [Operations\GetTopWatchedContentQueryParamType](../../Models/Operations/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` | [?Operations\GetTopWatchedContentQueryParamIncludeGuids](../../Models/Operations/GetTopWatchedContentQueryParamIncludeGuids.md) | :heavy_minus_sign: | Adds the Guid object to the response
| 1 | \ No newline at end of file diff --git a/docs/Models/Operations/Guids.md b/docs/Models/Operations/Guids.md index 9e69f6d..eae621d 100644 --- a/docs/Models/Operations/Guids.md +++ b/docs/Models/Operations/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/Operations/Producer.md b/docs/Models/Operations/Producer.md index 3a21df6..88f5920 100644 --- a/docs/Models/Operations/Producer.md +++ b/docs/Models/Operations/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/Operations/QueryParamType.md b/docs/Models/Operations/QueryParamType.md index cfaf2bd..6a256b3 100644 --- a/docs/Models/Operations/QueryParamType.md +++ b/docs/Models/Operations/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/Operations/Rating.md b/docs/Models/Operations/Rating.md index b7ff854..92421ee 100644 --- a/docs/Models/Operations/Rating.md +++ b/docs/Models/Operations/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` | *float* | :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/Operations/Role.md b/docs/Models/Operations/Role.md index 6df2299..588bbd6 100644 --- a/docs/Models/Operations/Role.md +++ b/docs/Models/Operations/Role.md @@ -3,11 +3,11 @@ ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | -| `id` | *int* | :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/Operations/Type.md b/docs/Models/Operations/Type.md index db3f9b7..e353fcf 100644 --- a/docs/Models/Operations/Type.md +++ b/docs/Models/Operations/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/Operations/Writer.md b/docs/Models/Operations/Writer.md index 65d0fc7..b5db47a 100644 --- a/docs/Models/Operations/Writer.md +++ b/docs/Models/Operations/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 4c92677..faa6c4f 100644 --- a/docs/sdks/butler/README.md +++ b/docs/sdks/butler/README.md @@ -174,7 +174,7 @@ $sdk = Plex_API\PlexAPI::builder() $response = $sdk->butler->startTask( - taskName: Operations\TaskName::CleanOldBundles + taskName: Operations\TaskName::RefreshPeriodicMetadata ); if ($response->statusCode === 200) { @@ -224,7 +224,7 @@ $sdk = Plex_API\PlexAPI::builder() $response = $sdk->butler->stopTask( - taskName: Operations\PathParamTaskName::BackupDatabase + taskName: Operations\PathParamTaskName::CleanOldCacheFiles ); if ($response->statusCode === 200) { diff --git a/docs/sdks/hubs/README.md b/docs/sdks/hubs/README.md index 64d2fab..ab9b91d 100644 --- a/docs/sdks/hubs/README.md +++ b/docs/sdks/hubs/README.md @@ -24,7 +24,6 @@ declare(strict_types=1); require 'vendor/autoload.php'; use LukeHagar\Plex_API; -use LukeHagar\Plex_API\Models\Operations; $sdk = Plex_API\PlexAPI::builder() ->setSecurity( @@ -35,8 +34,6 @@ $sdk = Plex_API\PlexAPI::builder() $response = $sdk->hubs->getGlobalHubs( - count: 1262.49, - onlyTransient: Operations\OnlyTransient::One ); @@ -86,9 +83,10 @@ $sdk = Plex_API\PlexAPI::builder() ->build(); $request = new Operations\GetRecentlyAddedRequest( - contentDirectoryID: 470161, + contentDirectoryID: 39486, sectionID: 2, type: Operations\Type::TvShow, + includeMeta: Operations\IncludeMeta::Enable, ); $response = $sdk->hubs->getRecentlyAdded( @@ -129,7 +127,6 @@ declare(strict_types=1); require 'vendor/autoload.php'; use LukeHagar\Plex_API; -use LukeHagar\Plex_API\Models\Operations; $sdk = Plex_API\PlexAPI::builder() ->setSecurity( @@ -140,10 +137,7 @@ $sdk = Plex_API\PlexAPI::builder() $response = $sdk->hubs->getLibraryHubs( - sectionId: 6728.76, - count: 639.24, - onlyTransient: Operations\QueryParamOnlyTransient::One - + sectionId: 492.74 ); if ($response->object !== null) { diff --git a/docs/sdks/library/README.md b/docs/sdks/library/README.md index 131cd11..5730ae4 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 @@ -51,9 +51,7 @@ $sdk = Plex_API\PlexAPI::builder() $response = $sdk->library->getFileHash( - url: 'file://C:\Image.png&type=13', - type: 4462.17 - + url: 'file://C:\Image.png&type=13' ); if ($response->statusCode === 200) { @@ -119,6 +117,7 @@ $request = new Operations\GetRecentlyAddedLibraryRequest( ], sectionID: 2, type: Operations\QueryParamType::TvShow, + includeMeta: Operations\QueryParamIncludeMeta::Enable, ); $response = $sdk->library->getRecentlyAddedLibrary( @@ -377,9 +376,11 @@ $sdk = Plex_API\PlexAPI::builder() ->build(); $request = new Operations\GetLibraryItemsRequest( - tag: Operations\Tag::Edition, + tag: Operations\Tag::Newest, + includeGuids: Operations\IncludeGuids::Enable, type: Operations\GetLibraryItemsQueryParamType::TvShow, sectionKey: 9518, + includeMeta: Operations\GetLibraryItemsQueryParamIncludeMeta::Enable, ); $response = $sdk->library->getLibraryItems( @@ -409,7 +410,7 @@ if ($response->object !== null) { | Errors\GetLibraryItemsUnauthorized | 401 | application/json | | Errors\SDKException | 4XX, 5XX | \*/\* | -## getAllMediaLibrary +## getLibrarySectionsAll Retrieves a list of all general media data for this library. @@ -430,12 +431,17 @@ $sdk = Plex_API\PlexAPI::builder() ) ->build(); -$request = new Operations\GetAllMediaLibraryRequest( +$request = new Operations\GetLibrarySectionsAllRequest( sectionKey: 9518, - type: Operations\GetAllMediaLibraryQueryParamType::TvShow, + type: Operations\GetLibrarySectionsAllQueryParamType::TvShow, + includeMeta: Operations\GetLibrarySectionsAllQueryParamIncludeMeta::Enable, + includeGuids: Operations\QueryParamIncludeGuids::Enable, + includeAdvanced: Operations\IncludeAdvanced::Enable, + includeCollections: Operations\QueryParamIncludeCollections::Enable, + includeExternalMedia: Operations\QueryParamIncludeExternalMedia::Enable, ); -$response = $sdk->library->getAllMediaLibrary( +$response = $sdk->library->getLibrarySectionsAll( request: $request ); @@ -446,21 +452,21 @@ if ($response->object !== null) { ### Parameters -| Parameter | Type | Required | Description | -| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -| `$request` | [Operations\GetAllMediaLibraryRequest](../../Models/Operations/GetAllMediaLibraryRequest.md) | :heavy_check_mark: | The request object to use for the request. | +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| `$request` | [Operations\GetLibrarySectionsAllRequest](../../Models/Operations/GetLibrarySectionsAllRequest.md) | :heavy_check_mark: | The request object to use for the request. | ### Response -**[?Operations\GetAllMediaLibraryResponse](../../Models/Operations/GetAllMediaLibraryResponse.md)** +**[?Operations\GetLibrarySectionsAllResponse](../../Models/Operations/GetLibrarySectionsAllResponse.md)** ### Errors -| Error Type | Status Code | Content Type | -| ------------------------------------- | ------------------------------------- | ------------------------------------- | -| Errors\GetAllMediaLibraryBadRequest | 400 | application/json | -| Errors\GetAllMediaLibraryUnauthorized | 401 | application/json | -| Errors\SDKException | 4XX, 5XX | \*/\* | +| Error Type | Status Code | Content Type | +| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | +| Errors\GetLibrarySectionsAllBadRequest | 400 | application/json | +| Errors\GetLibrarySectionsAllUnauthorized | 401 | application/json | +| Errors\SDKException | 4XX, 5XX | \*/\* | ## getRefreshLibraryMetadata @@ -487,7 +493,7 @@ $sdk = Plex_API\PlexAPI::builder() $response = $sdk->library->getRefreshLibraryMetadata( sectionKey: 9518, - force: Operations\Force::One + force: Operations\Force::Zero ); @@ -771,6 +777,8 @@ $request = new Operations\GetSearchAllLibrariesRequest( searchTypes: [ Operations\SearchTypes::People, ], + includeCollections: Operations\GetSearchAllLibrariesQueryParamIncludeCollections::Enable, + includeExternalMedia: Operations\GetSearchAllLibrariesQueryParamIncludeExternalMedia::Enable, ); $response = $sdk->library->getSearchAllLibraries( @@ -802,7 +810,8 @@ if ($response->object !== null) { ## 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 @@ -822,7 +831,7 @@ $sdk = Plex_API\PlexAPI::builder() ->build(); $request = new Operations\GetMediaMetaDataRequest( - ratingKey: 9518, + ratingKey: '21119,21617', includeConcerts: true, includeExtras: true, includeOnDeck: true, @@ -934,8 +943,7 @@ $sdk = Plex_API\PlexAPI::builder() $response = $sdk->library->postMediaArts( ratingKey: 2268, - url: 'https://api.mediux.pro/assets/fcfdc487-dd07-4993-a0c1-0a3015362e5b', - requestBody: '0xee51EFC6De' + url: 'https://api.mediux.pro/assets/fcfdc487-dd07-4993-a0c1-0a3015362e5b' ); @@ -1031,8 +1039,7 @@ $sdk = Plex_API\PlexAPI::builder() $response = $sdk->library->postMediaPoster( ratingKey: 2268, - url: 'https://api.mediux.pro/assets/fcfdc487-dd07-4993-a0c1-0a3015362e5b', - requestBody: '0x7C3d45ad4B' + url: 'https://api.mediux.pro/assets/fcfdc487-dd07-4993-a0c1-0a3015362e5b' ); @@ -1082,8 +1089,8 @@ $sdk = Plex_API\PlexAPI::builder() $response = $sdk->library->getMetadataChildren( - ratingKey: 1539.14, - includeElements: '' + ratingKey: 2403.67, + includeElements: 'Stream' ); @@ -1136,7 +1143,7 @@ $sdk = Plex_API\PlexAPI::builder() $response = $sdk->library->getTopWatchedContent( type: Operations\GetTopWatchedContentQueryParamType::TvShow, - includeGuids: 1 + includeGuids: Operations\GetTopWatchedContentQueryParamIncludeGuids::Enable ); @@ -1150,7 +1157,7 @@ if ($response->object !== null) { | Parameter | Type | Required | Description | Example | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `type` | [Operations\GetTopWatchedContentQueryParamType](../../Models/Operations/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` | *?int* | :heavy_minus_sign: | Adds the Guids object to the response
| 1 | +| `includeGuids` | [?Operations\GetTopWatchedContentQueryParamIncludeGuids](../../Models/Operations/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 1470565..ad8f895 100644 --- a/docs/sdks/playlists/README.md +++ b/docs/sdks/playlists/README.md @@ -46,9 +46,9 @@ $sdk = Plex_API\PlexAPI::builder() $request = new Operations\CreatePlaylistRequest( title: '', - type: Operations\CreatePlaylistQueryParamType::Photo, + type: Operations\CreatePlaylistQueryParamType::Audio, smart: Operations\Smart::One, - uri: 'https://hoarse-testing.info/', + uri: 'https://short-term-disconnection.name/', ); $response = $sdk->playlists->createPlaylist( @@ -90,7 +90,6 @@ declare(strict_types=1); require 'vendor/autoload.php'; use LukeHagar\Plex_API; -use LukeHagar\Plex_API\Models\Operations; $sdk = Plex_API\PlexAPI::builder() ->setSecurity( @@ -101,8 +100,6 @@ $sdk = Plex_API\PlexAPI::builder() $response = $sdk->playlists->getPlaylists( - playlistType: Operations\PlaylistType::Audio, - smart: Operations\QueryParamSmart::Zero ); @@ -154,7 +151,7 @@ $sdk = Plex_API\PlexAPI::builder() $response = $sdk->playlists->getPlaylist( - playlistID: 4109.48 + playlistID: 8419.53 ); if ($response->object !== null) { @@ -203,7 +200,7 @@ $sdk = Plex_API\PlexAPI::builder() $response = $sdk->playlists->deletePlaylist( - playlistID: 216.22 + playlistID: 3432.93 ); if ($response->statusCode === 200) { @@ -252,10 +249,7 @@ $sdk = Plex_API\PlexAPI::builder() $response = $sdk->playlists->updatePlaylist( - playlistID: 3915, - title: '', - summary: '' - + playlistID: 1579.66 ); if ($response->statusCode === 200) { @@ -310,7 +304,7 @@ $sdk = Plex_API\PlexAPI::builder() $response = $sdk->playlists->getPlaylistContents( - playlistID: 5004.46, + playlistID: 5535.42, type: Operations\GetPlaylistContentsQueryParamType::TvShow ); @@ -362,7 +356,7 @@ $sdk = Plex_API\PlexAPI::builder() $response = $sdk->playlists->clearPlaylistContents( - playlistID: 1893.18 + playlistID: 4137.37 ); if ($response->statusCode === 200) { @@ -412,7 +406,7 @@ $sdk = Plex_API\PlexAPI::builder() $response = $sdk->playlists->addPlaylistContents( - playlistID: 8502.01, + playlistID: 7013.44, uri: 'server://12345/com.plexapp.plugins.library/library/metadata/1', playQueueID: 123 @@ -468,7 +462,7 @@ $sdk = Plex_API\PlexAPI::builder() $response = $sdk->playlists->uploadPlaylist( path: '/home/barkley/playlist.m3u', - force: Operations\QueryParamForce::Zero, + force: Operations\QueryParamForce::One, sectionID: 1 ); diff --git a/docs/sdks/plex/README.md b/docs/sdks/plex/README.md index 109ca74..bae3126 100644 --- a/docs/sdks/plex/README.md +++ b/docs/sdks/plex/README.md @@ -323,7 +323,7 @@ use LukeHagar\Plex_API\Models\Operations; $sdk = Plex_API\PlexAPI::builder()->build(); $request = new Operations\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 47c47a4..20c901f 100644 --- a/docs/sdks/search/README.md +++ b/docs/sdks/search/README.md @@ -46,8 +46,7 @@ $sdk = Plex_API\PlexAPI::builder() $response = $sdk->search->performSearch( - query: 'dylan', - sectionId: 9372.7, + query: 'arnold', limit: 5 ); @@ -104,7 +103,6 @@ $sdk = Plex_API\PlexAPI::builder() $response = $sdk->search->performVoiceSearch( query: 'dead+poop', - sectionId: 4094.8, limit: 5 ); diff --git a/docs/sdks/server/README.md b/docs/sdks/server/README.md index 0d9d231..7b54471 100644 --- a/docs/sdks/server/README.md +++ b/docs/sdks/server/README.md @@ -289,10 +289,9 @@ $sdk = Plex_API\PlexAPI::builder() $request = new Operations\GetResizedPhotoRequest( width: 110, height: 165, - opacity: 100, - blur: 20, + blur: 0, minSize: Operations\MinSize::Zero, - upscale: Operations\Upscale::One, + upscale: Operations\Upscale::Zero, url: '/library/metadata/49564/thumb/1654258204', ); diff --git a/docs/sdks/sessions/README.md b/docs/sdks/sessions/README.md index 24606a5..c69df2c 100644 --- a/docs/sdks/sessions/README.md +++ b/docs/sdks/sessions/README.md @@ -78,7 +78,7 @@ $sdk = Plex_API\PlexAPI::builder() $filter = new Operations\QueryParamFilter(); $response = $sdk->sessions->getSessionHistory( - sort: '', + sort: 'viewedAt:desc', accountId: 1, filter: $filter, librarySectionID: 12 diff --git a/docs/sdks/watchlist/README.md b/docs/sdks/watchlist/README.md index 8574a01..b2374bc 100644 --- a/docs/sdks/watchlist/README.md +++ b/docs/sdks/watchlist/README.md @@ -31,7 +31,7 @@ $sdk = Plex_API\PlexAPI::builder() ->build(); $request = new Operations\GetWatchListRequest( - filter: Operations\Filter::Available, + filter: Operations\Filter::Released, xPlexToken: 'CV5xoxjTpFKUzBTShsaf', ); diff --git a/src/Activities.php b/src/Activities.php index 32b7b99..2dd632d 100644 --- a/src/Activities.php +++ b/src/Activities.php @@ -58,14 +58,14 @@ class Activities $request = new Operations\CancelServerActivitiesRequest( activityUUID: $activityUUID, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/activities/{activityUUID}', Operations\CancelServerActivitiesRequest::class, $request); $urlOverride = null; $httpOptions = ['http_errors' => false]; $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('DELETE', $url); - $hookContext = new HookContext($baseUrl, 'cancelServerActivities', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'cancelServerActivities', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); @@ -133,14 +133,14 @@ class Activities */ public function getServerActivities(?Options $options = null): Operations\GetServerActivitiesResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/activities'); $urlOverride = null; $httpOptions = ['http_errors' => false]; $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getServerActivities', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getServerActivities', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); diff --git a/src/Authentication.php b/src/Authentication.php index 70cfcff..2eda542 100644 --- a/src/Authentication.php +++ b/src/Authentication.php @@ -68,7 +68,7 @@ class Authentication $request = new Operations\GetSourceConnectionInformationRequest( source: $source, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/security/resources'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -77,7 +77,7 @@ class Authentication $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getSourceConnectionInformation', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getSourceConnectionInformation', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -158,7 +158,7 @@ class Authentication $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getTokenDetails', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getTokenDetails', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); @@ -242,7 +242,7 @@ class Authentication type: $type, scope: $scope, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/security/token'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -251,7 +251,7 @@ class Authentication $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getTransientToken', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getTransientToken', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -341,7 +341,7 @@ class Authentication $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('POST', $url); - $hookContext = new HookContext($baseUrl, 'post-users-sign-in-data', [], null); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'post-users-sign-in-data', [], null); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); diff --git a/src/Butler.php b/src/Butler.php index c86e0f9..da2582b 100644 --- a/src/Butler.php +++ b/src/Butler.php @@ -54,14 +54,14 @@ class Butler */ public function getButlerTasks(?Options $options = null): Operations\GetButlerTasksResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/butler'); $urlOverride = null; $httpOptions = ['http_errors' => false]; $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getButlerTasks', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getButlerTasks', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); @@ -143,14 +143,14 @@ class Butler */ public function startAllTasks(?Options $options = null): Operations\StartAllTasksResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/butler'); $urlOverride = null; $httpOptions = ['http_errors' => false]; $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('POST', $url); - $hookContext = new HookContext($baseUrl, 'startAllTasks', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'startAllTasks', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); @@ -227,14 +227,14 @@ class Butler $request = new Operations\StartTaskRequest( taskName: $taskName, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/butler/{taskName}', Operations\StartTaskRequest::class, $request); $urlOverride = null; $httpOptions = ['http_errors' => false]; $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('POST', $url); - $hookContext = new HookContext($baseUrl, 'startTask', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'startTask', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); @@ -303,14 +303,14 @@ class Butler */ public function stopAllTasks(?Options $options = null): Operations\StopAllTasksResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/butler'); $urlOverride = null; $httpOptions = ['http_errors' => false]; $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('DELETE', $url); - $hookContext = new HookContext($baseUrl, 'stopAllTasks', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'stopAllTasks', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); @@ -383,14 +383,14 @@ class Butler $request = new Operations\StopTaskRequest( taskName: $taskName, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/butler/{taskName}', Operations\StopTaskRequest::class, $request); $urlOverride = null; $httpOptions = ['http_errors' => false]; $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('DELETE', $url); - $hookContext = new HookContext($baseUrl, 'stopTask', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'stopTask', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); diff --git a/src/Hooks/AfterErrorContext.php b/src/Hooks/AfterErrorContext.php index 458e096..6733259 100644 --- a/src/Hooks/AfterErrorContext.php +++ b/src/Hooks/AfterErrorContext.php @@ -13,7 +13,7 @@ class AfterErrorContext extends HookContext { public function __construct(HookContext $hookCtx) { - parent::__construct($hookCtx->baseURL, $hookCtx->operationID, $hookCtx->oauth2Scopes, $hookCtx->securitySource); + parent::__construct($hookCtx->config, $hookCtx->baseURL, $hookCtx->operationID, $hookCtx->oauth2Scopes, $hookCtx->securitySource); } /** diff --git a/src/Hooks/AfterSuccessContext.php b/src/Hooks/AfterSuccessContext.php index d99396f..41c8bf3 100644 --- a/src/Hooks/AfterSuccessContext.php +++ b/src/Hooks/AfterSuccessContext.php @@ -13,6 +13,6 @@ class AfterSuccessContext extends HookContext { public function __construct(HookContext $hookCtx) { - parent::__construct($hookCtx->baseURL, $hookCtx->operationID, $hookCtx->oauth2Scopes, $hookCtx->securitySource); + parent::__construct($hookCtx->config, $hookCtx->baseURL, $hookCtx->operationID, $hookCtx->oauth2Scopes, $hookCtx->securitySource); } } diff --git a/src/Hooks/BeforeRequestContext.php b/src/Hooks/BeforeRequestContext.php index e0e3d7e..2e2dc8a 100644 --- a/src/Hooks/BeforeRequestContext.php +++ b/src/Hooks/BeforeRequestContext.php @@ -13,7 +13,7 @@ class BeforeRequestContext extends HookContext { public function __construct(HookContext $hookCtx) { - parent::__construct($hookCtx->baseURL, $hookCtx->operationID, $hookCtx->oauth2Scopes, $hookCtx->securitySource); + parent::__construct($hookCtx->config, $hookCtx->baseURL, $hookCtx->operationID, $hookCtx->oauth2Scopes, $hookCtx->securitySource); } /** diff --git a/src/Hooks/HookContext.php b/src/Hooks/HookContext.php index ddde419..939edbe 100644 --- a/src/Hooks/HookContext.php +++ b/src/Hooks/HookContext.php @@ -9,8 +9,15 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Hooks; +use LukeHagar\Plex_API\SDKConfiguration; + class HookContext { + /** + * @var SDKConfiguration $config + */ + public SDKConfiguration $config; + /** * @var string $baseURL */ @@ -33,8 +40,9 @@ class HookContext * @param ?array $oauth2Scopes * @param ?\Closure(): ?mixed $securitySource */ - public function __construct(string $baseURL, string $operationID, ?array $oauth2Scopes, ?\Closure $securitySource) + public function __construct(SDKConfiguration $config, string $baseURL, string $operationID, ?array $oauth2Scopes, ?\Closure $securitySource) { + $this->config = $config; $this->baseURL = $baseURL; $this->operationID = $operationID; $this->oauth2Scopes = $oauth2Scopes; diff --git a/src/Hooks/SDKHooks.php b/src/Hooks/SDKHooks.php index 3edded2..37a1c32 100644 --- a/src/Hooks/SDKHooks.php +++ b/src/Hooks/SDKHooks.php @@ -8,10 +8,10 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Hooks; + use Psr\Http\Message\RequestInterface; use Psr\Http\Message\ResponseInterface; - class SDKHooks implements Hooks { /** diff --git a/src/Hooks/SDKRequestContext.php b/src/Hooks/SDKRequestContext.php index b9be467..55f4366 100644 --- a/src/Hooks/SDKRequestContext.php +++ b/src/Hooks/SDKRequestContext.php @@ -19,4 +19,4 @@ class SDKRequestContext $this->url = $url; $this->client = $client; } -} +} \ No newline at end of file diff --git a/src/Hubs.php b/src/Hubs.php index c03f437..04030c9 100644 --- a/src/Hubs.php +++ b/src/Hubs.php @@ -56,7 +56,7 @@ class Hubs */ public function getRecentlyAdded(Operations\GetRecentlyAddedRequest $request, ?Options $options = null): Operations\GetRecentlyAddedResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/hubs/home/recentlyAdded'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -65,7 +65,7 @@ class Hubs $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'get-recently-added', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'get-recently-added', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -125,7 +125,7 @@ class Hubs count: $count, onlyTransient: $onlyTransient, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/hubs'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -134,7 +134,7 @@ class Hubs $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getGlobalHubs', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getGlobalHubs', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -221,7 +221,7 @@ class Hubs count: $count, onlyTransient: $onlyTransient, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/hubs/sections/{sectionId}', Operations\GetLibraryHubsRequest::class, $request); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -230,7 +230,7 @@ class Hubs $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getLibraryHubs', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getLibraryHubs', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); diff --git a/src/Library.php b/src/Library.php index f06f10f..58675d3 100644 --- a/src/Library.php +++ b/src/Library.php @@ -58,14 +58,14 @@ class Library $request = new Operations\DeleteLibraryRequest( sectionKey: $sectionKey, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/library/sections/{sectionKey}', Operations\DeleteLibraryRequest::class, $request); $urlOverride = null; $httpOptions = ['http_errors' => false]; $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('DELETE', $url); - $hookContext = new HookContext($baseUrl, 'deleteLibrary', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'deleteLibrary', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); @@ -140,7 +140,7 @@ class Library sectionKey: $sectionKey, type: $type, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/library/sections/{sectionKey}/actor', Operations\GetActorsLibraryRequest::class, $request); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -149,7 +149,7 @@ class Library $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'get-actors-library', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'get-actors-library', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -233,14 +233,14 @@ class Library */ public function getAllLibraries(?Options $options = null): Operations\GetAllLibrariesResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/library/sections'); $urlOverride = null; $httpOptions = ['http_errors' => false]; $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'get-all-libraries', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'get-all-libraries', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); @@ -307,95 +307,6 @@ class Library } } - /** - * Get all media of library - * - * Retrieves a list of all general media data for this library. - * - * - * @param Operations\GetAllMediaLibraryRequest $request - * @return Operations\GetAllMediaLibraryResponse - * @throws \LukeHagar\Plex_API\Models\Errors\SDKException - */ - public function getAllMediaLibrary(Operations\GetAllMediaLibraryRequest $request, ?Options $options = null): Operations\GetAllMediaLibraryResponse - { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); - $url = Utils\Utils::generateUrl($baseUrl, '/library/sections/{sectionKey}/all', Operations\GetAllMediaLibraryRequest::class, $request); - $urlOverride = null; - $httpOptions = ['http_errors' => false]; - - $qp = Utils\Utils::getQueryParams(Operations\GetAllMediaLibraryRequest::class, $request, $urlOverride); - $httpOptions['headers']['Accept'] = 'application/json'; - $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; - $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'get-all-media-library', [], $this->sdkConfiguration->securitySource); - $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); - $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); - $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); - $httpRequest = Utils\Utils::removeHeaders($httpRequest); - try { - $httpResponse = $this->sdkConfiguration->client->send($httpRequest, $httpOptions); - } catch (\GuzzleHttp\Exception\GuzzleException $error) { - $res = $this->sdkConfiguration->hooks->afterError(new Hooks\AfterErrorContext($hookContext), null, $error); - $httpResponse = $res; - } - $contentType = $httpResponse->getHeader('Content-Type')[0] ?? ''; - - $statusCode = $httpResponse->getStatusCode(); - if (Utils\Utils::matchStatusCodes($statusCode, ['400', '401', '404', '4XX', '5XX'])) { - $res = $this->sdkConfiguration->hooks->afterError(new Hooks\AfterErrorContext($hookContext), $httpResponse, null); - $httpResponse = $res; - } - if (Utils\Utils::matchStatusCodes($statusCode, ['200'])) { - if (Utils\Utils::matchContentType($contentType, 'application/json')) { - $httpResponse = $this->sdkConfiguration->hooks->afterSuccess(new Hooks\AfterSuccessContext($hookContext), $httpResponse); - - $serializer = Utils\JSON::createSerializer(); - $responseData = (string) $httpResponse->getBody(); - $obj = $serializer->deserialize($responseData, '\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibraryResponseBody', 'json', DeserializationContext::create()->setRequireAllRequiredProperties(true)); - $response = new Operations\GetAllMediaLibraryResponse( - statusCode: $statusCode, - contentType: $contentType, - rawResponse: $httpResponse, - object: $obj); - - return $response; - } else { - throw new \LukeHagar\Plex_API\Models\Errors\SDKException('Unknown content type received', $statusCode, $httpResponse->getBody()->getContents(), $httpResponse); - } - } elseif (Utils\Utils::matchStatusCodes($statusCode, ['400'])) { - if (Utils\Utils::matchContentType($contentType, 'application/json')) { - $httpResponse = $this->sdkConfiguration->hooks->afterSuccess(new Hooks\AfterSuccessContext($hookContext), $httpResponse); - - $serializer = Utils\JSON::createSerializer(); - $responseData = (string) $httpResponse->getBody(); - $obj = $serializer->deserialize($responseData, '\LukeHagar\Plex_API\Models\Errors\GetAllMediaLibraryBadRequest', 'json', DeserializationContext::create()->setRequireAllRequiredProperties(true)); - $obj->rawResponse = $httpResponse; - throw $obj->toException(); - } else { - throw new \LukeHagar\Plex_API\Models\Errors\SDKException('Unknown content type received', $statusCode, $httpResponse->getBody()->getContents(), $httpResponse); - } - } elseif (Utils\Utils::matchStatusCodes($statusCode, ['401'])) { - if (Utils\Utils::matchContentType($contentType, 'application/json')) { - $httpResponse = $this->sdkConfiguration->hooks->afterSuccess(new Hooks\AfterSuccessContext($hookContext), $httpResponse); - - $serializer = Utils\JSON::createSerializer(); - $responseData = (string) $httpResponse->getBody(); - $obj = $serializer->deserialize($responseData, '\LukeHagar\Plex_API\Models\Errors\GetAllMediaLibraryUnauthorized', 'json', DeserializationContext::create()->setRequireAllRequiredProperties(true)); - $obj->rawResponse = $httpResponse; - throw $obj->toException(); - } else { - throw new \LukeHagar\Plex_API\Models\Errors\SDKException('Unknown content type received', $statusCode, $httpResponse->getBody()->getContents(), $httpResponse); - } - } elseif (Utils\Utils::matchStatusCodes($statusCode, ['404', '4XX'])) { - throw new \LukeHagar\Plex_API\Models\Errors\SDKException('API error occurred', $statusCode, $httpResponse->getBody()->getContents(), $httpResponse); - } elseif (Utils\Utils::matchStatusCodes($statusCode, ['5XX'])) { - throw new \LukeHagar\Plex_API\Models\Errors\SDKException('API error occurred', $statusCode, $httpResponse->getBody()->getContents(), $httpResponse); - } else { - throw new \LukeHagar\Plex_API\Models\Errors\SDKException('Unknown status code received', $statusCode, $httpResponse->getBody()->getContents(), $httpResponse); - } - } - /** * Get Countries of library media * @@ -413,7 +324,7 @@ class Library sectionKey: $sectionKey, type: $type, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/library/sections/{sectionKey}/country', Operations\GetCountriesLibraryRequest::class, $request); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -422,7 +333,7 @@ class Library $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'get-countries-library', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'get-countries-library', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -507,7 +418,7 @@ class Library sectionKey: $sectionKey, type: $type, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/library/sections/{sectionKey}/genre', Operations\GetGenresLibraryRequest::class, $request); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -516,7 +427,7 @@ class Library $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'get-genres-library', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'get-genres-library', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -639,7 +550,7 @@ class Library sectionKey: $sectionKey, includeDetails: $includeDetails, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/library/sections/{sectionKey}', Operations\GetLibraryDetailsRequest::class, $request); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -648,7 +559,7 @@ class Library $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'get-library-details', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'get-library-details', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -748,7 +659,7 @@ class Library */ public function getLibraryItems(Operations\GetLibraryItemsRequest $request, ?Options $options = null): Operations\GetLibraryItemsResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/library/sections/{sectionKey}/{tag}', Operations\GetLibraryItemsRequest::class, $request); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -757,7 +668,7 @@ class Library $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'get-library-items', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'get-library-items', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -825,6 +736,95 @@ class Library } } + /** + * Get Library section media by tag ALL + * + * Retrieves a list of all general media data for this library. + * + * + * @param Operations\GetLibrarySectionsAllRequest $request + * @return Operations\GetLibrarySectionsAllResponse + * @throws \LukeHagar\Plex_API\Models\Errors\SDKException + */ + public function getLibrarySectionsAll(Operations\GetLibrarySectionsAllRequest $request, ?Options $options = null): Operations\GetLibrarySectionsAllResponse + { + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); + $url = Utils\Utils::generateUrl($baseUrl, '/library/sections/{sectionKey}/all', Operations\GetLibrarySectionsAllRequest::class, $request); + $urlOverride = null; + $httpOptions = ['http_errors' => false]; + + $qp = Utils\Utils::getQueryParams(Operations\GetLibrarySectionsAllRequest::class, $request, $urlOverride); + $httpOptions['headers']['Accept'] = 'application/json'; + $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; + $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'get-library-sections-all', [], $this->sdkConfiguration->securitySource); + $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); + $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); + $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); + $httpRequest = Utils\Utils::removeHeaders($httpRequest); + try { + $httpResponse = $this->sdkConfiguration->client->send($httpRequest, $httpOptions); + } catch (\GuzzleHttp\Exception\GuzzleException $error) { + $res = $this->sdkConfiguration->hooks->afterError(new Hooks\AfterErrorContext($hookContext), null, $error); + $httpResponse = $res; + } + $contentType = $httpResponse->getHeader('Content-Type')[0] ?? ''; + + $statusCode = $httpResponse->getStatusCode(); + if (Utils\Utils::matchStatusCodes($statusCode, ['400', '401', '404', '4XX', '5XX'])) { + $res = $this->sdkConfiguration->hooks->afterError(new Hooks\AfterErrorContext($hookContext), $httpResponse, null); + $httpResponse = $res; + } + if (Utils\Utils::matchStatusCodes($statusCode, ['200'])) { + if (Utils\Utils::matchContentType($contentType, 'application/json')) { + $httpResponse = $this->sdkConfiguration->hooks->afterSuccess(new Hooks\AfterSuccessContext($hookContext), $httpResponse); + + $serializer = Utils\JSON::createSerializer(); + $responseData = (string) $httpResponse->getBody(); + $obj = $serializer->deserialize($responseData, '\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllResponseBody', 'json', DeserializationContext::create()->setRequireAllRequiredProperties(true)); + $response = new Operations\GetLibrarySectionsAllResponse( + statusCode: $statusCode, + contentType: $contentType, + rawResponse: $httpResponse, + object: $obj); + + return $response; + } else { + throw new \LukeHagar\Plex_API\Models\Errors\SDKException('Unknown content type received', $statusCode, $httpResponse->getBody()->getContents(), $httpResponse); + } + } elseif (Utils\Utils::matchStatusCodes($statusCode, ['400'])) { + if (Utils\Utils::matchContentType($contentType, 'application/json')) { + $httpResponse = $this->sdkConfiguration->hooks->afterSuccess(new Hooks\AfterSuccessContext($hookContext), $httpResponse); + + $serializer = Utils\JSON::createSerializer(); + $responseData = (string) $httpResponse->getBody(); + $obj = $serializer->deserialize($responseData, '\LukeHagar\Plex_API\Models\Errors\GetLibrarySectionsAllBadRequest', 'json', DeserializationContext::create()->setRequireAllRequiredProperties(true)); + $obj->rawResponse = $httpResponse; + throw $obj->toException(); + } else { + throw new \LukeHagar\Plex_API\Models\Errors\SDKException('Unknown content type received', $statusCode, $httpResponse->getBody()->getContents(), $httpResponse); + } + } elseif (Utils\Utils::matchStatusCodes($statusCode, ['401'])) { + if (Utils\Utils::matchContentType($contentType, 'application/json')) { + $httpResponse = $this->sdkConfiguration->hooks->afterSuccess(new Hooks\AfterSuccessContext($hookContext), $httpResponse); + + $serializer = Utils\JSON::createSerializer(); + $responseData = (string) $httpResponse->getBody(); + $obj = $serializer->deserialize($responseData, '\LukeHagar\Plex_API\Models\Errors\GetLibrarySectionsAllUnauthorized', 'json', DeserializationContext::create()->setRequireAllRequiredProperties(true)); + $obj->rawResponse = $httpResponse; + throw $obj->toException(); + } else { + throw new \LukeHagar\Plex_API\Models\Errors\SDKException('Unknown content type received', $statusCode, $httpResponse->getBody()->getContents(), $httpResponse); + } + } elseif (Utils\Utils::matchStatusCodes($statusCode, ['404', '4XX'])) { + throw new \LukeHagar\Plex_API\Models\Errors\SDKException('API error occurred', $statusCode, $httpResponse->getBody()->getContents(), $httpResponse); + } elseif (Utils\Utils::matchStatusCodes($statusCode, ['5XX'])) { + throw new \LukeHagar\Plex_API\Models\Errors\SDKException('API error occurred', $statusCode, $httpResponse->getBody()->getContents(), $httpResponse); + } else { + throw new \LukeHagar\Plex_API\Models\Errors\SDKException('Unknown status code received', $statusCode, $httpResponse->getBody()->getContents(), $httpResponse); + } + } + /** * Get Media Background Artwork * @@ -839,14 +839,14 @@ class Library $request = new Operations\GetMediaArtsRequest( ratingKey: $ratingKey, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/library/metadata/{ratingKey}/arts', Operations\GetMediaArtsRequest::class, $request); $urlOverride = null; $httpOptions = ['http_errors' => false]; $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'get-media-arts', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'get-media-arts', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); @@ -892,7 +892,8 @@ class Library /** * 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"). * * * @param Operations\GetMediaMetaDataRequest $request @@ -901,7 +902,7 @@ class Library */ public function getMediaMetaData(Operations\GetMediaMetaDataRequest $request, ?Options $options = null): Operations\GetMediaMetaDataResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/library/metadata/{ratingKey}', Operations\GetMediaMetaDataRequest::class, $request); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -910,7 +911,7 @@ class Library $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'get-media-meta-data', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'get-media-meta-data', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -992,14 +993,14 @@ class Library $request = new Operations\GetMediaPostersRequest( ratingKey: $ratingKey, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/library/metadata/{ratingKey}/posters', Operations\GetMediaPostersRequest::class, $request); $urlOverride = null; $httpOptions = ['http_errors' => false]; $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'get-media-posters', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'get-media-posters', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); @@ -1054,7 +1055,7 @@ class Library */ public function getRecentlyAddedLibrary(Operations\GetRecentlyAddedLibraryRequest $request, ?Options $options = null): Operations\GetRecentlyAddedLibraryResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/library/recentlyAdded'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -1063,7 +1064,7 @@ class Library $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'get-recently-added-library', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'get-recently-added-library', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -1148,7 +1149,7 @@ class Library sectionKey: $sectionKey, force: $force, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/library/sections/{sectionKey}/refresh', Operations\GetRefreshLibraryMetadataRequest::class, $request); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -1157,7 +1158,7 @@ class Library $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'get-refresh-library-metadata', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'get-refresh-library-metadata', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -1228,7 +1229,7 @@ class Library */ public function getSearchAllLibraries(Operations\GetSearchAllLibrariesRequest $request, ?Options $options = null): Operations\GetSearchAllLibrariesResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/library/search'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -1241,7 +1242,7 @@ class Library $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'get-search-all-libraries', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'get-search-all-libraries', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -1343,7 +1344,7 @@ class Library sectionKey: $sectionKey, type: $type, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/library/sections/{sectionKey}/search', Operations\GetSearchLibraryRequest::class, $request); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -1352,7 +1353,7 @@ class Library $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'get-search-library', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'get-search-library', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -1436,7 +1437,7 @@ class Library url: $url, type: $type, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/library/hashes'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -1445,7 +1446,7 @@ class Library $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getFileHash', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getFileHash', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -1521,7 +1522,7 @@ class Library ratingKey: $ratingKey, includeElements: $includeElements, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/library/metadata/{ratingKey}/children', Operations\GetMetadataChildrenRequest::class, $request); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -1530,7 +1531,7 @@ class Library $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getMetadataChildren', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getMetadataChildren', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -1605,17 +1606,17 @@ class Library * * * @param Operations\GetTopWatchedContentQueryParamType $type - * @param ?int $includeGuids + * @param ?Operations\GetTopWatchedContentQueryParamIncludeGuids $includeGuids * @return Operations\GetTopWatchedContentResponse * @throws \LukeHagar\Plex_API\Models\Errors\SDKException */ - public function getTopWatchedContent(Operations\GetTopWatchedContentQueryParamType $type, ?int $includeGuids = null, ?Options $options = null): Operations\GetTopWatchedContentResponse + public function getTopWatchedContent(Operations\GetTopWatchedContentQueryParamType $type, ?Operations\GetTopWatchedContentQueryParamIncludeGuids $includeGuids = null, ?Options $options = null): Operations\GetTopWatchedContentResponse { $request = new Operations\GetTopWatchedContentRequest( type: $type, includeGuids: $includeGuids, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/library/all/top'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -1624,7 +1625,7 @@ class Library $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getTopWatchedContent', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getTopWatchedContent', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -1710,7 +1711,7 @@ class Library url: $url, requestBody: $requestBody, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/library/metadata/{ratingKey}/arts', Operations\PostMediaArtsRequest::class, $request); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -1723,7 +1724,7 @@ class Library $httpOptions['headers']['Accept'] = '*/*'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('POST', $url); - $hookContext = new HookContext($baseUrl, 'post-media-arts', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'post-media-arts', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -1776,7 +1777,7 @@ class Library url: $url, requestBody: $requestBody, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/library/metadata/{ratingKey}/posters', Operations\PostMediaPosterRequest::class, $request); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -1789,7 +1790,7 @@ class Library $httpOptions['headers']['Accept'] = '*/*'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('POST', $url); - $hookContext = new HookContext($baseUrl, 'post-media-poster', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'post-media-poster', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); diff --git a/src/Log.php b/src/Log.php index a723fe3..360aa68 100644 --- a/src/Log.php +++ b/src/Log.php @@ -55,14 +55,14 @@ class Log */ public function enablePaperTrail(?Options $options = null): Operations\EnablePaperTrailResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/log/networked'); $urlOverride = null; $httpOptions = ['http_errors' => false]; $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'enablePaperTrail', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'enablePaperTrail', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); @@ -139,7 +139,7 @@ class Log message: $message, source: $source, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/log'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -148,7 +148,7 @@ class Log $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'logLine', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'logLine', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -239,7 +239,7 @@ class Log */ public function logMultiLine(string $request, ?Options $options = null): Operations\LogMultiLineResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/log'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -251,7 +251,7 @@ class Log $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('POST', $url); - $hookContext = new HookContext($baseUrl, 'logMultiLine', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'logMultiLine', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); diff --git a/src/Media.php b/src/Media.php index 1772382..5619f72 100644 --- a/src/Media.php +++ b/src/Media.php @@ -55,7 +55,7 @@ class Media */ public function getBannerImage(Operations\GetBannerImageRequest $request, ?Options $options = null): Operations\GetBannerImageResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/library/metadata/{ratingKey}/banner', Operations\GetBannerImageRequest::class, $request); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -68,7 +68,7 @@ class Media $httpOptions['headers']['Accept'] = 'image/jpeg'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'get-banner-image', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'get-banner-image', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -145,7 +145,7 @@ class Media */ public function getThumbImage(Operations\GetThumbImageRequest $request, ?Options $options = null): Operations\GetThumbImageResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/library/metadata/{ratingKey}/thumb', Operations\GetThumbImageRequest::class, $request); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -158,7 +158,7 @@ class Media $httpOptions['headers']['Accept'] = 'image/jpeg'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'get-thumb-image', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'get-thumb-image', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -238,7 +238,7 @@ class Media $request = new Operations\MarkPlayedRequest( key: $key, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/:/scrobble'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -247,7 +247,7 @@ class Media $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'markPlayed', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'markPlayed', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -320,7 +320,7 @@ class Media $request = new Operations\MarkUnplayedRequest( key: $key, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/:/unscrobble'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -329,7 +329,7 @@ class Media $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'markUnplayed', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'markUnplayed', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -407,7 +407,7 @@ class Media time: $time, state: $state, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/:/progress'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -416,7 +416,7 @@ class Media $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('POST', $url); - $hookContext = new HookContext($baseUrl, 'updatePlayProgress', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'updatePlayProgress', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); diff --git a/src/Models/Errors/GetAllMediaLibraryBadRequest.php b/src/Models/Errors/GetLibrarySectionsAllBadRequest.php similarity index 70% rename from src/Models/Errors/GetAllMediaLibraryBadRequest.php rename to src/Models/Errors/GetLibrarySectionsAllBadRequest.php index b264fee..6b8bfe0 100644 --- a/src/Models/Errors/GetAllMediaLibraryBadRequest.php +++ b/src/Models/Errors/GetLibrarySectionsAllBadRequest.php @@ -9,16 +9,16 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Errors; use LukeHagar\Plex_API\Utils; -/** GetAllMediaLibraryBadRequest - Bad Request - A parameter was not specified, or was specified incorrectly. */ -class GetAllMediaLibraryBadRequest +/** GetLibrarySectionsAllBadRequest - Bad Request - A parameter was not specified, or was specified incorrectly. */ +class GetLibrarySectionsAllBadRequest { /** * $errors * - * @var ?array $errors + * @var ?array $errors */ #[\Speakeasy\Serializer\Annotation\SerializedName('errors')] - #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Errors\GetAllMediaLibraryErrors>|null')] + #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Errors\GetLibrarySectionsAllErrors>|null')] #[\Speakeasy\Serializer\Annotation\SkipWhenNull] public ?array $errors = null; @@ -32,7 +32,7 @@ class GetAllMediaLibraryBadRequest public ?\Psr\Http\Message\ResponseInterface $rawResponse = null; /** - * @param ?array $errors + * @param ?array $errors * @param ?\Psr\Http\Message\ResponseInterface $rawResponse * @phpstan-pure */ @@ -42,12 +42,12 @@ class GetAllMediaLibraryBadRequest $this->rawResponse = $rawResponse; } - public function toException(): GetAllMediaLibraryBadRequestThrowable + public function toException(): GetLibrarySectionsAllBadRequestThrowable { $serializer = Utils\JSON::createSerializer(); $message = $serializer->serialize($this, 'json'); $code = -1; - return new GetAllMediaLibraryBadRequestThrowable($message, (int) $code, $this); + return new GetLibrarySectionsAllBadRequestThrowable($message, (int) $code, $this); } } \ No newline at end of file diff --git a/src/Models/Errors/GetAllMediaLibraryBadRequestThrowable.php b/src/Models/Errors/GetLibrarySectionsAllBadRequestThrowable.php similarity index 65% rename from src/Models/Errors/GetAllMediaLibraryBadRequestThrowable.php rename to src/Models/Errors/GetLibrarySectionsAllBadRequestThrowable.php index b206639..f2dc713 100644 --- a/src/Models/Errors/GetAllMediaLibraryBadRequestThrowable.php +++ b/src/Models/Errors/GetLibrarySectionsAllBadRequestThrowable.php @@ -8,11 +8,11 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Errors; -class GetAllMediaLibraryBadRequestThrowable extends \RuntimeException +class GetLibrarySectionsAllBadRequestThrowable extends \RuntimeException { - public GetAllMediaLibraryBadRequest $container; + public GetLibrarySectionsAllBadRequest $container; - public function __construct(string $message, int $statusCode, GetAllMediaLibraryBadRequest $container) + public function __construct(string $message, int $statusCode, GetLibrarySectionsAllBadRequest $container) { parent::__construct($message, $statusCode); $this->container = $container; diff --git a/src/Models/Errors/GetAllMediaLibraryErrors.php b/src/Models/Errors/GetLibrarySectionsAllErrors.php similarity index 96% rename from src/Models/Errors/GetAllMediaLibraryErrors.php rename to src/Models/Errors/GetLibrarySectionsAllErrors.php index 012d979..1b1f7ec 100644 --- a/src/Models/Errors/GetAllMediaLibraryErrors.php +++ b/src/Models/Errors/GetLibrarySectionsAllErrors.php @@ -9,7 +9,7 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Errors; -class GetAllMediaLibraryErrors +class GetLibrarySectionsAllErrors { /** * diff --git a/src/Models/Errors/GetAllMediaLibraryLibraryErrors.php b/src/Models/Errors/GetLibrarySectionsAllLibraryErrors.php similarity index 96% rename from src/Models/Errors/GetAllMediaLibraryLibraryErrors.php rename to src/Models/Errors/GetLibrarySectionsAllLibraryErrors.php index f9cde71..788df2a 100644 --- a/src/Models/Errors/GetAllMediaLibraryLibraryErrors.php +++ b/src/Models/Errors/GetLibrarySectionsAllLibraryErrors.php @@ -9,7 +9,7 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Errors; -class GetAllMediaLibraryLibraryErrors +class GetLibrarySectionsAllLibraryErrors { /** * diff --git a/src/Models/Errors/GetAllMediaLibraryUnauthorized.php b/src/Models/Errors/GetLibrarySectionsAllUnauthorized.php similarity index 68% rename from src/Models/Errors/GetAllMediaLibraryUnauthorized.php rename to src/Models/Errors/GetLibrarySectionsAllUnauthorized.php index f5e0a3d..3e0060c 100644 --- a/src/Models/Errors/GetAllMediaLibraryUnauthorized.php +++ b/src/Models/Errors/GetLibrarySectionsAllUnauthorized.php @@ -9,16 +9,16 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Errors; use LukeHagar\Plex_API\Utils; -/** GetAllMediaLibraryUnauthorized - Unauthorized - Returned if the X-Plex-Token is missing from the header or query. */ -class GetAllMediaLibraryUnauthorized +/** GetLibrarySectionsAllUnauthorized - Unauthorized - Returned if the X-Plex-Token is missing from the header or query. */ +class GetLibrarySectionsAllUnauthorized { /** * $errors * - * @var ?array $errors + * @var ?array $errors */ #[\Speakeasy\Serializer\Annotation\SerializedName('errors')] - #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Errors\GetAllMediaLibraryLibraryErrors>|null')] + #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Errors\GetLibrarySectionsAllLibraryErrors>|null')] #[\Speakeasy\Serializer\Annotation\SkipWhenNull] public ?array $errors = null; @@ -32,7 +32,7 @@ class GetAllMediaLibraryUnauthorized public ?\Psr\Http\Message\ResponseInterface $rawResponse = null; /** - * @param ?array $errors + * @param ?array $errors * @param ?\Psr\Http\Message\ResponseInterface $rawResponse * @phpstan-pure */ @@ -42,12 +42,12 @@ class GetAllMediaLibraryUnauthorized $this->rawResponse = $rawResponse; } - public function toException(): GetAllMediaLibraryUnauthorizedThrowable + public function toException(): GetLibrarySectionsAllUnauthorizedThrowable { $serializer = Utils\JSON::createSerializer(); $message = $serializer->serialize($this, 'json'); $code = -1; - return new GetAllMediaLibraryUnauthorizedThrowable($message, (int) $code, $this); + return new GetLibrarySectionsAllUnauthorizedThrowable($message, (int) $code, $this); } } \ No newline at end of file diff --git a/src/Models/Errors/GetAllMediaLibraryUnauthorizedThrowable.php b/src/Models/Errors/GetLibrarySectionsAllUnauthorizedThrowable.php similarity index 64% rename from src/Models/Errors/GetAllMediaLibraryUnauthorizedThrowable.php rename to src/Models/Errors/GetLibrarySectionsAllUnauthorizedThrowable.php index 7d94c52..3c67460 100644 --- a/src/Models/Errors/GetAllMediaLibraryUnauthorizedThrowable.php +++ b/src/Models/Errors/GetLibrarySectionsAllUnauthorizedThrowable.php @@ -8,11 +8,11 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Errors; -class GetAllMediaLibraryUnauthorizedThrowable extends \RuntimeException +class GetLibrarySectionsAllUnauthorizedThrowable extends \RuntimeException { - public GetAllMediaLibraryUnauthorized $container; + public GetLibrarySectionsAllUnauthorized $container; - public function __construct(string $message, int $statusCode, GetAllMediaLibraryUnauthorized $container) + public function __construct(string $message, int $statusCode, GetLibrarySectionsAllUnauthorized $container) { parent::__construct($message, $statusCode); $this->container = $container; diff --git a/src/Models/Operations/Country.php b/src/Models/Operations/Country.php index 66c3b3a..0237d57 100644 --- a/src/Models/Operations/Country.php +++ b/src/Models/Operations/Country.php @@ -13,6 +13,10 @@ namespace LukeHagar\Plex_API\Models\Operations; class Country { /** + * The unique identifier for the country. + * + * NOTE: This is different for each Plex server and is not globally unique. + * * * @var int $id */ @@ -29,19 +33,18 @@ class Country /** * - * @var ?string $filter + * @var string $filter */ #[\Speakeasy\Serializer\Annotation\SerializedName('filter')] - #[\Speakeasy\Serializer\Annotation\SkipWhenNull] - public ?string $filter = null; + public string $filter; /** * @param int $id * @param string $tag - * @param ?string $filter + * @param string $filter * @phpstan-pure */ - public function __construct(int $id, string $tag, ?string $filter = null) + public function __construct(int $id, string $tag, string $filter) { $this->id = $id; $this->tag = $tag; diff --git a/src/Models/Operations/Director.php b/src/Models/Operations/Director.php index 01a5b4b..f5c0426 100644 --- a/src/Models/Operations/Director.php +++ b/src/Models/Operations/Director.php @@ -11,6 +11,22 @@ namespace LukeHagar\Plex_API\Models\Operations; class Director { + /** + * Unique identifier for the director. + * + * @var int $id + */ + #[\Speakeasy\Serializer\Annotation\SerializedName('id')] + public int $id; + + /** + * The filter string used to query this director. + * + * @var string $filter + */ + #[\Speakeasy\Serializer\Annotation\SerializedName('filter')] + public string $filter; + /** * The role of Director * @@ -20,11 +36,36 @@ class Director public string $tag; /** + * A unique 24-character hexadecimal key associated with the director's tag, used for internal identification. + * + * @var string $tagKey + */ + #[\Speakeasy\Serializer\Annotation\SerializedName('tagKey')] + public string $tagKey; + + /** + * The absolute URL of the thumbnail image for the director. + * + * @var ?string $thumb + */ + #[\Speakeasy\Serializer\Annotation\SerializedName('thumb')] + #[\Speakeasy\Serializer\Annotation\SkipWhenNull] + public ?string $thumb = null; + + /** + * @param int $id + * @param string $filter * @param string $tag + * @param string $tagKey + * @param ?string $thumb * @phpstan-pure */ - public function __construct(string $tag) + public function __construct(int $id, string $filter, string $tag, string $tagKey, ?string $thumb = null) { + $this->id = $id; + $this->filter = $filter; $this->tag = $tag; + $this->tagKey = $tagKey; + $this->thumb = $thumb; } } \ No newline at end of file diff --git a/src/Models/Operations/Genre.php b/src/Models/Operations/Genre.php index 001e5dc..966dfc7 100644 --- a/src/Models/Operations/Genre.php +++ b/src/Models/Operations/Genre.php @@ -13,6 +13,10 @@ namespace LukeHagar\Plex_API\Models\Operations; class Genre { /** + * The unique identifier for the genre. + * + * NOTE: This is different for each Plex server and is not globally unique. + * * * @var int $id */ diff --git a/src/Models/Operations/GetActorsLibraryQueryParamType.php b/src/Models/Operations/GetActorsLibraryQueryParamType.php index fbddda4..4cd8ceb 100644 --- a/src/Models/Operations/GetActorsLibraryQueryParamType.php +++ b/src/Models/Operations/GetActorsLibraryQueryParamType.php @@ -25,7 +25,9 @@ enum GetActorsLibraryQueryParamType: int case TvShow = 2; case Season = 3; case Episode = 4; - case Audio = 8; - case Album = 9; - case Track = 10; + case Artist = 5; + case Album = 6; + case Track = 7; + case PhotoAlbum = 8; + case Photo = 9; } diff --git a/src/Models/Operations/GetAllLibrariesType.php b/src/Models/Operations/GetAllLibrariesType.php index 0d61a28..c643dce 100644 --- a/src/Models/Operations/GetAllLibrariesType.php +++ b/src/Models/Operations/GetAllLibrariesType.php @@ -18,4 +18,8 @@ enum GetAllLibrariesType: string case Episode = 'episode'; case Artist = 'artist'; case Album = 'album'; + case Track = 'track'; + case PhotoAlbum = 'photoalbum'; + case Photo = 'photo'; + case Collection = 'collection'; } diff --git a/src/Models/Operations/GetAllMediaLibraryResponseBody.php b/src/Models/Operations/GetAllMediaLibraryResponseBody.php deleted file mode 100644 index 70c0fde..0000000 --- a/src/Models/Operations/GetAllMediaLibraryResponseBody.php +++ /dev/null @@ -1,32 +0,0 @@ -mediaContainer = $mediaContainer; - } -} \ No newline at end of file diff --git a/src/Models/Operations/GetCountriesLibraryQueryParamType.php b/src/Models/Operations/GetCountriesLibraryQueryParamType.php index 2e52e5d..d65b4d1 100644 --- a/src/Models/Operations/GetCountriesLibraryQueryParamType.php +++ b/src/Models/Operations/GetCountriesLibraryQueryParamType.php @@ -25,7 +25,9 @@ enum GetCountriesLibraryQueryParamType: int case TvShow = 2; case Season = 3; case Episode = 4; - case Audio = 8; - case Album = 9; - case Track = 10; + case Artist = 5; + case Album = 6; + case Track = 7; + case PhotoAlbum = 8; + case Photo = 9; } diff --git a/src/Models/Operations/GetGenresLibraryQueryParamType.php b/src/Models/Operations/GetGenresLibraryQueryParamType.php index 525bfaa..e2b06be 100644 --- a/src/Models/Operations/GetGenresLibraryQueryParamType.php +++ b/src/Models/Operations/GetGenresLibraryQueryParamType.php @@ -25,7 +25,9 @@ enum GetGenresLibraryQueryParamType: int case TvShow = 2; case Season = 3; case Episode = 4; - case Audio = 8; - case Album = 9; - case Track = 10; + case Artist = 5; + case Album = 6; + case Track = 7; + case PhotoAlbum = 8; + case Photo = 9; } diff --git a/src/Models/Operations/GetLibraryItemsLibraryType.php b/src/Models/Operations/GetLibraryItemsLibraryType.php index 07b4b70..745cc83 100644 --- a/src/Models/Operations/GetLibraryItemsLibraryType.php +++ b/src/Models/Operations/GetLibraryItemsLibraryType.php @@ -10,7 +10,7 @@ namespace LukeHagar\Plex_API\Models\Operations; /** - * The type of media content + * The type of media content in the Plex library. This can represent videos, music, or photos. * * */ @@ -22,4 +22,8 @@ enum GetLibraryItemsLibraryType: string case Episode = 'episode'; case Artist = 'artist'; case Album = 'album'; + case Track = 'track'; + case PhotoAlbum = 'photoalbum'; + case Photo = 'photo'; + case Collection = 'collection'; } diff --git a/src/Models/Operations/GetLibraryItemsMetadata.php b/src/Models/Operations/GetLibraryItemsMetadata.php index fd23aaa..5f71a93 100644 --- a/src/Models/Operations/GetLibraryItemsMetadata.php +++ b/src/Models/Operations/GetLibraryItemsMetadata.php @@ -37,7 +37,7 @@ class GetLibraryItemsMetadata public string $guid; /** - * The type of media content + * The type of media content in the Plex library. This can represent videos, music, or photos. * * * diff --git a/src/Models/Operations/GetLibraryItemsQueryParamType.php b/src/Models/Operations/GetLibraryItemsQueryParamType.php index d3b27d4..bb8eb38 100644 --- a/src/Models/Operations/GetLibraryItemsQueryParamType.php +++ b/src/Models/Operations/GetLibraryItemsQueryParamType.php @@ -25,7 +25,9 @@ enum GetLibraryItemsQueryParamType: int case TvShow = 2; case Season = 3; case Episode = 4; - case Audio = 8; - case Album = 9; - case Track = 10; + case Artist = 5; + case Album = 6; + case Track = 7; + case PhotoAlbum = 8; + case Photo = 9; } diff --git a/src/Models/Operations/GetAllMediaLibraryActiveDirection.php b/src/Models/Operations/GetLibrarySectionsAllActiveDirection.php similarity index 85% rename from src/Models/Operations/GetAllMediaLibraryActiveDirection.php rename to src/Models/Operations/GetLibrarySectionsAllActiveDirection.php index 8de5e0c..be63938 100644 --- a/src/Models/Operations/GetAllMediaLibraryActiveDirection.php +++ b/src/Models/Operations/GetLibrarySectionsAllActiveDirection.php @@ -14,7 +14,7 @@ namespace LukeHagar\Plex_API\Models\Operations; * * */ -enum GetAllMediaLibraryActiveDirection: string +enum GetLibrarySectionsAllActiveDirection: string { case Ascending = 'asc'; case Descending = 'desc'; diff --git a/src/Models/Operations/GetAllMediaLibraryCollection.php b/src/Models/Operations/GetLibrarySectionsAllCollection.php similarity index 93% rename from src/Models/Operations/GetAllMediaLibraryCollection.php rename to src/Models/Operations/GetLibrarySectionsAllCollection.php index a882287..acd034f 100644 --- a/src/Models/Operations/GetAllMediaLibraryCollection.php +++ b/src/Models/Operations/GetLibrarySectionsAllCollection.php @@ -9,7 +9,7 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Operations; -class GetAllMediaLibraryCollection +class GetLibrarySectionsAllCollection { /** * The user-made collection this media item belongs to diff --git a/src/Models/Operations/GetAllMediaLibraryCountry.php b/src/Models/Operations/GetLibrarySectionsAllCountry.php similarity index 93% rename from src/Models/Operations/GetAllMediaLibraryCountry.php rename to src/Models/Operations/GetLibrarySectionsAllCountry.php index d561ce3..4eab3aa 100644 --- a/src/Models/Operations/GetAllMediaLibraryCountry.php +++ b/src/Models/Operations/GetLibrarySectionsAllCountry.php @@ -9,7 +9,7 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Operations; -class GetAllMediaLibraryCountry +class GetLibrarySectionsAllCountry { /** * The country of origin of this media item diff --git a/src/Models/Operations/GetAllMediaLibraryDefaultDirection.php b/src/Models/Operations/GetLibrarySectionsAllDefaultDirection.php similarity index 85% rename from src/Models/Operations/GetAllMediaLibraryDefaultDirection.php rename to src/Models/Operations/GetLibrarySectionsAllDefaultDirection.php index 732dfe4..32a0585 100644 --- a/src/Models/Operations/GetAllMediaLibraryDefaultDirection.php +++ b/src/Models/Operations/GetLibrarySectionsAllDefaultDirection.php @@ -14,7 +14,7 @@ namespace LukeHagar\Plex_API\Models\Operations; * * */ -enum GetAllMediaLibraryDefaultDirection: string +enum GetLibrarySectionsAllDefaultDirection: string { case Ascending = 'asc'; case Descending = 'desc'; diff --git a/src/Models/Operations/GetAllMediaLibraryDirector.php b/src/Models/Operations/GetLibrarySectionsAllDirector.php similarity index 92% rename from src/Models/Operations/GetAllMediaLibraryDirector.php rename to src/Models/Operations/GetLibrarySectionsAllDirector.php index 7c5c2c6..d4acea2 100644 --- a/src/Models/Operations/GetAllMediaLibraryDirector.php +++ b/src/Models/Operations/GetLibrarySectionsAllDirector.php @@ -9,7 +9,7 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Operations; -class GetAllMediaLibraryDirector +class GetLibrarySectionsAllDirector { /** * The role of Director diff --git a/src/Models/Operations/GetAllMediaLibraryField.php b/src/Models/Operations/GetLibrarySectionsAllField.php similarity index 97% rename from src/Models/Operations/GetAllMediaLibraryField.php rename to src/Models/Operations/GetLibrarySectionsAllField.php index 7d7116f..32569d5 100644 --- a/src/Models/Operations/GetAllMediaLibraryField.php +++ b/src/Models/Operations/GetLibrarySectionsAllField.php @@ -9,7 +9,7 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Operations; -class GetAllMediaLibraryField +class GetLibrarySectionsAllField { /** * diff --git a/src/Models/Operations/GetAllMediaLibraryFieldType.php b/src/Models/Operations/GetLibrarySectionsAllFieldType.php similarity index 76% rename from src/Models/Operations/GetAllMediaLibraryFieldType.php rename to src/Models/Operations/GetLibrarySectionsAllFieldType.php index 4eed078..609b903 100644 --- a/src/Models/Operations/GetAllMediaLibraryFieldType.php +++ b/src/Models/Operations/GetLibrarySectionsAllFieldType.php @@ -9,7 +9,7 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Operations; -class GetAllMediaLibraryFieldType +class GetLibrarySectionsAllFieldType { /** * @@ -21,15 +21,15 @@ class GetAllMediaLibraryFieldType /** * $operator * - * @var array $operator + * @var array $operator */ #[\Speakeasy\Serializer\Annotation\SerializedName('Operator')] - #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibraryOperator>')] + #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllOperator>')] public array $operator; /** * @param string $type - * @param array $operator + * @param array $operator * @phpstan-pure */ public function __construct(string $type, array $operator) diff --git a/src/Models/Operations/GetAllMediaLibraryFilter.php b/src/Models/Operations/GetLibrarySectionsAllFilter.php similarity index 97% rename from src/Models/Operations/GetAllMediaLibraryFilter.php rename to src/Models/Operations/GetLibrarySectionsAllFilter.php index fd56181..25ef6a7 100644 --- a/src/Models/Operations/GetAllMediaLibraryFilter.php +++ b/src/Models/Operations/GetLibrarySectionsAllFilter.php @@ -9,7 +9,7 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Operations; -class GetAllMediaLibraryFilter +class GetLibrarySectionsAllFilter { /** * diff --git a/src/Models/Operations/GetAllMediaLibraryGenre.php b/src/Models/Operations/GetLibrarySectionsAllGenre.php similarity index 93% rename from src/Models/Operations/GetAllMediaLibraryGenre.php rename to src/Models/Operations/GetLibrarySectionsAllGenre.php index 8d8c0bf..601d709 100644 --- a/src/Models/Operations/GetAllMediaLibraryGenre.php +++ b/src/Models/Operations/GetLibrarySectionsAllGenre.php @@ -9,7 +9,7 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Operations; -class GetAllMediaLibraryGenre +class GetLibrarySectionsAllGenre { /** * The genre name of this media-item diff --git a/src/Models/Operations/GetAllMediaLibraryGuids.php b/src/Models/Operations/GetLibrarySectionsAllGuids.php similarity index 52% rename from src/Models/Operations/GetAllMediaLibraryGuids.php rename to src/Models/Operations/GetLibrarySectionsAllGuids.php index 3affedf..a8a4ab4 100644 --- a/src/Models/Operations/GetAllMediaLibraryGuids.php +++ b/src/Models/Operations/GetLibrarySectionsAllGuids.php @@ -9,24 +9,23 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Operations; -class GetAllMediaLibraryGuids +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:// * * * - * @var ?string $id + * @var string $id */ #[\Speakeasy\Serializer\Annotation\SerializedName('id')] - #[\Speakeasy\Serializer\Annotation\SkipWhenNull] - public ?string $id = null; + public string $id; /** - * @param ?string $id + * @param string $id * @phpstan-pure */ - public function __construct(?string $id = null) + public function __construct(string $id) { $this->id = $id; } diff --git a/src/Models/Operations/GetAllMediaLibraryHasThumbnail.php b/src/Models/Operations/GetLibrarySectionsAllHasThumbnail.php similarity index 84% rename from src/Models/Operations/GetAllMediaLibraryHasThumbnail.php rename to src/Models/Operations/GetLibrarySectionsAllHasThumbnail.php index d557ca7..94e019a 100644 --- a/src/Models/Operations/GetAllMediaLibraryHasThumbnail.php +++ b/src/Models/Operations/GetLibrarySectionsAllHasThumbnail.php @@ -10,7 +10,7 @@ namespace LukeHagar\Plex_API\Models\Operations; /** Indicates if the part has a thumbnail. */ -enum GetAllMediaLibraryHasThumbnail: string +enum GetLibrarySectionsAllHasThumbnail: string { case False = '0'; case True = '1'; diff --git a/src/Models/Operations/GetAllMediaLibraryImage.php b/src/Models/Operations/GetLibrarySectionsAllImage.php similarity index 66% rename from src/Models/Operations/GetAllMediaLibraryImage.php rename to src/Models/Operations/GetLibrarySectionsAllImage.php index 0df042f..0aa2dc5 100644 --- a/src/Models/Operations/GetAllMediaLibraryImage.php +++ b/src/Models/Operations/GetLibrarySectionsAllImage.php @@ -9,7 +9,7 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Operations; -class GetAllMediaLibraryImage +class GetLibrarySectionsAllImage { /** * @@ -20,11 +20,11 @@ class GetAllMediaLibraryImage /** * - * @var GetAllMediaLibraryLibraryResponseType $type + * @var GetLibrarySectionsAllLibraryResponseType $type */ #[\Speakeasy\Serializer\Annotation\SerializedName('type')] - #[\Speakeasy\Serializer\Annotation\Type('\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibraryLibraryResponseType')] - public GetAllMediaLibraryLibraryResponseType $type; + #[\Speakeasy\Serializer\Annotation\Type('\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllLibraryResponseType')] + public GetLibrarySectionsAllLibraryResponseType $type; /** * @@ -35,11 +35,11 @@ class GetAllMediaLibraryImage /** * @param string $alt - * @param GetAllMediaLibraryLibraryResponseType $type + * @param GetLibrarySectionsAllLibraryResponseType $type * @param string $url * @phpstan-pure */ - public function __construct(string $alt, GetAllMediaLibraryLibraryResponseType $type, string $url) + public function __construct(string $alt, GetLibrarySectionsAllLibraryResponseType $type, string $url) { $this->alt = $alt; $this->type = $type; diff --git a/src/Models/Operations/GetAllMediaLibraryLibraryResponseType.php b/src/Models/Operations/GetLibrarySectionsAllLibraryResponseType.php similarity index 84% rename from src/Models/Operations/GetAllMediaLibraryLibraryResponseType.php rename to src/Models/Operations/GetLibrarySectionsAllLibraryResponseType.php index ef06432..a4907f6 100644 --- a/src/Models/Operations/GetAllMediaLibraryLibraryResponseType.php +++ b/src/Models/Operations/GetLibrarySectionsAllLibraryResponseType.php @@ -9,7 +9,7 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Operations; -enum GetAllMediaLibraryLibraryResponseType: string +enum GetLibrarySectionsAllLibraryResponseType: string { case CoverPoster = 'coverPoster'; case Background = 'background'; diff --git a/src/Models/Operations/GetAllMediaLibraryLibraryType.php b/src/Models/Operations/GetLibrarySectionsAllLibraryType.php similarity index 56% rename from src/Models/Operations/GetAllMediaLibraryLibraryType.php rename to src/Models/Operations/GetLibrarySectionsAllLibraryType.php index 92fe197..d57856f 100644 --- a/src/Models/Operations/GetAllMediaLibraryLibraryType.php +++ b/src/Models/Operations/GetLibrarySectionsAllLibraryType.php @@ -10,11 +10,11 @@ namespace LukeHagar\Plex_API\Models\Operations; /** - * The type of media content + * The type of media content in the Plex library. This can represent videos, music, or photos. * * */ -enum GetAllMediaLibraryLibraryType: string +enum GetLibrarySectionsAllLibraryType: string { case Movie = 'movie'; case TvShow = 'show'; @@ -22,4 +22,8 @@ enum GetAllMediaLibraryLibraryType: string case Episode = 'episode'; case Artist = 'artist'; case Album = 'album'; + case Track = 'track'; + case PhotoAlbum = 'photoalbum'; + case Photo = 'photo'; + case Collection = 'collection'; } diff --git a/src/Models/Operations/GetAllMediaLibraryMedia.php b/src/Models/Operations/GetLibrarySectionsAllMedia.php similarity index 97% rename from src/Models/Operations/GetAllMediaLibraryMedia.php rename to src/Models/Operations/GetLibrarySectionsAllMedia.php index 69f7ce0..6c67bb3 100644 --- a/src/Models/Operations/GetAllMediaLibraryMedia.php +++ b/src/Models/Operations/GetLibrarySectionsAllMedia.php @@ -9,7 +9,7 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Operations; -class GetAllMediaLibraryMedia +class GetLibrarySectionsAllMedia { /** * Unique media identifier. @@ -176,10 +176,10 @@ class GetAllMediaLibraryMedia /** * An array of parts for this media item. * - * @var ?array $part + * @var ?array $part */ #[\Speakeasy\Serializer\Annotation\SerializedName('Part')] - #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibraryPart>|null')] + #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllPart>|null')] #[\Speakeasy\Serializer\Annotation\SkipWhenNull] public ?array $part = null; @@ -202,7 +202,7 @@ class GetAllMediaLibraryMedia * @param ?string $audioProfile * @param OptimizedForStreaming1|bool|null $optimizedForStreaming * @param ?bool $has64bitOffsets - * @param ?array $part + * @param ?array $part * @phpstan-pure */ public function __construct(int $id, ?int $duration = null, ?int $bitrate = null, ?int $width = null, ?int $height = null, ?float $aspectRatio = null, ?int $audioChannels = null, ?int $displayOffset = null, ?string $audioCodec = null, ?string $videoCodec = null, ?string $videoResolution = null, ?string $container = null, ?string $videoFrameRate = null, ?string $videoProfile = null, ?bool $hasVoiceActivity = null, ?string $audioProfile = null, OptimizedForStreaming1|bool|null $optimizedForStreaming = null, ?bool $has64bitOffsets = null, ?array $part = null) diff --git a/src/Models/Operations/GetAllMediaLibraryMediaContainer.php b/src/Models/Operations/GetLibrarySectionsAllMediaContainer.php similarity index 91% rename from src/Models/Operations/GetAllMediaLibraryMediaContainer.php rename to src/Models/Operations/GetLibrarySectionsAllMediaContainer.php index 1534b36..faabc5f 100644 --- a/src/Models/Operations/GetAllMediaLibraryMediaContainer.php +++ b/src/Models/Operations/GetLibrarySectionsAllMediaContainer.php @@ -9,7 +9,7 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Operations; -class GetAllMediaLibraryMediaContainer +class GetLibrarySectionsAllMediaContainer { /** * Number of media items returned in this response. @@ -153,20 +153,20 @@ class GetAllMediaLibraryMediaContainer * * * - * @var ?GetAllMediaLibraryMeta $meta + * @var ?GetLibrarySectionsAllMeta $meta */ #[\Speakeasy\Serializer\Annotation\SerializedName('Meta')] - #[\Speakeasy\Serializer\Annotation\Type('\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibraryMeta|null')] + #[\Speakeasy\Serializer\Annotation\Type('\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllMeta|null')] #[\Speakeasy\Serializer\Annotation\SkipWhenNull] - public ?GetAllMediaLibraryMeta $meta = null; + public ?GetLibrarySectionsAllMeta $meta = null; /** * An array of metadata items. * - * @var ?array $metadata + * @var ?array $metadata */ #[\Speakeasy\Serializer\Annotation\SerializedName('Metadata')] - #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibraryMetadata>|null')] + #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllMetadata>|null')] #[\Speakeasy\Serializer\Annotation\SkipWhenNull] public ?array $metadata = null; @@ -188,11 +188,11 @@ class GetAllMediaLibraryMediaContainer * @param string $title2 * @param string $viewGroup * @param ?string $librarySectionUUID - * @param ?GetAllMediaLibraryMeta $meta - * @param ?array $metadata + * @param ?GetLibrarySectionsAllMeta $meta + * @param ?array $metadata * @phpstan-pure */ - public function __construct(int $size, int $totalSize, int $offset, bool $allowSync, string $art, string $content, string $identifier, int $librarySectionID, string $librarySectionTitle, string $mediaTagPrefix, int $mediaTagVersion, string $thumb, bool $nocache, string $title1, string $title2, string $viewGroup, ?string $librarySectionUUID = null, ?GetAllMediaLibraryMeta $meta = null, ?array $metadata = null) + public function __construct(int $size, int $totalSize, int $offset, bool $allowSync, string $art, string $content, string $identifier, int $librarySectionID, string $librarySectionTitle, string $mediaTagPrefix, int $mediaTagVersion, string $thumb, bool $nocache, string $title1, string $title2, string $viewGroup, ?string $librarySectionUUID = null, ?GetLibrarySectionsAllMeta $meta = null, ?array $metadata = null) { $this->size = $size; $this->totalSize = $totalSize; diff --git a/src/Models/Operations/GetAllMediaLibraryMeta.php b/src/Models/Operations/GetLibrarySectionsAllMeta.php similarity index 63% rename from src/Models/Operations/GetAllMediaLibraryMeta.php rename to src/Models/Operations/GetLibrarySectionsAllMeta.php index f0147cc..ff2a1a8 100644 --- a/src/Models/Operations/GetAllMediaLibraryMeta.php +++ b/src/Models/Operations/GetLibrarySectionsAllMeta.php @@ -10,35 +10,35 @@ namespace LukeHagar\Plex_API\Models\Operations; /** - * GetAllMediaLibraryMeta - The Meta object is only included in the response if the `includeMeta` parameter is set to `1`. + * GetLibrarySectionsAllMeta - The Meta object is only included in the response if the `includeMeta` parameter is set to `1`. * * */ -class GetAllMediaLibraryMeta +class GetLibrarySectionsAllMeta { /** * $type * - * @var ?array $type + * @var ?array $type */ #[\Speakeasy\Serializer\Annotation\SerializedName('Type')] - #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibraryType>|null')] + #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllType>|null')] #[\Speakeasy\Serializer\Annotation\SkipWhenNull] public ?array $type = null; /** * $fieldType * - * @var ?array $fieldType + * @var ?array $fieldType */ #[\Speakeasy\Serializer\Annotation\SerializedName('FieldType')] - #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibraryFieldType>|null')] + #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllFieldType>|null')] #[\Speakeasy\Serializer\Annotation\SkipWhenNull] public ?array $fieldType = null; /** - * @param ?array $type - * @param ?array $fieldType + * @param ?array $type + * @param ?array $fieldType * @phpstan-pure */ public function __construct(?array $type = null, ?array $fieldType = null) diff --git a/src/Models/Operations/GetAllMediaLibraryMetadata.php b/src/Models/Operations/GetLibrarySectionsAllMetadata.php similarity index 84% rename from src/Models/Operations/GetAllMediaLibraryMetadata.php rename to src/Models/Operations/GetLibrarySectionsAllMetadata.php index 0446a38..6e8e34d 100644 --- a/src/Models/Operations/GetAllMediaLibraryMetadata.php +++ b/src/Models/Operations/GetLibrarySectionsAllMetadata.php @@ -10,11 +10,11 @@ namespace LukeHagar\Plex_API\Models\Operations; use Brick\DateTime\LocalDate; /** - * GetAllMediaLibraryMetadata - Unknown + * GetLibrarySectionsAllMetadata - Unknown * * */ -class GetAllMediaLibraryMetadata +class GetLibrarySectionsAllMetadata { /** * The rating key (Media ID) of this media item. Note: Although this is always an integer, it is represented as a string in the API. @@ -50,11 +50,11 @@ class GetAllMediaLibraryMetadata /** * - * @var GetAllMediaLibraryLibraryType $type + * @var GetLibrarySectionsAllLibraryType $type */ #[\Speakeasy\Serializer\Annotation\SerializedName('type')] - #[\Speakeasy\Serializer\Annotation\Type('\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibraryLibraryType')] - public GetAllMediaLibraryLibraryType $type; + #[\Speakeasy\Serializer\Annotation\Type('\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllLibraryType')] + public GetLibrarySectionsAllLibraryType $type; /** * The title of the media item. @@ -484,99 +484,99 @@ class GetAllMediaLibraryMetadata /** * $image * - * @var ?array $image + * @var ?array $image */ #[\Speakeasy\Serializer\Annotation\SerializedName('Image')] - #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibraryImage>|null')] + #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllImage>|null')] #[\Speakeasy\Serializer\Annotation\SkipWhenNull] public ?array $image = null; /** * - * @var ?GetAllMediaLibraryUltraBlurColors $ultraBlurColors + * @var ?GetLibrarySectionsAllUltraBlurColors $ultraBlurColors */ #[\Speakeasy\Serializer\Annotation\SerializedName('UltraBlurColors')] - #[\Speakeasy\Serializer\Annotation\Type('\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibraryUltraBlurColors|null')] + #[\Speakeasy\Serializer\Annotation\Type('\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllUltraBlurColors|null')] #[\Speakeasy\Serializer\Annotation\SkipWhenNull] - public ?GetAllMediaLibraryUltraBlurColors $ultraBlurColors = null; + public ?GetLibrarySectionsAllUltraBlurColors $ultraBlurColors = null; + + /** + * $guids + * + * @var ?array $guids + */ + #[\Speakeasy\Serializer\Annotation\SerializedName('Guid')] + #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllGuids>|null')] + #[\Speakeasy\Serializer\Annotation\SkipWhenNull] + public ?array $guids = null; /** * $media * - * @var ?array $media + * @var ?array $media */ #[\Speakeasy\Serializer\Annotation\SerializedName('Media')] - #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibraryMedia>|null')] + #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllMedia>|null')] #[\Speakeasy\Serializer\Annotation\SkipWhenNull] public ?array $media = null; /** * $genre * - * @var ?array $genre + * @var ?array $genre */ #[\Speakeasy\Serializer\Annotation\SerializedName('Genre')] - #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibraryGenre>|null')] + #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllGenre>|null')] #[\Speakeasy\Serializer\Annotation\SkipWhenNull] public ?array $genre = null; /** * $country * - * @var ?array $country + * @var ?array $country */ #[\Speakeasy\Serializer\Annotation\SerializedName('Country')] - #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibraryCountry>|null')] + #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllCountry>|null')] #[\Speakeasy\Serializer\Annotation\SkipWhenNull] public ?array $country = null; /** * $director * - * @var ?array $director + * @var ?array $director */ #[\Speakeasy\Serializer\Annotation\SerializedName('Director')] - #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibraryDirector>|null')] + #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllDirector>|null')] #[\Speakeasy\Serializer\Annotation\SkipWhenNull] public ?array $director = null; /** * $writer * - * @var ?array $writer + * @var ?array $writer */ #[\Speakeasy\Serializer\Annotation\SerializedName('Writer')] - #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibraryWriter>|null')] + #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllWriter>|null')] #[\Speakeasy\Serializer\Annotation\SkipWhenNull] public ?array $writer = null; /** * $role * - * @var ?array $role + * @var ?array $role */ #[\Speakeasy\Serializer\Annotation\SerializedName('Role')] - #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibraryRole>|null')] + #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllRole>|null')] #[\Speakeasy\Serializer\Annotation\SkipWhenNull] public ?array $role = null; - /** - * $guids - * - * @var ?array $guids - */ - #[\Speakeasy\Serializer\Annotation\SerializedName('Guid')] - #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibraryGuids>|null')] - #[\Speakeasy\Serializer\Annotation\SkipWhenNull] - public ?array $guids = null; - /** * $collection * - * @var ?array $collection + * @var ?array $collection */ #[\Speakeasy\Serializer\Annotation\SerializedName('Collection')] - #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibraryCollection>|null')] + #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllCollection>|null')] #[\Speakeasy\Serializer\Annotation\SkipWhenNull] public ?array $collection = null; @@ -585,7 +585,7 @@ class GetAllMediaLibraryMetadata * @param string $key * @param string $guid * @param string $slug - * @param GetAllMediaLibraryLibraryType $type + * @param GetLibrarySectionsAllLibraryType $type * @param string $title * @param string $titleSort * @param string $summary @@ -635,19 +635,19 @@ class GetAllMediaLibraryMetadata * @param ?string $createdAtTZOffset * @param ?int $lastViewedAt * @param ?float $userRating - * @param ?array $image - * @param ?GetAllMediaLibraryUltraBlurColors $ultraBlurColors - * @param ?array $media - * @param ?array $genre - * @param ?array $country - * @param ?array $director - * @param ?array $writer - * @param ?array $role - * @param ?array $guids - * @param ?array $collection + * @param ?array $image + * @param ?GetLibrarySectionsAllUltraBlurColors $ultraBlurColors + * @param ?array $guids + * @param ?array $media + * @param ?array $genre + * @param ?array $country + * @param ?array $director + * @param ?array $writer + * @param ?array $role + * @param ?array $collection * @phpstan-pure */ - public function __construct(string $ratingKey, string $key, string $guid, string $slug, GetAllMediaLibraryLibraryType $type, string $title, string $titleSort, string $summary, float $rating, float $audienceRating, string $tagline, string $thumb, string $art, string $theme, int $index, int $childCount, int $seasonCount, int $duration, LocalDate $originallyAvailableAt, int $addedAt, ?string $studio = null, ?string $contentRating = null, ?int $year = null, ?int $leafCount = null, ?int $viewedLeafCount = null, ?int $updatedAt = null, ?string $audienceRatingImage = null, ?string $chapterSource = null, ?string $primaryExtraKey = null, ?string $originalTitle = null, ?string $parentRatingKey = null, ?string $grandparentRatingKey = null, ?string $parentGuid = null, ?string $grandparentGuid = null, ?string $grandparentSlug = null, ?string $grandparentKey = null, ?string $parentKey = null, ?string $grandparentTitle = null, ?string $grandparentThumb = null, ?string $grandparentTheme = null, ?string $grandparentArt = null, ?string $parentTitle = null, ?int $parentIndex = null, ?string $parentThumb = null, ?string $ratingImage = null, ?int $viewCount = null, ?int $viewOffset = null, ?int $skipCount = null, ?string $subtype = null, ?int $lastRatedAt = null, ?string $createdAtAccuracy = null, ?string $createdAtTZOffset = null, ?int $lastViewedAt = null, ?float $userRating = null, ?array $image = null, ?GetAllMediaLibraryUltraBlurColors $ultraBlurColors = null, ?array $media = null, ?array $genre = null, ?array $country = null, ?array $director = null, ?array $writer = null, ?array $role = null, ?array $guids = null, ?array $collection = null) + public function __construct(string $ratingKey, string $key, string $guid, string $slug, GetLibrarySectionsAllLibraryType $type, string $title, string $titleSort, string $summary, float $rating, float $audienceRating, string $tagline, string $thumb, string $art, string $theme, int $index, int $childCount, int $seasonCount, int $duration, LocalDate $originallyAvailableAt, int $addedAt, ?string $studio = null, ?string $contentRating = null, ?int $year = null, ?int $leafCount = null, ?int $viewedLeafCount = null, ?int $updatedAt = null, ?string $audienceRatingImage = null, ?string $chapterSource = null, ?string $primaryExtraKey = null, ?string $originalTitle = null, ?string $parentRatingKey = null, ?string $grandparentRatingKey = null, ?string $parentGuid = null, ?string $grandparentGuid = null, ?string $grandparentSlug = null, ?string $grandparentKey = null, ?string $parentKey = null, ?string $grandparentTitle = null, ?string $grandparentThumb = null, ?string $grandparentTheme = null, ?string $grandparentArt = null, ?string $parentTitle = null, ?int $parentIndex = null, ?string $parentThumb = null, ?string $ratingImage = null, ?int $viewCount = null, ?int $viewOffset = null, ?int $skipCount = null, ?string $subtype = null, ?int $lastRatedAt = null, ?string $createdAtAccuracy = null, ?string $createdAtTZOffset = null, ?int $lastViewedAt = null, ?float $userRating = null, ?array $image = null, ?GetLibrarySectionsAllUltraBlurColors $ultraBlurColors = null, ?array $guids = null, ?array $media = null, ?array $genre = null, ?array $country = null, ?array $director = null, ?array $writer = null, ?array $role = null, ?array $collection = null) { $this->ratingKey = $ratingKey; $this->key = $key; @@ -705,13 +705,13 @@ class GetAllMediaLibraryMetadata $this->userRating = $userRating; $this->image = $image; $this->ultraBlurColors = $ultraBlurColors; + $this->guids = $guids; $this->media = $media; $this->genre = $genre; $this->country = $country; $this->director = $director; $this->writer = $writer; $this->role = $role; - $this->guids = $guids; $this->collection = $collection; } } \ No newline at end of file diff --git a/src/Models/Operations/GetAllMediaLibraryOperator.php b/src/Models/Operations/GetLibrarySectionsAllOperator.php similarity index 94% rename from src/Models/Operations/GetAllMediaLibraryOperator.php rename to src/Models/Operations/GetLibrarySectionsAllOperator.php index 70ec0a5..b0d4c26 100644 --- a/src/Models/Operations/GetAllMediaLibraryOperator.php +++ b/src/Models/Operations/GetLibrarySectionsAllOperator.php @@ -9,7 +9,7 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Operations; -class GetAllMediaLibraryOperator +class GetLibrarySectionsAllOperator { /** * diff --git a/src/Models/Operations/GetAllMediaLibraryOptimizedForStreaming1.php b/src/Models/Operations/GetLibrarySectionsAllOptimizedForStreaming1.php similarity index 78% rename from src/Models/Operations/GetAllMediaLibraryOptimizedForStreaming1.php rename to src/Models/Operations/GetLibrarySectionsAllOptimizedForStreaming1.php index a27cfd3..a665994 100644 --- a/src/Models/Operations/GetAllMediaLibraryOptimizedForStreaming1.php +++ b/src/Models/Operations/GetLibrarySectionsAllOptimizedForStreaming1.php @@ -9,7 +9,7 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Operations; -enum GetAllMediaLibraryOptimizedForStreaming1: int +enum GetLibrarySectionsAllOptimizedForStreaming1: int { case Zero = 0; case One = 1; diff --git a/src/Models/Operations/GetAllMediaLibraryPart.php b/src/Models/Operations/GetLibrarySectionsAllPart.php similarity index 83% rename from src/Models/Operations/GetAllMediaLibraryPart.php rename to src/Models/Operations/GetLibrarySectionsAllPart.php index 0b344b8..f280350 100644 --- a/src/Models/Operations/GetAllMediaLibraryPart.php +++ b/src/Models/Operations/GetLibrarySectionsAllPart.php @@ -9,7 +9,7 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Operations; -class GetAllMediaLibraryPart +class GetLibrarySectionsAllPart { /** * Unique part identifier. @@ -124,31 +124,31 @@ class GetAllMediaLibraryPart /** * Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true * - * @var GetAllMediaLibraryOptimizedForStreaming1|bool|null $optimizedForStreaming + * @var GetLibrarySectionsAllOptimizedForStreaming1|bool|null $optimizedForStreaming */ #[\Speakeasy\Serializer\Annotation\SerializedName('optimizedForStreaming')] - #[\Speakeasy\Serializer\Annotation\Type('\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibraryOptimizedForStreaming1|bool|null')] + #[\Speakeasy\Serializer\Annotation\Type('\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllOptimizedForStreaming1|bool|null')] #[\Speakeasy\Serializer\Annotation\SkipWhenNull] - public GetAllMediaLibraryOptimizedForStreaming1|bool|null $optimizedForStreaming = null; + public GetLibrarySectionsAllOptimizedForStreaming1|bool|null $optimizedForStreaming = null; /** * An array of streams for this part. * - * @var ?array $stream + * @var ?array $stream */ #[\Speakeasy\Serializer\Annotation\SerializedName('Stream')] - #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibraryStream>|null')] + #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllStream>|null')] #[\Speakeasy\Serializer\Annotation\SkipWhenNull] public ?array $stream = null; /** * - * @var ?GetAllMediaLibraryHasThumbnail $hasThumbnail + * @var ?GetLibrarySectionsAllHasThumbnail $hasThumbnail */ #[\Speakeasy\Serializer\Annotation\SerializedName('hasThumbnail')] - #[\Speakeasy\Serializer\Annotation\Type('\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibraryHasThumbnail|null')] + #[\Speakeasy\Serializer\Annotation\Type('\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllHasThumbnail|null')] #[\Speakeasy\Serializer\Annotation\SkipWhenNull] - public ?GetAllMediaLibraryHasThumbnail $hasThumbnail = null; + public ?GetLibrarySectionsAllHasThumbnail $hasThumbnail = null; /** * @param int $id @@ -164,12 +164,12 @@ class GetAllMediaLibraryPart * @param ?string $videoProfile * @param ?string $audioProfile * @param ?bool $has64bitOffsets - * @param GetAllMediaLibraryOptimizedForStreaming1|bool|null $optimizedForStreaming - * @param ?GetAllMediaLibraryHasThumbnail $hasThumbnail - * @param ?array $stream + * @param GetLibrarySectionsAllOptimizedForStreaming1|bool|null $optimizedForStreaming + * @param ?GetLibrarySectionsAllHasThumbnail $hasThumbnail + * @param ?array $stream * @phpstan-pure */ - public function __construct(int $id, string $key, string $file, int $size, ?bool $accessible = null, ?bool $exists = null, ?string $indexes = null, ?int $duration = null, ?int $packetLength = null, ?string $container = null, ?string $videoProfile = null, ?string $audioProfile = null, ?bool $has64bitOffsets = null, GetAllMediaLibraryOptimizedForStreaming1|bool|null $optimizedForStreaming = null, ?array $stream = null, ?GetAllMediaLibraryHasThumbnail $hasThumbnail = GetAllMediaLibraryHasThumbnail::False) + public function __construct(int $id, string $key, string $file, int $size, ?bool $accessible = null, ?bool $exists = null, ?string $indexes = null, ?int $duration = null, ?int $packetLength = null, ?string $container = null, ?string $videoProfile = null, ?string $audioProfile = null, ?bool $has64bitOffsets = null, GetLibrarySectionsAllOptimizedForStreaming1|bool|null $optimizedForStreaming = null, ?array $stream = null, ?GetLibrarySectionsAllHasThumbnail $hasThumbnail = GetLibrarySectionsAllHasThumbnail::False) { $this->id = $id; $this->key = $key; diff --git a/src/Models/Operations/GetAllMediaLibraryQueryParamIncludeMeta.php b/src/Models/Operations/GetLibrarySectionsAllQueryParamIncludeMeta.php similarity index 83% rename from src/Models/Operations/GetAllMediaLibraryQueryParamIncludeMeta.php rename to src/Models/Operations/GetLibrarySectionsAllQueryParamIncludeMeta.php index cffdece..b128db6 100644 --- a/src/Models/Operations/GetAllMediaLibraryQueryParamIncludeMeta.php +++ b/src/Models/Operations/GetLibrarySectionsAllQueryParamIncludeMeta.php @@ -14,7 +14,7 @@ namespace LukeHagar\Plex_API\Models\Operations; * * */ -enum GetAllMediaLibraryQueryParamIncludeMeta: int +enum GetLibrarySectionsAllQueryParamIncludeMeta: int { case Disable = 0; case Enable = 1; diff --git a/src/Models/Operations/GetAllMediaLibraryQueryParamType.php b/src/Models/Operations/GetLibrarySectionsAllQueryParamType.php similarity index 75% rename from src/Models/Operations/GetAllMediaLibraryQueryParamType.php rename to src/Models/Operations/GetLibrarySectionsAllQueryParamType.php index 6abbca3..27cb006 100644 --- a/src/Models/Operations/GetAllMediaLibraryQueryParamType.php +++ b/src/Models/Operations/GetLibrarySectionsAllQueryParamType.php @@ -19,13 +19,15 @@ namespace LukeHagar\Plex_API\Models\Operations; * E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries * */ -enum GetAllMediaLibraryQueryParamType: int +enum GetLibrarySectionsAllQueryParamType: int { case Movie = 1; case TvShow = 2; case Season = 3; case Episode = 4; - case Audio = 8; - case Album = 9; - case Track = 10; + case Artist = 5; + case Album = 6; + case Track = 7; + case PhotoAlbum = 8; + case Photo = 9; } diff --git a/src/Models/Operations/GetAllMediaLibraryRequest.php b/src/Models/Operations/GetLibrarySectionsAllRequest.php similarity index 78% rename from src/Models/Operations/GetAllMediaLibraryRequest.php rename to src/Models/Operations/GetLibrarySectionsAllRequest.php index 277911b..259885f 100644 --- a/src/Models/Operations/GetAllMediaLibraryRequest.php +++ b/src/Models/Operations/GetLibrarySectionsAllRequest.php @@ -9,7 +9,7 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Operations; use LukeHagar\Plex_API\Utils\SpeakeasyMetadata; -class GetAllMediaLibraryRequest +class GetLibrarySectionsAllRequest { /** * The unique key of the Plex library. @@ -32,20 +32,20 @@ class GetAllMediaLibraryRequest * E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries * * - * @var GetAllMediaLibraryQueryParamType $type + * @var GetLibrarySectionsAllQueryParamType $type */ #[SpeakeasyMetadata('queryParam:style=form,explode=true,name=type')] - public GetAllMediaLibraryQueryParamType $type; + public GetLibrarySectionsAllQueryParamType $type; /** * Adds the Meta object to the response * * * - * @var ?GetAllMediaLibraryQueryParamIncludeMeta $includeMeta + * @var ?GetLibrarySectionsAllQueryParamIncludeMeta $includeMeta */ #[SpeakeasyMetadata('queryParam:style=form,explode=true,name=includeMeta')] - public ?GetAllMediaLibraryQueryParamIncludeMeta $includeMeta = null; + public ?GetLibrarySectionsAllQueryParamIncludeMeta $includeMeta = null; /** * Adds the Guid object to the response @@ -104,8 +104,8 @@ class GetAllMediaLibraryRequest /** * @param int $sectionKey - * @param GetAllMediaLibraryQueryParamType $type - * @param ?GetAllMediaLibraryQueryParamIncludeMeta $includeMeta + * @param GetLibrarySectionsAllQueryParamType $type + * @param ?GetLibrarySectionsAllQueryParamIncludeMeta $includeMeta * @param ?QueryParamIncludeGuids $includeGuids * @param ?IncludeAdvanced $includeAdvanced * @param ?QueryParamIncludeCollections $includeCollections @@ -114,7 +114,7 @@ class GetAllMediaLibraryRequest * @param ?int $xPlexContainerSize * @phpstan-pure */ - public function __construct(int $sectionKey, GetAllMediaLibraryQueryParamType $type, ?GetAllMediaLibraryQueryParamIncludeMeta $includeMeta = GetAllMediaLibraryQueryParamIncludeMeta::Disable, ?QueryParamIncludeGuids $includeGuids = QueryParamIncludeGuids::Disable, ?IncludeAdvanced $includeAdvanced = IncludeAdvanced::Disable, ?QueryParamIncludeCollections $includeCollections = QueryParamIncludeCollections::Disable, ?QueryParamIncludeExternalMedia $includeExternalMedia = QueryParamIncludeExternalMedia::Disable, ?int $xPlexContainerStart = 0, ?int $xPlexContainerSize = 50) + public function __construct(int $sectionKey, GetLibrarySectionsAllQueryParamType $type, ?GetLibrarySectionsAllQueryParamIncludeMeta $includeMeta = GetLibrarySectionsAllQueryParamIncludeMeta::Disable, ?QueryParamIncludeGuids $includeGuids = QueryParamIncludeGuids::Disable, ?IncludeAdvanced $includeAdvanced = IncludeAdvanced::Disable, ?QueryParamIncludeCollections $includeCollections = QueryParamIncludeCollections::Disable, ?QueryParamIncludeExternalMedia $includeExternalMedia = QueryParamIncludeExternalMedia::Disable, ?int $xPlexContainerStart = 0, ?int $xPlexContainerSize = 50) { $this->sectionKey = $sectionKey; $this->type = $type; diff --git a/src/Models/Operations/GetAllMediaLibraryResponse.php b/src/Models/Operations/GetLibrarySectionsAllResponse.php similarity index 78% rename from src/Models/Operations/GetAllMediaLibraryResponse.php rename to src/Models/Operations/GetLibrarySectionsAllResponse.php index aed5562..2bcd37a 100644 --- a/src/Models/Operations/GetAllMediaLibraryResponse.php +++ b/src/Models/Operations/GetLibrarySectionsAllResponse.php @@ -9,7 +9,7 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Operations; -class GetAllMediaLibraryResponse +class GetLibrarySectionsAllResponse { /** * HTTP response content type for this operation @@ -35,18 +35,18 @@ class GetAllMediaLibraryResponse /** * Successful response containing media container data. * - * @var ?GetAllMediaLibraryResponseBody $object + * @var ?GetLibrarySectionsAllResponseBody $object */ - public ?GetAllMediaLibraryResponseBody $object = null; + public ?GetLibrarySectionsAllResponseBody $object = null; /** * @param string $contentType * @param int $statusCode * @param \Psr\Http\Message\ResponseInterface $rawResponse - * @param ?GetAllMediaLibraryResponseBody $object + * @param ?GetLibrarySectionsAllResponseBody $object * @phpstan-pure */ - public function __construct(string $contentType, int $statusCode, \Psr\Http\Message\ResponseInterface $rawResponse, ?GetAllMediaLibraryResponseBody $object = null) + public function __construct(string $contentType, int $statusCode, \Psr\Http\Message\ResponseInterface $rawResponse, ?GetLibrarySectionsAllResponseBody $object = null) { $this->contentType = $contentType; $this->statusCode = $statusCode; diff --git a/src/Models/Operations/GetLibrarySectionsAllResponseBody.php b/src/Models/Operations/GetLibrarySectionsAllResponseBody.php new file mode 100644 index 0000000..84aded8 --- /dev/null +++ b/src/Models/Operations/GetLibrarySectionsAllResponseBody.php @@ -0,0 +1,32 @@ +mediaContainer = $mediaContainer; + } +} \ No newline at end of file diff --git a/src/Models/Operations/GetAllMediaLibraryRole.php b/src/Models/Operations/GetLibrarySectionsAllRole.php similarity index 94% rename from src/Models/Operations/GetAllMediaLibraryRole.php rename to src/Models/Operations/GetLibrarySectionsAllRole.php index c21b5b8..f515ad6 100644 --- a/src/Models/Operations/GetAllMediaLibraryRole.php +++ b/src/Models/Operations/GetLibrarySectionsAllRole.php @@ -9,7 +9,7 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Operations; -class GetAllMediaLibraryRole +class GetLibrarySectionsAllRole { /** * The display tag for the actor (typically the actor's name). diff --git a/src/Models/Operations/GetAllMediaLibrarySort.php b/src/Models/Operations/GetLibrarySectionsAllSort.php similarity index 75% rename from src/Models/Operations/GetAllMediaLibrarySort.php rename to src/Models/Operations/GetLibrarySectionsAllSort.php index 8e42bea..b39fead 100644 --- a/src/Models/Operations/GetAllMediaLibrarySort.php +++ b/src/Models/Operations/GetLibrarySectionsAllSort.php @@ -9,7 +9,7 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Operations; -class GetAllMediaLibrarySort +class GetLibrarySectionsAllSort { /** * @@ -62,37 +62,37 @@ class GetAllMediaLibrarySort * * * - * @var ?GetAllMediaLibraryActiveDirection $activeDirection + * @var ?GetLibrarySectionsAllActiveDirection $activeDirection */ #[\Speakeasy\Serializer\Annotation\SerializedName('activeDirection')] - #[\Speakeasy\Serializer\Annotation\Type('\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibraryActiveDirection|null')] + #[\Speakeasy\Serializer\Annotation\Type('\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllActiveDirection|null')] #[\Speakeasy\Serializer\Annotation\SkipWhenNull] - public ?GetAllMediaLibraryActiveDirection $activeDirection = null; + public ?GetLibrarySectionsAllActiveDirection $activeDirection = null; /** * The direction of the sort. Can be either `asc` or `desc`. * * * - * @var ?GetAllMediaLibraryDefaultDirection $defaultDirection + * @var ?GetLibrarySectionsAllDefaultDirection $defaultDirection */ #[\Speakeasy\Serializer\Annotation\SerializedName('defaultDirection')] - #[\Speakeasy\Serializer\Annotation\Type('\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibraryDefaultDirection|null')] + #[\Speakeasy\Serializer\Annotation\Type('\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllDefaultDirection|null')] #[\Speakeasy\Serializer\Annotation\SkipWhenNull] - public ?GetAllMediaLibraryDefaultDirection $defaultDirection = null; + public ?GetLibrarySectionsAllDefaultDirection $defaultDirection = null; /** * @param string $key * @param string $title * @param ?string $default * @param ?bool $active - * @param ?GetAllMediaLibraryActiveDirection $activeDirection - * @param ?GetAllMediaLibraryDefaultDirection $defaultDirection + * @param ?GetLibrarySectionsAllActiveDirection $activeDirection + * @param ?GetLibrarySectionsAllDefaultDirection $defaultDirection * @param ?string $descKey * @param ?string $firstCharacterKey * @phpstan-pure */ - public function __construct(string $key, string $title, ?string $default = null, ?bool $active = null, ?string $descKey = null, ?string $firstCharacterKey = null, ?GetAllMediaLibraryActiveDirection $activeDirection = GetAllMediaLibraryActiveDirection::Ascending, ?GetAllMediaLibraryDefaultDirection $defaultDirection = GetAllMediaLibraryDefaultDirection::Ascending) + public function __construct(string $key, string $title, ?string $default = null, ?bool $active = null, ?string $descKey = null, ?string $firstCharacterKey = null, ?GetLibrarySectionsAllActiveDirection $activeDirection = GetLibrarySectionsAllActiveDirection::Ascending, ?GetLibrarySectionsAllDefaultDirection $defaultDirection = GetLibrarySectionsAllDefaultDirection::Ascending) { $this->key = $key; $this->title = $title; diff --git a/src/Models/Operations/GetAllMediaLibraryStream.php b/src/Models/Operations/GetLibrarySectionsAllStream.php similarity index 90% rename from src/Models/Operations/GetAllMediaLibraryStream.php rename to src/Models/Operations/GetLibrarySectionsAllStream.php index b46c0ca..59ae200 100644 --- a/src/Models/Operations/GetAllMediaLibraryStream.php +++ b/src/Models/Operations/GetLibrarySectionsAllStream.php @@ -9,7 +9,7 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Operations; -class GetAllMediaLibraryStream +class GetLibrarySectionsAllStream { /** * Unique stream identifier. @@ -27,11 +27,11 @@ class GetAllMediaLibraryStream * - 3 = subtitle * * - * @var GetAllMediaLibraryStreamType $streamType + * @var GetLibrarySectionsAllStreamType $streamType */ #[\Speakeasy\Serializer\Annotation\SerializedName('streamType')] - #[\Speakeasy\Serializer\Annotation\Type('\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibraryStreamType')] - public GetAllMediaLibraryStreamType $streamType; + #[\Speakeasy\Serializer\Annotation\Type('\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllStreamType')] + public GetLibrarySectionsAllStreamType $streamType; /** * Codec used by the stream. @@ -468,7 +468,7 @@ class GetAllMediaLibraryStream /** * @param int $id - * @param GetAllMediaLibraryStreamType $streamType + * @param GetLibrarySectionsAllStreamType $streamType * @param string $codec * @param string $displayTitle * @param string $extendedDisplayTitle @@ -520,7 +520,7 @@ class GetAllMediaLibraryStream * @param ?string $title * @phpstan-pure */ - public function __construct(int $id, GetAllMediaLibraryStreamType $streamType, string $codec, string $displayTitle, string $extendedDisplayTitle, ?string $format = null, ?bool $default = null, ?int $index = null, ?int $bitrate = null, ?string $language = null, ?string $languageTag = null, ?string $languageCode = null, ?bool $headerCompression = null, ?int $doviblCompatID = null, ?bool $doviblPresent = null, ?bool $dovielPresent = null, ?int $doviLevel = null, ?bool $doviPresent = null, ?int $doviProfile = null, ?bool $dovirpuPresent = null, ?string $doviVersion = null, ?int $bitDepth = null, ?string $chromaLocation = null, ?string $chromaSubsampling = null, ?int $codedHeight = null, ?int $codedWidth = null, ?bool $closedCaptions = null, ?string $colorPrimaries = null, ?string $colorRange = null, ?string $colorSpace = null, ?string $colorTrc = null, ?float $frameRate = null, ?string $key = null, ?int $height = null, ?int $level = null, ?bool $original = null, ?bool $hasScalingMatrix = null, ?string $profile = null, ?string $scanType = null, ?string $embeddedInVideo = null, ?int $refFrames = null, ?int $width = null, ?bool $selected = null, ?bool $forced = null, ?int $channels = null, ?string $audioChannelLayout = null, ?int $samplingRate = null, ?bool $canAutoSync = null, ?bool $hearingImpaired = null, ?bool $dub = null, ?string $title = null) + public function __construct(int $id, GetLibrarySectionsAllStreamType $streamType, string $codec, string $displayTitle, string $extendedDisplayTitle, ?string $format = null, ?bool $default = null, ?int $index = null, ?int $bitrate = null, ?string $language = null, ?string $languageTag = null, ?string $languageCode = null, ?bool $headerCompression = null, ?int $doviblCompatID = null, ?bool $doviblPresent = null, ?bool $dovielPresent = null, ?int $doviLevel = null, ?bool $doviPresent = null, ?int $doviProfile = null, ?bool $dovirpuPresent = null, ?string $doviVersion = null, ?int $bitDepth = null, ?string $chromaLocation = null, ?string $chromaSubsampling = null, ?int $codedHeight = null, ?int $codedWidth = null, ?bool $closedCaptions = null, ?string $colorPrimaries = null, ?string $colorRange = null, ?string $colorSpace = null, ?string $colorTrc = null, ?float $frameRate = null, ?string $key = null, ?int $height = null, ?int $level = null, ?bool $original = null, ?bool $hasScalingMatrix = null, ?string $profile = null, ?string $scanType = null, ?string $embeddedInVideo = null, ?int $refFrames = null, ?int $width = null, ?bool $selected = null, ?bool $forced = null, ?int $channels = null, ?string $audioChannelLayout = null, ?int $samplingRate = null, ?bool $canAutoSync = null, ?bool $hearingImpaired = null, ?bool $dub = null, ?string $title = null) { $this->id = $id; $this->streamType = $streamType; diff --git a/src/Models/Operations/GetAllMediaLibraryStreamType.php b/src/Models/Operations/GetLibrarySectionsAllStreamType.php similarity index 88% rename from src/Models/Operations/GetAllMediaLibraryStreamType.php rename to src/Models/Operations/GetLibrarySectionsAllStreamType.php index 9bf795d..e8a6c02 100644 --- a/src/Models/Operations/GetAllMediaLibraryStreamType.php +++ b/src/Models/Operations/GetLibrarySectionsAllStreamType.php @@ -17,7 +17,7 @@ namespace LukeHagar\Plex_API\Models\Operations; * - 3 = subtitle * */ -enum GetAllMediaLibraryStreamType: int +enum GetLibrarySectionsAllStreamType: int { case Video = 1; case Audio = 2; diff --git a/src/Models/Operations/GetAllMediaLibraryType.php b/src/Models/Operations/GetLibrarySectionsAllType.php similarity index 80% rename from src/Models/Operations/GetAllMediaLibraryType.php rename to src/Models/Operations/GetLibrarySectionsAllType.php index 458a9f0..2bbf93e 100644 --- a/src/Models/Operations/GetAllMediaLibraryType.php +++ b/src/Models/Operations/GetLibrarySectionsAllType.php @@ -9,7 +9,7 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Operations; -class GetAllMediaLibraryType +class GetLibrarySectionsAllType { /** * @@ -50,30 +50,30 @@ class GetAllMediaLibraryType /** * $filter * - * @var ?array $filter + * @var ?array $filter */ #[\Speakeasy\Serializer\Annotation\SerializedName('Filter')] - #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibraryFilter>|null')] + #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllFilter>|null')] #[\Speakeasy\Serializer\Annotation\SkipWhenNull] public ?array $filter = null; /** * $sort * - * @var ?array $sort + * @var ?array $sort */ #[\Speakeasy\Serializer\Annotation\SerializedName('Sort')] - #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibrarySort>|null')] + #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllSort>|null')] #[\Speakeasy\Serializer\Annotation\SkipWhenNull] public ?array $sort = null; /** * $field * - * @var ?array $field + * @var ?array $field */ #[\Speakeasy\Serializer\Annotation\SerializedName('Field')] - #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetAllMediaLibraryField>|null')] + #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetLibrarySectionsAllField>|null')] #[\Speakeasy\Serializer\Annotation\SkipWhenNull] public ?array $field = null; @@ -83,9 +83,9 @@ class GetAllMediaLibraryType * @param string $title * @param bool $active * @param ?string $subtype - * @param ?array $filter - * @param ?array $sort - * @param ?array $field + * @param ?array $filter + * @param ?array $sort + * @param ?array $field * @phpstan-pure */ public function __construct(string $key, string $type, string $title, bool $active, ?string $subtype = null, ?array $filter = null, ?array $sort = null, ?array $field = null) diff --git a/src/Models/Operations/GetAllMediaLibraryUltraBlurColors.php b/src/Models/Operations/GetLibrarySectionsAllUltraBlurColors.php similarity index 96% rename from src/Models/Operations/GetAllMediaLibraryUltraBlurColors.php rename to src/Models/Operations/GetLibrarySectionsAllUltraBlurColors.php index 55f1482..19efb01 100644 --- a/src/Models/Operations/GetAllMediaLibraryUltraBlurColors.php +++ b/src/Models/Operations/GetLibrarySectionsAllUltraBlurColors.php @@ -9,7 +9,7 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Operations; -class GetAllMediaLibraryUltraBlurColors +class GetLibrarySectionsAllUltraBlurColors { /** * diff --git a/src/Models/Operations/GetAllMediaLibraryWriter.php b/src/Models/Operations/GetLibrarySectionsAllWriter.php similarity index 93% rename from src/Models/Operations/GetAllMediaLibraryWriter.php rename to src/Models/Operations/GetLibrarySectionsAllWriter.php index 149af97..60ddc3b 100644 --- a/src/Models/Operations/GetAllMediaLibraryWriter.php +++ b/src/Models/Operations/GetLibrarySectionsAllWriter.php @@ -9,7 +9,7 @@ declare(strict_types=1); namespace LukeHagar\Plex_API\Models\Operations; -class GetAllMediaLibraryWriter +class GetLibrarySectionsAllWriter { /** * The role of Writer diff --git a/src/Models/Operations/GetMediaMetaDataCountry.php b/src/Models/Operations/GetMediaMetaDataCountry.php index fea7207..bed00ca 100644 --- a/src/Models/Operations/GetMediaMetaDataCountry.php +++ b/src/Models/Operations/GetMediaMetaDataCountry.php @@ -13,6 +13,10 @@ namespace LukeHagar\Plex_API\Models\Operations; class GetMediaMetaDataCountry { /** + * The unique identifier for the country. + * + * NOTE: This is different for each Plex server and is not globally unique. + * * * @var int $id */ @@ -29,19 +33,18 @@ class GetMediaMetaDataCountry /** * - * @var ?string $filter + * @var string $filter */ #[\Speakeasy\Serializer\Annotation\SerializedName('filter')] - #[\Speakeasy\Serializer\Annotation\SkipWhenNull] - public ?string $filter = null; + public string $filter; /** * @param int $id * @param string $tag - * @param ?string $filter + * @param string $filter * @phpstan-pure */ - public function __construct(int $id, string $tag, ?string $filter = null) + public function __construct(int $id, string $tag, string $filter) { $this->id = $id; $this->tag = $tag; diff --git a/src/Models/Operations/GetMediaMetaDataDirector.php b/src/Models/Operations/GetMediaMetaDataDirector.php index f657bed..96d0a77 100644 --- a/src/Models/Operations/GetMediaMetaDataDirector.php +++ b/src/Models/Operations/GetMediaMetaDataDirector.php @@ -36,16 +36,15 @@ class GetMediaMetaDataDirector public string $filter; /** - * 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. * - * @var ?string $tagKey + * @var string $tagKey */ #[\Speakeasy\Serializer\Annotation\SerializedName('tagKey')] - #[\Speakeasy\Serializer\Annotation\SkipWhenNull] - public ?string $tagKey = null; + public string $tagKey; /** - * The URL of the thumbnail image for the director. + * The absolute URL of the thumbnail image for the director. * * @var ?string $thumb */ @@ -57,11 +56,11 @@ class GetMediaMetaDataDirector * @param int $id * @param string $tag * @param string $filter - * @param ?string $tagKey + * @param string $tagKey * @param ?string $thumb * @phpstan-pure */ - public function __construct(int $id, string $tag, string $filter, ?string $tagKey = null, ?string $thumb = null) + public function __construct(int $id, string $tag, string $filter, string $tagKey, ?string $thumb = null) { $this->id = $id; $this->tag = $tag; diff --git a/src/Models/Operations/GetMediaMetaDataGenre.php b/src/Models/Operations/GetMediaMetaDataGenre.php index 50289e1..6d6ce4f 100644 --- a/src/Models/Operations/GetMediaMetaDataGenre.php +++ b/src/Models/Operations/GetMediaMetaDataGenre.php @@ -13,6 +13,10 @@ namespace LukeHagar\Plex_API\Models\Operations; class GetMediaMetaDataGenre { /** + * The unique identifier for the genre. + * + * NOTE: This is different for each Plex server and is not globally unique. + * * * @var int $id */ diff --git a/src/Models/Operations/GetMediaMetaDataGuids.php b/src/Models/Operations/GetMediaMetaDataGuids.php index e5d6ee7..8e25026 100644 --- a/src/Models/Operations/GetMediaMetaDataGuids.php +++ b/src/Models/Operations/GetMediaMetaDataGuids.php @@ -12,7 +12,9 @@ namespace LukeHagar\Plex_API\Models\Operations; class GetMediaMetaDataGuids { /** - * The GUID value. + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + * + * * * @var string $id */ diff --git a/src/Models/Operations/GetMediaMetaDataMetadata.php b/src/Models/Operations/GetMediaMetaDataMetadata.php index 9bea7f9..3a423c4 100644 --- a/src/Models/Operations/GetMediaMetaDataMetadata.php +++ b/src/Models/Operations/GetMediaMetaDataMetadata.php @@ -524,6 +524,16 @@ class GetMediaMetaDataMetadata #[\Speakeasy\Serializer\Annotation\SkipWhenNull] public ?GetMediaMetaDataUltraBlurColors $ultraBlurColors = null; + /** + * $guids + * + * @var ?array $guids + */ + #[\Speakeasy\Serializer\Annotation\SerializedName('Guid')] + #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetMediaMetaDataGuids>|null')] + #[\Speakeasy\Serializer\Annotation\SkipWhenNull] + public ?array $guids = null; + /** * $media * @@ -594,16 +604,6 @@ class GetMediaMetaDataMetadata #[\Speakeasy\Serializer\Annotation\SkipWhenNull] public ?array $role = null; - /** - * $guids - * - * @var ?array $guids - */ - #[\Speakeasy\Serializer\Annotation\SerializedName('Guid')] - #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\GetMediaMetaDataGuids>|null')] - #[\Speakeasy\Serializer\Annotation\SkipWhenNull] - public ?array $guids = null; - /** * $ratings * @@ -723,6 +723,7 @@ class GetMediaMetaDataMetadata * @param ?float $userRating * @param ?array $image * @param ?GetMediaMetaDataUltraBlurColors $ultraBlurColors + * @param ?array $guids * @param ?array $media * @param ?array $genre * @param ?array $country @@ -730,7 +731,6 @@ class GetMediaMetaDataMetadata * @param ?array $writer * @param ?array $producer * @param ?array $role - * @param ?array $guids * @param ?array $ratings * @param ?array $similar * @param ?array $location @@ -739,7 +739,7 @@ class GetMediaMetaDataMetadata * @param ?Extras $extras * @phpstan-pure */ - public function __construct(string $ratingKey, string $key, string $guid, string $slug, GetMediaMetaDataType $type, string $title, string $titleSort, string $summary, float $rating, float $audienceRating, string $tagline, string $thumb, string $art, string $theme, int $index, int $childCount, int $seasonCount, int $duration, LocalDate $originallyAvailableAt, int $addedAt, int $librarySectionID, string $librarySectionTitle, string $librarySectionKey, ?string $studio = null, ?string $contentRating = null, ?int $year = null, ?int $leafCount = null, ?int $viewedLeafCount = null, ?int $updatedAt = null, ?string $audienceRatingImage = null, ?string $chapterSource = null, ?string $primaryExtraKey = null, ?string $originalTitle = null, ?string $parentRatingKey = null, ?string $grandparentRatingKey = null, ?string $parentGuid = null, ?string $grandparentGuid = null, ?string $grandparentSlug = null, ?string $grandparentKey = null, ?string $parentKey = null, ?string $grandparentTitle = null, ?string $grandparentThumb = null, ?string $grandparentTheme = null, ?string $grandparentArt = null, ?string $parentTitle = null, ?int $parentIndex = null, ?string $parentThumb = null, ?string $ratingImage = null, ?int $viewCount = null, ?int $viewOffset = null, ?int $skipCount = null, ?string $subtype = null, ?int $lastRatedAt = null, ?string $createdAtAccuracy = null, ?string $createdAtTZOffset = null, ?int $lastViewedAt = null, ?float $userRating = null, ?array $image = null, ?GetMediaMetaDataUltraBlurColors $ultraBlurColors = null, ?array $media = null, ?array $genre = null, ?array $country = null, ?array $director = null, ?array $writer = null, ?array $producer = null, ?array $role = null, ?array $guids = null, ?array $ratings = null, ?array $similar = null, ?array $location = null, ?array $chapter = null, ?array $marker = null, ?Extras $extras = null) + public function __construct(string $ratingKey, string $key, string $guid, string $slug, GetMediaMetaDataType $type, string $title, string $titleSort, string $summary, float $rating, float $audienceRating, string $tagline, string $thumb, string $art, string $theme, int $index, int $childCount, int $seasonCount, int $duration, LocalDate $originallyAvailableAt, int $addedAt, int $librarySectionID, string $librarySectionTitle, string $librarySectionKey, ?string $studio = null, ?string $contentRating = null, ?int $year = null, ?int $leafCount = null, ?int $viewedLeafCount = null, ?int $updatedAt = null, ?string $audienceRatingImage = null, ?string $chapterSource = null, ?string $primaryExtraKey = null, ?string $originalTitle = null, ?string $parentRatingKey = null, ?string $grandparentRatingKey = null, ?string $parentGuid = null, ?string $grandparentGuid = null, ?string $grandparentSlug = null, ?string $grandparentKey = null, ?string $parentKey = null, ?string $grandparentTitle = null, ?string $grandparentThumb = null, ?string $grandparentTheme = null, ?string $grandparentArt = null, ?string $parentTitle = null, ?int $parentIndex = null, ?string $parentThumb = null, ?string $ratingImage = null, ?int $viewCount = null, ?int $viewOffset = null, ?int $skipCount = null, ?string $subtype = null, ?int $lastRatedAt = null, ?string $createdAtAccuracy = null, ?string $createdAtTZOffset = null, ?int $lastViewedAt = null, ?float $userRating = null, ?array $image = null, ?GetMediaMetaDataUltraBlurColors $ultraBlurColors = null, ?array $guids = null, ?array $media = null, ?array $genre = null, ?array $country = null, ?array $director = null, ?array $writer = null, ?array $producer = null, ?array $role = null, ?array $ratings = null, ?array $similar = null, ?array $location = null, ?array $chapter = null, ?array $marker = null, ?Extras $extras = null) { $this->ratingKey = $ratingKey; $this->key = $key; @@ -800,6 +800,7 @@ class GetMediaMetaDataMetadata $this->userRating = $userRating; $this->image = $image; $this->ultraBlurColors = $ultraBlurColors; + $this->guids = $guids; $this->media = $media; $this->genre = $genre; $this->country = $country; @@ -807,7 +808,6 @@ class GetMediaMetaDataMetadata $this->writer = $writer; $this->producer = $producer; $this->role = $role; - $this->guids = $guids; $this->ratings = $ratings; $this->similar = $similar; $this->location = $location; diff --git a/src/Models/Operations/GetMediaMetaDataRequest.php b/src/Models/Operations/GetMediaMetaDataRequest.php index dbc8180..5505f10 100644 --- a/src/Models/Operations/GetMediaMetaDataRequest.php +++ b/src/Models/Operations/GetMediaMetaDataRequest.php @@ -12,12 +12,12 @@ use LukeHagar\Plex_API\Utils\SpeakeasyMetadata; class GetMediaMetaDataRequest { /** - * 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. * - * @var int $ratingKey + * @var string $ratingKey */ #[SpeakeasyMetadata('pathParam:style=simple,explode=false,name=ratingKey')] - public int $ratingKey; + public string $ratingKey; /** * Include concerts data if set to true. @@ -124,7 +124,7 @@ class GetMediaMetaDataRequest public ?bool $asyncRefreshLocalMediaAgent = null; /** - * @param int $ratingKey + * @param string $ratingKey * @param ?bool $includeConcerts * @param ?bool $includeExtras * @param ?bool $includeOnDeck @@ -140,7 +140,7 @@ class GetMediaMetaDataRequest * @param ?bool $asyncRefreshLocalMediaAgent * @phpstan-pure */ - public function __construct(int $ratingKey, ?bool $includeConcerts = null, ?bool $includeExtras = null, ?bool $includeOnDeck = null, ?bool $includePopularLeaves = null, ?bool $includePreferences = null, ?bool $includeReviews = null, ?bool $includeChapters = null, ?bool $includeStations = null, ?bool $includeExternalMedia = null, ?bool $asyncAugmentMetadata = null, ?bool $asyncCheckFiles = null, ?bool $asyncRefreshAnalysis = null, ?bool $asyncRefreshLocalMediaAgent = null) + public function __construct(string $ratingKey, ?bool $includeConcerts = null, ?bool $includeExtras = null, ?bool $includeOnDeck = null, ?bool $includePopularLeaves = null, ?bool $includePreferences = null, ?bool $includeReviews = null, ?bool $includeChapters = null, ?bool $includeStations = null, ?bool $includeExternalMedia = null, ?bool $asyncAugmentMetadata = null, ?bool $asyncCheckFiles = null, ?bool $asyncRefreshAnalysis = null, ?bool $asyncRefreshLocalMediaAgent = null) { $this->ratingKey = $ratingKey; $this->includeConcerts = $includeConcerts; diff --git a/src/Models/Operations/GetMediaMetaDataRole.php b/src/Models/Operations/GetMediaMetaDataRole.php index c902f6b..dda6bab 100644 --- a/src/Models/Operations/GetMediaMetaDataRole.php +++ b/src/Models/Operations/GetMediaMetaDataRole.php @@ -12,7 +12,10 @@ namespace LukeHagar\Plex_API\Models\Operations; class GetMediaMetaDataRole { /** - * 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. + * * * @var int $id */ @@ -35,6 +38,17 @@ class GetMediaMetaDataRole #[\Speakeasy\Serializer\Annotation\SerializedName('filter')] public string $filter; + /** + * 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. + * + * + * @var string $tagKey + */ + #[\Speakeasy\Serializer\Annotation\SerializedName('tagKey')] + public string $tagKey; + /** * The role played by the actor in the media item. * @@ -45,16 +59,7 @@ class GetMediaMetaDataRole public ?string $role = null; /** - * A unique key associated with the actor's tag, used for internal identification. - * - * @var ?string $tagKey - */ - #[\Speakeasy\Serializer\Annotation\SerializedName('tagKey')] - #[\Speakeasy\Serializer\Annotation\SkipWhenNull] - public ?string $tagKey = null; - - /** - * The URL of the thumbnail image for the actor. + * The absolute URL of the thumbnail image for the actor. * * @var ?string $thumb */ @@ -66,18 +71,18 @@ class GetMediaMetaDataRole * @param int $id * @param string $tag * @param string $filter + * @param string $tagKey * @param ?string $role - * @param ?string $tagKey * @param ?string $thumb * @phpstan-pure */ - public function __construct(int $id, string $tag, string $filter, ?string $role = null, ?string $tagKey = null, ?string $thumb = null) + public function __construct(int $id, string $tag, string $filter, string $tagKey, ?string $role = null, ?string $thumb = null) { $this->id = $id; $this->tag = $tag; $this->filter = $filter; - $this->role = $role; $this->tagKey = $tagKey; + $this->role = $role; $this->thumb = $thumb; } } \ No newline at end of file diff --git a/src/Models/Operations/GetMediaMetaDataType.php b/src/Models/Operations/GetMediaMetaDataType.php index 56ae237..794be07 100644 --- a/src/Models/Operations/GetMediaMetaDataType.php +++ b/src/Models/Operations/GetMediaMetaDataType.php @@ -10,7 +10,7 @@ namespace LukeHagar\Plex_API\Models\Operations; /** - * The type of media content + * The type of media content in the Plex library. This can represent videos, music, or photos. * * */ @@ -22,4 +22,8 @@ enum GetMediaMetaDataType: string case Episode = 'episode'; case Artist = 'artist'; case Album = 'album'; + case Track = 'track'; + case PhotoAlbum = 'photoalbum'; + case Photo = 'photo'; + case Collection = 'collection'; } diff --git a/src/Models/Operations/GetMediaMetaDataWriter.php b/src/Models/Operations/GetMediaMetaDataWriter.php index b954979..8373db0 100644 --- a/src/Models/Operations/GetMediaMetaDataWriter.php +++ b/src/Models/Operations/GetMediaMetaDataWriter.php @@ -36,7 +36,7 @@ class GetMediaMetaDataWriter public string $filter; /** - * The URL of the thumbnail image for the writer. + * The absolute URL of the thumbnail image for the writer. * * @var ?string $thumb */ @@ -45,7 +45,7 @@ class GetMediaMetaDataWriter public ?string $thumb = null; /** - * 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. * * @var ?string $tagKey */ diff --git a/src/Models/Operations/GetPlaylistContentsQueryParamType.php b/src/Models/Operations/GetPlaylistContentsQueryParamType.php index 1398db6..08a725e 100644 --- a/src/Models/Operations/GetPlaylistContentsQueryParamType.php +++ b/src/Models/Operations/GetPlaylistContentsQueryParamType.php @@ -25,7 +25,9 @@ enum GetPlaylistContentsQueryParamType: int case TvShow = 2; case Season = 3; case Episode = 4; - case Audio = 8; - case Album = 9; - case Track = 10; + case Artist = 5; + case Album = 6; + case Track = 7; + case PhotoAlbum = 8; + case Photo = 9; } diff --git a/src/Models/Operations/GetRecentlyAddedHubsType.php b/src/Models/Operations/GetRecentlyAddedHubsType.php index 0611d4f..5abe653 100644 --- a/src/Models/Operations/GetRecentlyAddedHubsType.php +++ b/src/Models/Operations/GetRecentlyAddedHubsType.php @@ -10,7 +10,7 @@ namespace LukeHagar\Plex_API\Models\Operations; /** - * The type of media content + * The type of media content in the Plex library. This can represent videos, music, or photos. * * */ @@ -22,4 +22,8 @@ enum GetRecentlyAddedHubsType: string case Episode = 'episode'; case Artist = 'artist'; case Album = 'album'; + case Track = 'track'; + case PhotoAlbum = 'photoalbum'; + case Photo = 'photo'; + case Collection = 'collection'; } diff --git a/src/Models/Operations/GetRecentlyAddedMetadata.php b/src/Models/Operations/GetRecentlyAddedMetadata.php index f2dff44..d27c5d5 100644 --- a/src/Models/Operations/GetRecentlyAddedMetadata.php +++ b/src/Models/Operations/GetRecentlyAddedMetadata.php @@ -558,6 +558,16 @@ class GetRecentlyAddedMetadata #[\Speakeasy\Serializer\Annotation\SkipWhenNull] public ?UltraBlurColors $ultraBlurColors = null; + /** + * $guids + * + * @var ?array $guids + */ + #[\Speakeasy\Serializer\Annotation\SerializedName('Guid')] + #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\Guids>|null')] + #[\Speakeasy\Serializer\Annotation\SkipWhenNull] + public ?array $guids = null; + /** * $media * @@ -658,16 +668,6 @@ class GetRecentlyAddedMetadata #[\Speakeasy\Serializer\Annotation\SkipWhenNull] public ?array $location = null; - /** - * $guids - * - * @var ?array $guids - */ - #[\Speakeasy\Serializer\Annotation\SerializedName('Guid')] - #[\Speakeasy\Serializer\Annotation\Type('array<\LukeHagar\Plex_API\Models\Operations\Guids>|null')] - #[\Speakeasy\Serializer\Annotation\SkipWhenNull] - public ?array $guids = null; - /** * $collection * @@ -742,6 +742,7 @@ class GetRecentlyAddedMetadata * @param ?int $year * @param ?array $image * @param ?UltraBlurColors $ultraBlurColors + * @param ?array $guids * @param ?array $media * @param ?array $genre * @param ?array $country @@ -752,11 +753,10 @@ class GetRecentlyAddedMetadata * @param ?array $rating1 * @param ?array $similar * @param ?array $location - * @param ?array $guids * @param ?array $collection * @phpstan-pure */ - public function __construct(int $addedAt, string $art, float $audienceRating, int $childCount, int $duration, string $guid, int $index, string $key, int $librarySectionID, string $librarySectionKey, string $librarySectionTitle, LocalDate $originallyAvailableAt, string $parentStudio, string $parentTheme, string $ratingKey, float $rating, int $seasonCount, string $slug, string $summary, string $tagline, string $theme, string $thumb, string $titleSort, string $title, GetRecentlyAddedHubsType $type, ?string $audienceRatingImage = null, ?string $chapterSource = null, ?string $contentRating = null, ?string $createdAtAccuracy = null, ?string $createdAtTZOffset = null, ?string $grandparentArt = null, ?string $grandparentGuid = null, ?string $grandparentKey = null, ?string $grandparentRatingKey = null, ?string $grandparentSlug = null, ?string $grandparentTheme = null, ?string $grandparentThumb = null, ?string $grandparentTitle = null, ?int $lastRatedAt = null, ?int $lastViewedAt = null, ?int $leafCount = null, ?string $originalTitle = null, ?string $parentGuid = null, ?int $parentIndex = null, ?string $parentKey = null, ?string $parentRatingKey = null, ?string $parentSlug = null, ?string $parentThumb = null, ?string $parentTitle = null, ?int $parentYear = null, ?string $primaryExtraKey = null, ?string $ratingImage = null, ?int $skipCount = null, ?string $studio = null, ?string $subtype = null, ?int $updatedAt = null, ?float $userRating = null, ?int $viewCount = null, ?int $viewOffset = null, ?int $viewedLeafCount = null, ?int $year = null, ?array $image = null, ?UltraBlurColors $ultraBlurColors = null, ?array $media = null, ?array $genre = null, ?array $country = null, ?array $director = null, ?array $writer = null, ?array $role = null, ?array $producer = null, ?array $rating1 = null, ?array $similar = null, ?array $location = null, ?array $guids = null, ?array $collection = null) + public function __construct(int $addedAt, string $art, float $audienceRating, int $childCount, int $duration, string $guid, int $index, string $key, int $librarySectionID, string $librarySectionKey, string $librarySectionTitle, LocalDate $originallyAvailableAt, string $parentStudio, string $parentTheme, string $ratingKey, float $rating, int $seasonCount, string $slug, string $summary, string $tagline, string $theme, string $thumb, string $titleSort, string $title, GetRecentlyAddedHubsType $type, ?string $audienceRatingImage = null, ?string $chapterSource = null, ?string $contentRating = null, ?string $createdAtAccuracy = null, ?string $createdAtTZOffset = null, ?string $grandparentArt = null, ?string $grandparentGuid = null, ?string $grandparentKey = null, ?string $grandparentRatingKey = null, ?string $grandparentSlug = null, ?string $grandparentTheme = null, ?string $grandparentThumb = null, ?string $grandparentTitle = null, ?int $lastRatedAt = null, ?int $lastViewedAt = null, ?int $leafCount = null, ?string $originalTitle = null, ?string $parentGuid = null, ?int $parentIndex = null, ?string $parentKey = null, ?string $parentRatingKey = null, ?string $parentSlug = null, ?string $parentThumb = null, ?string $parentTitle = null, ?int $parentYear = null, ?string $primaryExtraKey = null, ?string $ratingImage = null, ?int $skipCount = null, ?string $studio = null, ?string $subtype = null, ?int $updatedAt = null, ?float $userRating = null, ?int $viewCount = null, ?int $viewOffset = null, ?int $viewedLeafCount = null, ?int $year = null, ?array $image = null, ?UltraBlurColors $ultraBlurColors = null, ?array $guids = null, ?array $media = null, ?array $genre = null, ?array $country = null, ?array $director = null, ?array $writer = null, ?array $role = null, ?array $producer = null, ?array $rating1 = null, ?array $similar = null, ?array $location = null, ?array $collection = null) { $this->addedAt = $addedAt; $this->art = $art; @@ -821,6 +821,7 @@ class GetRecentlyAddedMetadata $this->year = $year; $this->image = $image; $this->ultraBlurColors = $ultraBlurColors; + $this->guids = $guids; $this->media = $media; $this->genre = $genre; $this->country = $country; @@ -831,7 +832,6 @@ class GetRecentlyAddedMetadata $this->rating1 = $rating1; $this->similar = $similar; $this->location = $location; - $this->guids = $guids; $this->collection = $collection; } } \ No newline at end of file diff --git a/src/Models/Operations/GetSearchAllLibrariesMetadata.php b/src/Models/Operations/GetSearchAllLibrariesMetadata.php index 105cece..ea52338 100644 --- a/src/Models/Operations/GetSearchAllLibrariesMetadata.php +++ b/src/Models/Operations/GetSearchAllLibrariesMetadata.php @@ -37,7 +37,7 @@ class GetSearchAllLibrariesMetadata public string $guid; /** - * The type of media content + * The type of media content in the Plex library. This can represent videos, music, or photos. * * * diff --git a/src/Models/Operations/GetSearchAllLibrariesType.php b/src/Models/Operations/GetSearchAllLibrariesType.php index ccff2a1..8041272 100644 --- a/src/Models/Operations/GetSearchAllLibrariesType.php +++ b/src/Models/Operations/GetSearchAllLibrariesType.php @@ -10,7 +10,7 @@ namespace LukeHagar\Plex_API\Models\Operations; /** - * The type of media content + * The type of media content in the Plex library. This can represent videos, music, or photos. * * */ @@ -22,4 +22,8 @@ enum GetSearchAllLibrariesType: string case Episode = 'episode'; case Artist = 'artist'; case Album = 'album'; + case Track = 'track'; + case PhotoAlbum = 'photoalbum'; + case Photo = 'photo'; + case Collection = 'collection'; } diff --git a/src/Models/Operations/GetSearchLibraryQueryParamType.php b/src/Models/Operations/GetSearchLibraryQueryParamType.php index fd30396..e9356a5 100644 --- a/src/Models/Operations/GetSearchLibraryQueryParamType.php +++ b/src/Models/Operations/GetSearchLibraryQueryParamType.php @@ -25,7 +25,9 @@ enum GetSearchLibraryQueryParamType: int case TvShow = 2; case Season = 3; case Episode = 4; - case Audio = 8; - case Album = 9; - case Track = 10; + case Artist = 5; + case Album = 6; + case Track = 7; + case PhotoAlbum = 8; + case Photo = 9; } diff --git a/src/Models/Operations/GetTopWatchedContentMediaContainer.php b/src/Models/Operations/GetTopWatchedContentMediaContainer.php index a760dfa..0528b28 100644 --- a/src/Models/Operations/GetTopWatchedContentMediaContainer.php +++ b/src/Models/Operations/GetTopWatchedContentMediaContainer.php @@ -12,44 +12,44 @@ namespace LukeHagar\Plex_API\Models\Operations; class GetTopWatchedContentMediaContainer { /** + * Number of media items returned in this response. * - * @var ?int $size + * @var int $size */ #[\Speakeasy\Serializer\Annotation\SerializedName('size')] - #[\Speakeasy\Serializer\Annotation\SkipWhenNull] - public ?int $size = null; + public int $size; /** + * Indicates whether syncing is allowed. * - * @var ?bool $allowSync + * @var bool $allowSync */ #[\Speakeasy\Serializer\Annotation\SerializedName('allowSync')] - #[\Speakeasy\Serializer\Annotation\SkipWhenNull] - public ?bool $allowSync = null; + public bool $allowSync; /** + * An plugin identifier for the media container. * - * @var ?string $identifier + * @var string $identifier */ #[\Speakeasy\Serializer\Annotation\SerializedName('identifier')] - #[\Speakeasy\Serializer\Annotation\SkipWhenNull] - public ?string $identifier = null; + public string $identifier; /** + * The prefix used for media tag resource paths. * - * @var ?string $mediaTagPrefix + * @var string $mediaTagPrefix */ #[\Speakeasy\Serializer\Annotation\SerializedName('mediaTagPrefix')] - #[\Speakeasy\Serializer\Annotation\SkipWhenNull] - public ?string $mediaTagPrefix = null; + public string $mediaTagPrefix; /** + * The version number for media tags. * - * @var ?int $mediaTagVersion + * @var int $mediaTagVersion */ #[\Speakeasy\Serializer\Annotation\SerializedName('mediaTagVersion')] - #[\Speakeasy\Serializer\Annotation\SkipWhenNull] - public ?int $mediaTagVersion = null; + public int $mediaTagVersion; /** * $metadata @@ -62,15 +62,15 @@ class GetTopWatchedContentMediaContainer public ?array $metadata = null; /** - * @param ?int $size - * @param ?bool $allowSync - * @param ?string $identifier - * @param ?string $mediaTagPrefix - * @param ?int $mediaTagVersion + * @param int $size + * @param bool $allowSync + * @param string $identifier + * @param string $mediaTagPrefix + * @param int $mediaTagVersion * @param ?array $metadata * @phpstan-pure */ - public function __construct(?int $size = null, ?bool $allowSync = null, ?string $identifier = null, ?string $mediaTagPrefix = null, ?int $mediaTagVersion = null, ?array $metadata = null) + public function __construct(int $size, bool $allowSync, string $identifier, string $mediaTagPrefix, int $mediaTagVersion, ?array $metadata = null) { $this->size = $size; $this->allowSync = $allowSync; diff --git a/src/Models/Operations/GetTopWatchedContentQueryParamIncludeGuids.php b/src/Models/Operations/GetTopWatchedContentQueryParamIncludeGuids.php new file mode 100644 index 0000000..23027ff --- /dev/null +++ b/src/Models/Operations/GetTopWatchedContentQueryParamIncludeGuids.php @@ -0,0 +1,21 @@ +type = $type; $this->includeGuids = $includeGuids; diff --git a/src/Models/Operations/Guids.php b/src/Models/Operations/Guids.php index a006761..defe5b4 100644 --- a/src/Models/Operations/Guids.php +++ b/src/Models/Operations/Guids.php @@ -12,21 +12,20 @@ namespace LukeHagar\Plex_API\Models\Operations; class Guids { /** - * 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:// * * * - * @var ?string $id + * @var string $id */ #[\Speakeasy\Serializer\Annotation\SerializedName('id')] - #[\Speakeasy\Serializer\Annotation\SkipWhenNull] - public ?string $id = null; + public string $id; /** - * @param ?string $id + * @param string $id * @phpstan-pure */ - public function __construct(?string $id = null) + public function __construct(string $id) { $this->id = $id; } diff --git a/src/Models/Operations/Producer.php b/src/Models/Operations/Producer.php index f8c52e9..95700b7 100644 --- a/src/Models/Operations/Producer.php +++ b/src/Models/Operations/Producer.php @@ -36,16 +36,17 @@ class Producer public string $tag; /** - * 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. * - * @var ?string $tagKey + * + * + * @var string $tagKey */ #[\Speakeasy\Serializer\Annotation\SerializedName('tagKey')] - #[\Speakeasy\Serializer\Annotation\SkipWhenNull] - public ?string $tagKey = null; + public string $tagKey; /** - * The URL of the thumbnail image for the actor. + * The absolute URL of the thumbnail image for the producer. * * @var ?string $thumb */ @@ -57,11 +58,11 @@ class Producer * @param int $id * @param string $filter * @param string $tag - * @param ?string $tagKey + * @param string $tagKey * @param ?string $thumb * @phpstan-pure */ - public function __construct(int $id, string $filter, string $tag, ?string $tagKey = null, ?string $thumb = null) + public function __construct(int $id, string $filter, string $tag, string $tagKey, ?string $thumb = null) { $this->id = $id; $this->filter = $filter; diff --git a/src/Models/Operations/QueryParamType.php b/src/Models/Operations/QueryParamType.php index fdf1019..c119d18 100644 --- a/src/Models/Operations/QueryParamType.php +++ b/src/Models/Operations/QueryParamType.php @@ -25,7 +25,9 @@ enum QueryParamType: int case TvShow = 2; case Season = 3; case Episode = 4; - case Audio = 8; - case Album = 9; - case Track = 10; + case Artist = 5; + case Album = 6; + case Track = 7; + case PhotoAlbum = 8; + case Photo = 9; } diff --git a/src/Models/Operations/Rating.php b/src/Models/Operations/Rating.php index a2af803..3f7c73b 100644 --- a/src/Models/Operations/Rating.php +++ b/src/Models/Operations/Rating.php @@ -13,6 +13,7 @@ namespace LukeHagar\Plex_API\Models\Operations; class Rating { /** + * The URL for the rating image, for example from IMDb. * * @var string $image */ diff --git a/src/Models/Operations/Role.php b/src/Models/Operations/Role.php index ab74e72..a9e3441 100644 --- a/src/Models/Operations/Role.php +++ b/src/Models/Operations/Role.php @@ -12,7 +12,10 @@ namespace LukeHagar\Plex_API\Models\Operations; class Role { /** - * 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. + * * * @var int $id */ @@ -36,13 +39,15 @@ class Role public string $tag; /** - * 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. * - * @var ?string $tagKey + * NOTE: This is globally unique across all Plex Servers. + * + * + * @var string $tagKey */ #[\Speakeasy\Serializer\Annotation\SerializedName('tagKey')] - #[\Speakeasy\Serializer\Annotation\SkipWhenNull] - public ?string $tagKey = null; + public string $tagKey; /** * The role played by the actor in the media item. @@ -54,7 +59,7 @@ class Role public ?string $role = null; /** - * The URL of the thumbnail image for the actor. + * The absolute URL of the thumbnail image for the actor. * * @var ?string $thumb */ @@ -66,12 +71,12 @@ class Role * @param int $id * @param string $filter * @param string $tag - * @param ?string $tagKey + * @param string $tagKey * @param ?string $role * @param ?string $thumb * @phpstan-pure */ - public function __construct(int $id, string $filter, string $tag, ?string $tagKey = null, ?string $role = null, ?string $thumb = null) + public function __construct(int $id, string $filter, string $tag, string $tagKey, ?string $role = null, ?string $thumb = null) { $this->id = $id; $this->filter = $filter; diff --git a/src/Models/Operations/Type.php b/src/Models/Operations/Type.php index 81927b1..7e33d27 100644 --- a/src/Models/Operations/Type.php +++ b/src/Models/Operations/Type.php @@ -25,7 +25,9 @@ enum Type: int case TvShow = 2; case Season = 3; case Episode = 4; - case Audio = 8; - case Album = 9; - case Track = 10; + case Artist = 5; + case Album = 6; + case Track = 7; + case PhotoAlbum = 8; + case Photo = 9; } diff --git a/src/Models/Operations/Writer.php b/src/Models/Operations/Writer.php index a8d8c52..8aa704f 100644 --- a/src/Models/Operations/Writer.php +++ b/src/Models/Operations/Writer.php @@ -36,7 +36,7 @@ class Writer public string $tag; /** - * 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. * * @var ?string $tagKey */ @@ -44,18 +44,29 @@ class Writer #[\Speakeasy\Serializer\Annotation\SkipWhenNull] public ?string $tagKey = null; + /** + * The absolute URL of the thumbnail image for the writer. + * + * @var ?string $thumb + */ + #[\Speakeasy\Serializer\Annotation\SerializedName('thumb')] + #[\Speakeasy\Serializer\Annotation\SkipWhenNull] + public ?string $thumb = null; + /** * @param int $id * @param string $filter * @param string $tag * @param ?string $tagKey + * @param ?string $thumb * @phpstan-pure */ - public function __construct(int $id, string $filter, string $tag, ?string $tagKey = null) + public function __construct(int $id, string $filter, string $tag, ?string $tagKey = null, ?string $thumb = null) { $this->id = $id; $this->filter = $filter; $this->tag = $tag; $this->tagKey = $tagKey; + $this->thumb = $thumb; } } \ No newline at end of file diff --git a/src/Playlists.php b/src/Playlists.php index 61122a9..43c1a74 100644 --- a/src/Playlists.php +++ b/src/Playlists.php @@ -64,7 +64,7 @@ class Playlists uri: $uri, playQueueID: $playQueueID, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/playlists/{playlistID}/items', Operations\AddPlaylistContentsRequest::class, $request); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -73,7 +73,7 @@ class Playlists $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('PUT', $url); - $hookContext = new HookContext($baseUrl, 'addPlaylistContents', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'addPlaylistContents', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -156,14 +156,14 @@ class Playlists $request = new Operations\ClearPlaylistContentsRequest( playlistID: $playlistID, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/playlists/{playlistID}/items', Operations\ClearPlaylistContentsRequest::class, $request); $urlOverride = null; $httpOptions = ['http_errors' => false]; $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('DELETE', $url); - $hookContext = new HookContext($baseUrl, 'clearPlaylistContents', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'clearPlaylistContents', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); @@ -235,7 +235,7 @@ class Playlists */ public function createPlaylist(Operations\CreatePlaylistRequest $request, ?Options $options = null): Operations\CreatePlaylistResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/playlists'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -244,7 +244,7 @@ class Playlists $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('POST', $url); - $hookContext = new HookContext($baseUrl, 'createPlaylist', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'createPlaylist', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -327,14 +327,14 @@ class Playlists $request = new Operations\DeletePlaylistRequest( playlistID: $playlistID, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/playlists/{playlistID}', Operations\DeletePlaylistRequest::class, $request); $urlOverride = null; $httpOptions = ['http_errors' => false]; $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('DELETE', $url); - $hookContext = new HookContext($baseUrl, 'deletePlaylist', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'deletePlaylist', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); @@ -408,14 +408,14 @@ class Playlists $request = new Operations\GetPlaylistRequest( playlistID: $playlistID, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/playlists/{playlistID}', Operations\GetPlaylistRequest::class, $request); $urlOverride = null; $httpOptions = ['http_errors' => false]; $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getPlaylist', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getPlaylist', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); @@ -502,7 +502,7 @@ class Playlists playlistID: $playlistID, type: $type, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/playlists/{playlistID}/items', Operations\GetPlaylistContentsRequest::class, $request); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -511,7 +511,7 @@ class Playlists $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getPlaylistContents', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getPlaylistContents', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -595,7 +595,7 @@ class Playlists playlistType: $playlistType, smart: $smart, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/playlists'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -604,7 +604,7 @@ class Playlists $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getPlaylists', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getPlaylists', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -691,7 +691,7 @@ class Playlists title: $title, summary: $summary, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/playlists/{playlistID}', Operations\UpdatePlaylistRequest::class, $request); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -700,7 +700,7 @@ class Playlists $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('PUT', $url); - $hookContext = new HookContext($baseUrl, 'updatePlaylist', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'updatePlaylist', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -778,7 +778,7 @@ class Playlists force: $force, sectionID: $sectionID, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/playlists/upload'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -787,7 +787,7 @@ class Playlists $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('POST', $url); - $hookContext = new HookContext($baseUrl, 'uploadPlaylist', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'uploadPlaylist', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); diff --git a/src/Plex.php b/src/Plex.php index 3d324e5..4e0b5db 100644 --- a/src/Plex.php +++ b/src/Plex.php @@ -106,7 +106,7 @@ class Plex $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'get-server-resources', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'get-server-resources', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -196,7 +196,7 @@ class Plex $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getCompanionsData', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getCompanionsData', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); @@ -285,7 +285,7 @@ class Plex $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getGeoData', [], null); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getGeoData', [], null); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); @@ -362,14 +362,14 @@ class Plex */ public function getHomeData(?Options $options = null): Operations\GetHomeDataResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/home'); $urlOverride = null; $httpOptions = ['http_errors' => false]; $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getHomeData', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getHomeData', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); @@ -465,7 +465,7 @@ class Plex $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('POST', $url); - $hookContext = new HookContext($baseUrl, 'getPin', [], null); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getPin', [], null); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -548,7 +548,7 @@ class Plex $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getTokenByPinId', [], null); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getTokenByPinId', [], null); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); @@ -637,7 +637,7 @@ class Plex $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getUserFriends', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getUserFriends', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); diff --git a/src/PlexAPI.php b/src/PlexAPI.php index 53809fa..739d629 100644 --- a/src/PlexAPI.php +++ b/src/PlexAPI.php @@ -43,7 +43,7 @@ class PlexAPI { public const SERVERS = [ /** The full address of your Plex Server */ - 'https://10.10.10.47:32400', + '{protocol}://{ip}:{port}', ]; /** @@ -235,7 +235,16 @@ class PlexAPI $this->sessions = new Sessions($this->sdkConfiguration); $this->updater = new Updater($this->sdkConfiguration); $this->users = new Users($this->sdkConfiguration); - $this->sdkConfiguration->client = $this->sdkConfiguration->initHooks($this->sdkConfiguration->client); + $this->initHooks(); } + + private function initHooks(): void + { + $preHooksUrl = $this->sdkConfiguration->getTemplatedServerUrl(); + $ret = $this->sdkConfiguration->hooks->sdkInit($preHooksUrl, $this->sdkConfiguration->client); + if ($preHooksUrl != $ret->url) { + $this->sdkConfiguration->serverUrl = $ret->url; + } + } } \ No newline at end of file diff --git a/src/PlexAPIBuilder.php b/src/PlexAPIBuilder.php index bd9a680..11b8c32 100644 --- a/src/PlexAPIBuilder.php +++ b/src/PlexAPIBuilder.php @@ -98,11 +98,11 @@ class PlexAPIBuilder */ public function setProtocol(ServerProtocol $protocol): PlexAPIBuilder { - foreach ($this->sdkConfig->serverDefaults as $idx => $serverDefaults) { - if (! array_key_exists('protocol', $serverDefaults)) { + foreach ($this->sdkConfig->serverVariables as $idx => $serverVariables) { + if (! array_key_exists('protocol', $serverVariables)) { continue; } - $this->sdkConfig->serverDefaults[$idx]['protocol'] = $protocol->value; + $this->sdkConfig->serverVariables[$idx]['protocol'] = $protocol->value; } return $this; @@ -116,11 +116,11 @@ class PlexAPIBuilder */ public function setIp(string $ip): PlexAPIBuilder { - foreach ($this->sdkConfig->serverDefaults as $idx => $serverDefaults) { - if (! array_key_exists('ip', $serverDefaults)) { + foreach ($this->sdkConfig->serverVariables as $idx => $serverVariables) { + if (! array_key_exists('ip', $serverVariables)) { continue; } - $this->sdkConfig->serverDefaults[$idx]['ip'] = $ip; + $this->sdkConfig->serverVariables[$idx]['ip'] = $ip; } return $this; @@ -134,11 +134,11 @@ class PlexAPIBuilder */ public function setPort(string $port): PlexAPIBuilder { - foreach ($this->sdkConfig->serverDefaults as $idx => $serverDefaults) { - if (! array_key_exists('port', $serverDefaults)) { + foreach ($this->sdkConfig->serverVariables as $idx => $serverVariables) { + if (! array_key_exists('port', $serverVariables)) { continue; } - $this->sdkConfig->serverDefaults[$idx]['port'] = $port; + $this->sdkConfig->serverVariables[$idx]['port'] = $port; } return $this; diff --git a/src/SDKConfiguration.php b/src/SDKConfiguration.php index f5cc236..f7ea680 100644 --- a/src/SDKConfiguration.php +++ b/src/SDKConfiguration.php @@ -21,7 +21,7 @@ class SDKConfiguration public int $serverIndex = 0; /** @var array> */ - public ?array $serverDefaults = [ + public ?array $serverVariables = [ [ 'protocol' => 'https', 'ip' => '10.10.10.47', @@ -33,11 +33,11 @@ class SDKConfiguration public string $openapiDocVersion = '0.0.3'; - public string $sdkVersion = '0.14.8'; + public string $sdkVersion = '0.14.9'; - public string $genVersion = '2.597.9'; + public string $genVersion = '2.620.2'; - public string $userAgent = 'speakeasy-sdk/php 0.14.8 2.597.9 0.0.3 lukehagar/plex-api'; + public string $userAgent = 'speakeasy-sdk/php 0.14.9 2.620.2 0.0.3 lukehagar/plex-api'; public ?RetryConfig $retryConfig = null; @@ -63,9 +63,9 @@ class SDKConfiguration /** * @return array */ - public function getServerDefaults(): ?array + public function getServerVariables(): ?array { - return $this->serverDefaults[$this->serverIndex]; + return $this->serverVariables[$this->serverIndex]; } public function hasSecurity(): bool { @@ -89,7 +89,7 @@ class SDKConfiguration $this->serverIndex = 0; } - return new Utils\ServerDetails(PlexAPI::SERVERS[$this->serverIndex], $this->serverDefaults[$this->serverIndex]); + return new Utils\ServerDetails(PlexAPI::SERVERS[$this->serverIndex], $this->serverVariables[$this->serverIndex]); } @@ -99,17 +99,6 @@ class SDKConfiguration return Utils\Utils::templateUrl($this->serverUrl.trim('/'), []); } - return Utils\Utils::templateUrl($this->getServerUrl(), $this->getServerDefaults()); - } - - public function initHooks(\GuzzleHttp\ClientInterface $client): \GuzzleHttp\ClientInterface - { - $preHooksUrl = $this->getTemplatedServerUrl(); - $ret = $this->hooks->sdkInit($preHooksUrl, $client); - if ($preHooksUrl != $ret->url) { - $this->serverUrl = $ret->url; - } - - return $ret->client; + return Utils\Utils::templateUrl($this->getServerUrl(), $this->getServerVariables()); } } diff --git a/src/Search.php b/src/Search.php index 7c5a98c..489ae3e 100644 --- a/src/Search.php +++ b/src/Search.php @@ -58,7 +58,7 @@ class Search $request = new Operations\GetSearchResultsRequest( query: $query, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/search'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -67,7 +67,7 @@ class Search $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getSearchResults', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getSearchResults', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -165,7 +165,7 @@ class Search sectionId: $sectionId, limit: $limit, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/hubs/search'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -174,7 +174,7 @@ class Search $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'performSearch', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'performSearch', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -255,7 +255,7 @@ class Search sectionId: $sectionId, limit: $limit, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/hubs/search/voice'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -264,7 +264,7 @@ class Search $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'performVoiceSearch', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'performVoiceSearch', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); diff --git a/src/Server.php b/src/Server.php index fc2ff2c..ad17cff 100644 --- a/src/Server.php +++ b/src/Server.php @@ -58,7 +58,7 @@ class Server $request = new Operations\GetMediaProvidersRequest( xPlexToken: $xPlexToken, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/media/providers'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -69,7 +69,7 @@ class Server $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'get-media-providers', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'get-media-providers', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); @@ -146,14 +146,14 @@ class Server */ public function getServerIdentity(?Options $options = null): Operations\GetServerIdentityResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/identity'); $urlOverride = null; $httpOptions = ['http_errors' => false]; $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'get-server-identity', [], null); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'get-server-identity', [], null); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); @@ -218,14 +218,14 @@ class Server */ public function getAvailableClients(?Options $options = null): Operations\GetAvailableClientsResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/clients'); $urlOverride = null; $httpOptions = ['http_errors' => false]; $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getAvailableClients', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getAvailableClients', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); @@ -302,14 +302,14 @@ class Server */ public function getDevices(?Options $options = null): Operations\GetDevicesResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/devices'); $urlOverride = null; $httpOptions = ['http_errors' => false]; $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getDevices', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getDevices', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); @@ -386,14 +386,14 @@ class Server */ public function getMyPlexAccount(?Options $options = null): Operations\GetMyPlexAccountResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/myplex/account'); $urlOverride = null; $httpOptions = ['http_errors' => false]; $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getMyPlexAccount', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getMyPlexAccount', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); @@ -472,7 +472,7 @@ class Server */ public function getResizedPhoto(Operations\GetResizedPhotoRequest $request, ?Options $options = null): Operations\GetResizedPhotoResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/photo/:/transcode'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -481,7 +481,7 @@ class Server $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getResizedPhoto', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getResizedPhoto', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -550,14 +550,14 @@ class Server */ public function getServerCapabilities(?Options $options = null): Operations\GetServerCapabilitiesResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/'); $urlOverride = null; $httpOptions = ['http_errors' => false]; $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getServerCapabilities', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getServerCapabilities', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); @@ -634,14 +634,14 @@ class Server */ public function getServerList(?Options $options = null): Operations\GetServerListResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/servers'); $urlOverride = null; $httpOptions = ['http_errors' => false]; $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getServerList', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getServerList', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); @@ -718,14 +718,14 @@ class Server */ public function getServerPreferences(?Options $options = null): Operations\GetServerPreferencesResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/:/prefs'); $urlOverride = null; $httpOptions = ['http_errors' => false]; $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getServerPreferences', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getServerPreferences', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); diff --git a/src/Sessions.php b/src/Sessions.php index 913b92c..596dab6 100644 --- a/src/Sessions.php +++ b/src/Sessions.php @@ -64,7 +64,7 @@ class Sessions filter: $filter, librarySectionID: $librarySectionID, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/status/sessions/history/all'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -73,7 +73,7 @@ class Sessions $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getSessionHistory', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getSessionHistory', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -151,14 +151,14 @@ class Sessions */ public function getSessions(?Options $options = null): Operations\GetSessionsResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/status/sessions'); $urlOverride = null; $httpOptions = ['http_errors' => false]; $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getSessions', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getSessions', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); @@ -235,14 +235,14 @@ class Sessions */ public function getTranscodeSessions(?Options $options = null): Operations\GetTranscodeSessionsResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/transcode/sessions'); $urlOverride = null; $httpOptions = ['http_errors' => false]; $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getTranscodeSessions', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getTranscodeSessions', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); @@ -323,14 +323,14 @@ class Sessions $request = new Operations\StopTranscodeSessionRequest( sessionKey: $sessionKey, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/transcode/sessions/{sessionKey}', Operations\StopTranscodeSessionRequest::class, $request); $urlOverride = null; $httpOptions = ['http_errors' => false]; $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('DELETE', $url); - $hookContext = new HookContext($baseUrl, 'stopTranscodeSession', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'stopTranscodeSession', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); diff --git a/src/Statistics.php b/src/Statistics.php index abfc744..a15572a 100644 --- a/src/Statistics.php +++ b/src/Statistics.php @@ -58,7 +58,7 @@ class Statistics $request = new Operations\GetBandwidthStatisticsRequest( timespan: $timespan, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/statistics/bandwidth'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -67,7 +67,7 @@ class Statistics $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getBandwidthStatistics', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getBandwidthStatistics', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -149,7 +149,7 @@ class Statistics $request = new Operations\GetResourcesStatisticsRequest( timespan: $timespan, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/statistics/resources'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -158,7 +158,7 @@ class Statistics $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getResourcesStatistics', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getResourcesStatistics', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -240,7 +240,7 @@ class Statistics $request = new Operations\GetStatisticsRequest( timespan: $timespan, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/statistics/media'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -249,7 +249,7 @@ class Statistics $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getStatistics', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getStatistics', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); diff --git a/src/Updater.php b/src/Updater.php index 74ab9c9..c3d57bd 100644 --- a/src/Updater.php +++ b/src/Updater.php @@ -61,7 +61,7 @@ class Updater tonight: $tonight, skip: $skip, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/updater/apply'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -70,7 +70,7 @@ class Updater $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('PUT', $url); - $hookContext = new HookContext($baseUrl, 'applyUpdates', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'applyUpdates', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -143,7 +143,7 @@ class Updater $request = new Operations\CheckForUpdatesRequest( download: $download, ); - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/updater/check'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -152,7 +152,7 @@ class Updater $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('PUT', $url); - $hookContext = new HookContext($baseUrl, 'checkForUpdates', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'checkForUpdates', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -221,14 +221,14 @@ class Updater */ public function getUpdateStatus(?Options $options = null): Operations\GetUpdateStatusResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/updater/status'); $urlOverride = null; $httpOptions = ['http_errors' => false]; $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getUpdateStatus', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getUpdateStatus', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); diff --git a/src/Users.php b/src/Users.php index d56398d..11f32df 100644 --- a/src/Users.php +++ b/src/Users.php @@ -75,7 +75,7 @@ class Users $httpOptions['headers']['Accept'] = 'application/xml'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'get-users', [], null); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'get-users', [], null); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); $httpRequest = Utils\Utils::removeHeaders($httpRequest); diff --git a/src/Video.php b/src/Video.php index 19481b3..29d3c9e 100644 --- a/src/Video.php +++ b/src/Video.php @@ -55,7 +55,7 @@ class Video */ public function getTimeline(Operations\GetTimelineRequest $request, ?Options $options = null): Operations\GetTimelineResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/:/timeline'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -64,7 +64,7 @@ class Video $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'getTimeline', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'getTimeline', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); @@ -134,7 +134,7 @@ class Video */ public function startUniversalTranscode(Operations\StartUniversalTranscodeRequest $request, ?Options $options = null): Operations\StartUniversalTranscodeResponse { - $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults()); + $baseUrl = $this->sdkConfiguration->getTemplatedServerUrl(); $url = Utils\Utils::generateUrl($baseUrl, '/video/:/transcode/universal/start.mpd'); $urlOverride = null; $httpOptions = ['http_errors' => false]; @@ -143,7 +143,7 @@ class Video $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'startUniversalTranscode', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'startUniversalTranscode', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions); diff --git a/src/Watchlist.php b/src/Watchlist.php index 2af7553..0321277 100644 --- a/src/Watchlist.php +++ b/src/Watchlist.php @@ -77,7 +77,7 @@ class Watchlist $httpOptions['headers']['Accept'] = 'application/json'; $httpOptions['headers']['user-agent'] = $this->sdkConfiguration->userAgent; $httpRequest = new \GuzzleHttp\Psr7\Request('GET', $url); - $hookContext = new HookContext($baseUrl, 'get-watch-list', [], $this->sdkConfiguration->securitySource); + $hookContext = new HookContext($this->sdkConfiguration, $baseUrl, 'get-watch-list', [], $this->sdkConfiguration->securitySource); $httpRequest = $this->sdkConfiguration->hooks->beforeRequest(new Hooks\BeforeRequestContext($hookContext), $httpRequest); $httpOptions['query'] = Utils\QueryParameters::standardizeQueryParams($httpRequest, $qp); $httpOptions = Utils\Utils::convertHeadersToOptions($httpRequest, $httpOptions);