diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 69c68cb..5ff7843 100755 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,12 +1,12 @@ lockVersion: 2.0.0 id: 5a8dbcbc-e0ee-41f0-9d84-b8b50567d1e9 management: - docChecksum: e95c0e17d3e268dcd18d26ac8d0bfc98 + docChecksum: 40b5081b26bc3736b1710ebbcc9a05b7 docVersion: 1.1.1 - speakeasyVersion: 1.656.1 - generationVersion: 2.753.1 - releaseVersion: 0.19.1 - configChecksum: 139189a56ca089830925fe696c81e477 + speakeasyVersion: 1.665.0 + generationVersion: 2.767.2 + releaseVersion: 0.20.0 + configChecksum: b39eeabf4d8ed82d2d2e88ed1fea3f77 repoURL: https://github.com/LukeHagar/plexcsharp.git repoSubDirectory: . published: true @@ -15,7 +15,10 @@ features: additionalDependencies: 0.1.0 additionalProperties: 0.0.1 constsAndDefaults: 0.0.1 - core: 3.15.4 + core: 3.15.7 + deprecations: 2.81.2 + enums: 2.83.0 + errors: 1.0.0 examples: 2.81.6 globalSecurity: 2.83.8 globalSecurityCallbacks: 0.1.0 @@ -24,14 +27,18 @@ features: globals: 2.82.1 intellisenseMarkdownSupport: 0.1.0 methodArguments: 0.2.1 + methodServerURLs: 2.82.1 nameOverrides: 2.81.2 + nullables: 0.1.1 + openEnums: 0.1.1 responseFormat: 0.0.4 - sdkHooks: 0.2.0 + sdkHooks: 0.3.0 unions: 1.1.0 generatedFiles: - .gitattributes - LukeHagar.PlexAPI.SDK.sln - LukeHagar/PlexAPI/SDK/Activities.cs + - LukeHagar/PlexAPI/SDK/Authentication.cs - LukeHagar/PlexAPI/SDK/Butler.cs - LukeHagar/PlexAPI/SDK/Collections.cs - LukeHagar/PlexAPI/SDK/Content.cs @@ -53,15 +60,20 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Components/Accepts.cs - LukeHagar/PlexAPI/SDK/Models/Components/AdvancedSubtitles.cs - LukeHagar/PlexAPI/SDK/Models/Components/AiringsType.cs + - LukeHagar/PlexAPI/SDK/Models/Components/AutoSelectSubtitle.cs - LukeHagar/PlexAPI/SDK/Models/Components/BoolInt.cs - LukeHagar/PlexAPI/SDK/Models/Components/Channel.cs - LukeHagar/PlexAPI/SDK/Models/Components/ChannelMapping.cs - LukeHagar/PlexAPI/SDK/Models/Components/Composite.cs - LukeHagar/PlexAPI/SDK/Models/Components/CompositeMedia.cs + - LukeHagar/PlexAPI/SDK/Models/Components/Connections.cs - LukeHagar/PlexAPI/SDK/Models/Components/Crop.cs - LukeHagar/PlexAPI/SDK/Models/Components/Decision.cs - LukeHagar/PlexAPI/SDK/Models/Components/Default.cs + - LukeHagar/PlexAPI/SDK/Models/Components/DefaultAudioAccessibility.cs - LukeHagar/PlexAPI/SDK/Models/Components/DefaultDirection.cs + - LukeHagar/PlexAPI/SDK/Models/Components/DefaultSubtitleAccessibility.cs + - LukeHagar/PlexAPI/SDK/Models/Components/DefaultSubtitleForced.cs - LukeHagar/PlexAPI/SDK/Models/Components/Device.cs - LukeHagar/PlexAPI/SDK/Models/Components/Directory.cs - LukeHagar/PlexAPI/SDK/Models/Components/Dvr.cs @@ -74,6 +86,7 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Components/GetResponses200.cs - LukeHagar/PlexAPI/SDK/Models/Components/GetResponses200Hub.cs - LukeHagar/PlexAPI/SDK/Models/Components/GetResponses200MediaContainer.cs + - LukeHagar/PlexAPI/SDK/Models/Components/Guids.cs - LukeHagar/PlexAPI/SDK/Models/Components/HistoryAllGetResponses200.cs - LukeHagar/PlexAPI/SDK/Models/Components/HistoryAllGetResponses200MediaContainer.cs - LukeHagar/PlexAPI/SDK/Models/Components/HistoryAllGetResponses200Metadata.cs @@ -82,6 +95,7 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Components/Image.cs - LukeHagar/PlexAPI/SDK/Models/Components/ImageType.cs - LukeHagar/PlexAPI/SDK/Models/Components/Items.cs + - LukeHagar/PlexAPI/SDK/Models/Components/ItemsGuids.cs - LukeHagar/PlexAPI/SDK/Models/Components/LibrarySection.cs - LukeHagar/PlexAPI/SDK/Models/Components/LibrarySectionLocation.cs - LukeHagar/PlexAPI/SDK/Models/Components/LibrarySections.cs @@ -90,6 +104,7 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Components/Lineup.cs - LukeHagar/PlexAPI/SDK/Models/Components/LineupType.cs - LukeHagar/PlexAPI/SDK/Models/Components/Location.cs + - LukeHagar/PlexAPI/SDK/Models/Components/MailingListStatus.cs - LukeHagar/PlexAPI/SDK/Models/Components/Media.cs - LukeHagar/PlexAPI/SDK/Models/Components/MediaContainer.cs - LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithArtwork.cs @@ -98,6 +113,7 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithArtworkType.cs - LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithDecision.cs - LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithDecisionDecision.cs + - LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithDecisionGuids.cs - LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithDecisionLocation.cs - LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithDecisionMedia.cs - LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithDecisionMediaContainer.cs @@ -116,8 +132,10 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithMetadata.cs - LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithMetadataMediaContainer.cs - LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithNestedMetadata.cs + - LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithNestedMetadataGuids.cs - LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithNestedMetadataMediaContainer.cs - LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithPlaylistMetadata.cs + - LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithPlaylistMetadataGuids.cs - LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithPlaylistMetadataMediaContainer.cs - LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithPlaylistMetadataMetadata.cs - LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithSettings.cs @@ -126,19 +144,25 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithSubscriptionMediaContainer.cs - LukeHagar/PlexAPI/SDK/Models/Components/MediaGrabOperation.cs - LukeHagar/PlexAPI/SDK/Models/Components/MediaQuery.cs + - LukeHagar/PlexAPI/SDK/Models/Components/MediaReviewsVisibility.cs - LukeHagar/PlexAPI/SDK/Models/Components/MediaSubscription.cs + - LukeHagar/PlexAPI/SDK/Models/Components/MediaType.cs + - LukeHagar/PlexAPI/SDK/Models/Components/MediaTypeString.cs - LukeHagar/PlexAPI/SDK/Models/Components/Metadata.cs - LukeHagar/PlexAPI/SDK/Models/Components/MetadataItem.cs - LukeHagar/PlexAPI/SDK/Models/Components/Part.cs - LukeHagar/PlexAPI/SDK/Models/Components/Pivot.cs - LukeHagar/PlexAPI/SDK/Models/Components/Player.cs - LukeHagar/PlexAPI/SDK/Models/Components/PlaylistType.cs + - LukeHagar/PlexAPI/SDK/Models/Components/PlexDevice.cs + - LukeHagar/PlexAPI/SDK/Models/Components/PlexDeviceProtocol.cs - LukeHagar/PlexAPI/SDK/Models/Components/PostResponses200.cs - LukeHagar/PlexAPI/SDK/Models/Components/PostResponses200MediaContainer.cs - LukeHagar/PlexAPI/SDK/Models/Components/PostResponses200Type.cs - LukeHagar/PlexAPI/SDK/Models/Components/Protocol.cs - LukeHagar/PlexAPI/SDK/Models/Components/RecommendationsVisibility.cs - LukeHagar/PlexAPI/SDK/Models/Components/Security.cs + - LukeHagar/PlexAPI/SDK/Models/Components/Services.cs - LukeHagar/PlexAPI/SDK/Models/Components/Session.cs - LukeHagar/PlexAPI/SDK/Models/Components/SessionLocation.cs - LukeHagar/PlexAPI/SDK/Models/Components/Setting.cs @@ -149,14 +173,36 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Components/SortPivot.cs - LukeHagar/PlexAPI/SDK/Models/Components/Status.cs - LukeHagar/PlexAPI/SDK/Models/Components/Stream.cs + - LukeHagar/PlexAPI/SDK/Models/Components/Subscription.cs - LukeHagar/PlexAPI/SDK/Models/Components/Subtitles.cs - LukeHagar/PlexAPI/SDK/Models/Components/Tag.cs - LukeHagar/PlexAPI/SDK/Models/Components/TranscodeSession.cs - LukeHagar/PlexAPI/SDK/Models/Components/TranscodeType.cs - LukeHagar/PlexAPI/SDK/Models/Components/Type.cs - LukeHagar/PlexAPI/SDK/Models/Components/User.cs + - LukeHagar/PlexAPI/SDK/Models/Components/UserPlexAccount.cs + - LukeHagar/PlexAPI/SDK/Models/Components/UserPlexAccountStatus.cs + - LukeHagar/PlexAPI/SDK/Models/Components/UserPlexAccountSubscription.cs + - LukeHagar/PlexAPI/SDK/Models/Components/UserPlexAccountSubscriptionStatus.cs + - LukeHagar/PlexAPI/SDK/Models/Components/UserPlexAccountSubscriptionsStatus.cs + - LukeHagar/PlexAPI/SDK/Models/Components/UserProfile.cs - LukeHagar/PlexAPI/SDK/Models/Components/Value.cs + - LukeHagar/PlexAPI/SDK/Models/Components/WatchedIndicator.cs + - LukeHagar/PlexAPI/SDK/Models/Errors/Errors.cs + - LukeHagar/PlexAPI/SDK/Models/Errors/GetServerResourcesErrors.cs + - LukeHagar/PlexAPI/SDK/Models/Errors/GetServerResourcesUnauthorized.cs + - LukeHagar/PlexAPI/SDK/Models/Errors/GetTokenDetailsBadRequest.cs + - LukeHagar/PlexAPI/SDK/Models/Errors/GetTokenDetailsErrors.cs + - LukeHagar/PlexAPI/SDK/Models/Errors/GetTokenDetailsUnauthorized.cs + - LukeHagar/PlexAPI/SDK/Models/Errors/GetUsersBadRequest.cs + - LukeHagar/PlexAPI/SDK/Models/Errors/GetUsersErrors.cs + - LukeHagar/PlexAPI/SDK/Models/Errors/GetUsersUnauthorized.cs + - LukeHagar/PlexAPI/SDK/Models/Errors/GetUsersUsersErrors.cs - LukeHagar/PlexAPI/SDK/Models/Errors/PlexAPIError.cs + - LukeHagar/PlexAPI/SDK/Models/Errors/PostUsersSignInDataAuthenticationErrors.cs + - LukeHagar/PlexAPI/SDK/Models/Errors/PostUsersSignInDataBadRequest.cs + - LukeHagar/PlexAPI/SDK/Models/Errors/PostUsersSignInDataErrors.cs + - LukeHagar/PlexAPI/SDK/Models/Errors/PostUsersSignInDataUnauthorized.cs - LukeHagar/PlexAPI/SDK/Models/Errors/ResponseValidationException.cs - LukeHagar/PlexAPI/SDK/Models/Errors/SDKException.cs - LukeHagar/PlexAPI/SDK/Models/Requests/Account.cs @@ -196,6 +242,12 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Requests/AddToPlayQueueResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/AddedQueueItems.cs - LukeHagar/PlexAPI/SDK/Models/Requests/AdvancedSubtitles.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/AllLibraries.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/AllowCameraUpload.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/AllowChannels.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/AllowSubtitleAdmin.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/AllowSync.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/AllowTuners.cs - LukeHagar/PlexAPI/SDK/Models/Requests/AnalyzeMetadataRequest.cs - LukeHagar/PlexAPI/SDK/Models/Requests/AnalyzeMetadataResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/ApplyUpdatesRequest.cs @@ -206,6 +258,7 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Requests/AutocompleteResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/Bandwidth.cs - LukeHagar/PlexAPI/SDK/Models/Requests/Bandwidths.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/Billing.cs - LukeHagar/PlexAPI/SDK/Models/Requests/ButlerTask.cs - LukeHagar/PlexAPI/SDK/Models/Requests/ButlerTasks.cs - LukeHagar/PlexAPI/SDK/Models/Requests/CancelActivityRequest.cs @@ -242,6 +295,7 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Requests/CreateDownloadQueueMediaContainer.cs - LukeHagar/PlexAPI/SDK/Models/Requests/CreateDownloadQueueResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/CreateDownloadQueueResponseBody.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/CreateDownloadQueueStatus.cs - LukeHagar/PlexAPI/SDK/Models/Requests/CreateMarkerMediaContainer.cs - LukeHagar/PlexAPI/SDK/Models/Requests/CreateMarkerRequest.cs - LukeHagar/PlexAPI/SDK/Models/Requests/CreateMarkerResponse.cs @@ -498,6 +552,7 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Requests/GetPlayQueueRequest.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetPlayQueueResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetPlaylistGeneratorDevice.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetPlaylistGeneratorItemsGuids.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetPlaylistGeneratorItemsMediaContainer.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetPlaylistGeneratorItemsMetadata.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetPlaylistGeneratorItemsRequest.cs @@ -560,6 +615,8 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Requests/GetSectionsResponseBody.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetServerInfoRequest.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetServerInfoResponse.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetServerResourcesRequest.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetServerResourcesResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetSessionPlaylistIndexRequest.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetSessionPlaylistIndexResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetSessionSegmentRequest.cs @@ -588,6 +645,7 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Requests/GetTagsRequest.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetTagsResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetTagsResponseBody.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetTasksButlerTask.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetTasksResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetTasksResponseBody.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetTemplateMediaContainer.cs @@ -596,6 +654,8 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Requests/GetTemplateResponseBody.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetThumbRequest.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetThumbResponse.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetTokenDetailsRequest.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetTokenDetailsResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetTransientTokenMediaContainer.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetTransientTokenRequest.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetTransientTokenResponse.cs @@ -604,12 +664,22 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Requests/GetUpdatesStatusResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetUpdatesStatusResponseBody.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetUpdatesStatusState.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetUsersMediaContainer.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetUsersRequest.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetUsersResponse.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetUsersResponseBody.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/Guids.cs - LukeHagar/PlexAPI/SDK/Models/Requests/Hints.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/Home.cs - LukeHagar/PlexAPI/SDK/Models/Requests/HomeVisibility.cs - LukeHagar/PlexAPI/SDK/Models/Requests/Hub.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/IncludeHttps.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/IncludeIPv6.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/IncludeRelay.cs - LukeHagar/PlexAPI/SDK/Models/Requests/Index.cs - LukeHagar/PlexAPI/SDK/Models/Requests/IngestTransientItemRequest.cs - LukeHagar/PlexAPI/SDK/Models/Requests/IngestTransientItemResponse.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/InternalPaymentMethod.cs - LukeHagar/PlexAPI/SDK/Models/Requests/Item.cs - LukeHagar/PlexAPI/SDK/Models/Requests/Language.cs - LukeHagar/PlexAPI/SDK/Models/Requests/Level.cs @@ -664,6 +734,7 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Requests/ListTopUsersResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/ListTopUsersResponseBody.cs - LukeHagar/PlexAPI/SDK/Models/Requests/Location.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/MailingListStatus.cs - LukeHagar/PlexAPI/SDK/Models/Requests/MakeDecisionRequest.cs - LukeHagar/PlexAPI/SDK/Models/Requests/MakeDecisionResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/MarkPlayedRequest.cs @@ -691,17 +762,29 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Requests/MovePlaylistItemResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/OptimizeDatabaseRequest.cs - LukeHagar/PlexAPI/SDK/Models/Requests/OptimizeDatabaseResponse.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/Owned.cs - LukeHagar/PlexAPI/SDK/Models/Requests/Params.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/PastSubscription.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/PathParamButlerTask.cs - LukeHagar/PlexAPI/SDK/Models/Requests/PathParamElement.cs - LukeHagar/PlexAPI/SDK/Models/Requests/PathParamIndex.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/PathParamTask.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/Pending.cs - LukeHagar/PlexAPI/SDK/Models/Requests/PlayQueueGenerator.cs - LukeHagar/PlexAPI/SDK/Models/Requests/PlaylistType.cs - LukeHagar/PlexAPI/SDK/Models/Requests/Policy.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataAuthenticationStatus.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataRequest.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataRequestBody.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataResponse.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataState.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataStatus.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataSubscription.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataUserPlexAccount.cs - LukeHagar/PlexAPI/SDK/Models/Requests/Prefs.cs - LukeHagar/PlexAPI/SDK/Models/Requests/ProcessSubscriptionsResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/ProcessingState.cs - LukeHagar/PlexAPI/SDK/Models/Requests/ProcessingStateContext.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/Protected.cs - LukeHagar/PlexAPI/SDK/Models/Requests/Protocol.cs - LukeHagar/PlexAPI/SDK/Models/Requests/QueryParamArgs.cs - LukeHagar/PlexAPI/SDK/Models/Requests/QueryParamAttributes.cs @@ -746,6 +829,7 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Requests/ResetSectionDefaultsResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/RestartProcessingDownloadQueueItemsRequest.cs - LukeHagar/PlexAPI/SDK/Models/Requests/RestartProcessingDownloadQueueItemsResponse.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/Restricted.cs - LukeHagar/PlexAPI/SDK/Models/Requests/ScanRequest.cs - LukeHagar/PlexAPI/SDK/Models/Requests/ScanResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/Scope.cs @@ -753,6 +837,8 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Requests/SearchHubsRequest.cs - LukeHagar/PlexAPI/SDK/Models/Requests/SearchHubsResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/SearchHubsResponseBody.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/Server.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/Services.cs - LukeHagar/PlexAPI/SDK/Models/Requests/SetChannelmapRequest.cs - LukeHagar/PlexAPI/SDK/Models/Requests/SetChannelmapResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/SetDVRPreferencesDVR.cs @@ -804,9 +890,9 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Requests/StopTaskRequest.cs - LukeHagar/PlexAPI/SDK/Models/Requests/StopTaskResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/StopTasksResponse.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/Subscription.cs - LukeHagar/PlexAPI/SDK/Models/Requests/SubscriptionTemplate.cs - LukeHagar/PlexAPI/SDK/Models/Requests/Subtitles.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/Task.cs - LukeHagar/PlexAPI/SDK/Models/Requests/TerminateSessionRequest.cs - LukeHagar/PlexAPI/SDK/Models/Requests/TerminateSessionResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/Transcode.cs @@ -815,6 +901,7 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Requests/TranscodeJob.cs - LukeHagar/PlexAPI/SDK/Models/Requests/TranscodeSubtitlesRequest.cs - LukeHagar/PlexAPI/SDK/Models/Requests/TranscodeSubtitlesResponse.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/Trials.cs - LukeHagar/PlexAPI/SDK/Models/Requests/TriggerFallbackRequest.cs - LukeHagar/PlexAPI/SDK/Models/Requests/TriggerFallbackResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/TuneChannelRequest.cs @@ -837,6 +924,7 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Requests/UpdatePlaylistResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/UploadPlaylistRequest.cs - LukeHagar/PlexAPI/SDK/Models/Requests/UploadPlaylistResponse.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/User.cs - LukeHagar/PlexAPI/SDK/Models/Requests/VoiceSearchHubsMediaContainer.cs - LukeHagar/PlexAPI/SDK/Models/Requests/VoiceSearchHubsRequest.cs - LukeHagar/PlexAPI/SDK/Models/Requests/VoiceSearchHubsResponse.cs @@ -846,6 +934,7 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Requests/WriteMessageResponse.cs - LukeHagar/PlexAPI/SDK/PlayQueue.cs - LukeHagar/PlexAPI/SDK/Playlist.cs + - LukeHagar/PlexAPI/SDK/Plex.cs - LukeHagar/PlexAPI/SDK/PlexAPI.cs - LukeHagar/PlexAPI/SDK/Preferences.cs - LukeHagar/PlexAPI/SDK/Provider.cs @@ -858,8 +947,10 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Transcoder.cs - LukeHagar/PlexAPI/SDK/UltraBlur.cs - LukeHagar/PlexAPI/SDK/Updater.cs + - LukeHagar/PlexAPI/SDK/Users.cs - LukeHagar/PlexAPI/SDK/Utils/AnyDeserializer.cs - LukeHagar/PlexAPI/SDK/Utils/BigIntStrConverter.cs + - LukeHagar/PlexAPI/SDK/Utils/Constants.cs - LukeHagar/PlexAPI/SDK/Utils/DecimalStrConverter.cs - LukeHagar/PlexAPI/SDK/Utils/EnumConverter.cs - LukeHagar/PlexAPI/SDK/Utils/FlexibleObjectDeserializer.cs @@ -881,15 +972,20 @@ generatedFiles: - docs/Models/Components/Accepts.md - docs/Models/Components/AdvancedSubtitles.md - docs/Models/Components/AiringsType.md + - docs/Models/Components/AutoSelectSubtitle.md - docs/Models/Components/BoolInt.md - docs/Models/Components/Channel.md - docs/Models/Components/ChannelMapping.md - docs/Models/Components/Composite.md - docs/Models/Components/CompositeMedia.md + - docs/Models/Components/Connections.md - docs/Models/Components/Crop.md - docs/Models/Components/Decision.md - docs/Models/Components/Default.md + - docs/Models/Components/DefaultAudioAccessibility.md - docs/Models/Components/DefaultDirection.md + - docs/Models/Components/DefaultSubtitleAccessibility.md + - docs/Models/Components/DefaultSubtitleForced.md - docs/Models/Components/Device.md - docs/Models/Components/Directory.md - docs/Models/Components/Dvr.md @@ -902,6 +998,7 @@ generatedFiles: - docs/Models/Components/GetResponses200.md - docs/Models/Components/GetResponses200Hub.md - docs/Models/Components/GetResponses200MediaContainer.md + - docs/Models/Components/Guids.md - docs/Models/Components/HistoryAllGetResponses200.md - docs/Models/Components/HistoryAllGetResponses200MediaContainer.md - docs/Models/Components/HistoryAllGetResponses200Metadata.md @@ -910,6 +1007,7 @@ generatedFiles: - docs/Models/Components/Image.md - docs/Models/Components/ImageType.md - docs/Models/Components/Items.md + - docs/Models/Components/ItemsGuids.md - docs/Models/Components/LibrarySection.md - docs/Models/Components/LibrarySectionLocation.md - docs/Models/Components/LibrarySections.md @@ -918,6 +1016,7 @@ generatedFiles: - docs/Models/Components/Lineup.md - docs/Models/Components/LineupType.md - docs/Models/Components/Location.md + - docs/Models/Components/MailingListStatus.md - docs/Models/Components/Media.md - docs/Models/Components/MediaContainer.md - docs/Models/Components/MediaContainerWithArtwork.md @@ -926,6 +1025,7 @@ generatedFiles: - docs/Models/Components/MediaContainerWithArtworkType.md - docs/Models/Components/MediaContainerWithDecision.md - docs/Models/Components/MediaContainerWithDecisionDecision.md + - docs/Models/Components/MediaContainerWithDecisionGuids.md - docs/Models/Components/MediaContainerWithDecisionLocation.md - docs/Models/Components/MediaContainerWithDecisionMedia.md - docs/Models/Components/MediaContainerWithDecisionMediaContainer.md @@ -944,8 +1044,10 @@ generatedFiles: - docs/Models/Components/MediaContainerWithMetadata.md - docs/Models/Components/MediaContainerWithMetadataMediaContainer.md - docs/Models/Components/MediaContainerWithNestedMetadata.md + - docs/Models/Components/MediaContainerWithNestedMetadataGuids.md - docs/Models/Components/MediaContainerWithNestedMetadataMediaContainer.md - docs/Models/Components/MediaContainerWithPlaylistMetadata.md + - docs/Models/Components/MediaContainerWithPlaylistMetadataGuids.md - docs/Models/Components/MediaContainerWithPlaylistMetadataMediaContainer.md - docs/Models/Components/MediaContainerWithPlaylistMetadataMetadata.md - docs/Models/Components/MediaContainerWithSettings.md @@ -954,19 +1056,25 @@ generatedFiles: - docs/Models/Components/MediaContainerWithSubscriptionMediaContainer.md - docs/Models/Components/MediaGrabOperation.md - docs/Models/Components/MediaQuery.md + - docs/Models/Components/MediaReviewsVisibility.md - docs/Models/Components/MediaSubscription.md + - docs/Models/Components/MediaType.md + - docs/Models/Components/MediaTypeString.md - docs/Models/Components/Metadata.md - docs/Models/Components/MetadataItem.md - docs/Models/Components/Part.md - docs/Models/Components/Pivot.md - docs/Models/Components/Player.md - docs/Models/Components/PlaylistType.md + - docs/Models/Components/PlexDevice.md + - docs/Models/Components/PlexDeviceProtocol.md - docs/Models/Components/PostResponses200.md - docs/Models/Components/PostResponses200MediaContainer.md - docs/Models/Components/PostResponses200Type.md - docs/Models/Components/Protocol.md - docs/Models/Components/RecommendationsVisibility.md - docs/Models/Components/Security.md + - docs/Models/Components/Services.md - docs/Models/Components/Session.md - docs/Models/Components/SessionLocation.md - docs/Models/Components/Setting.md @@ -977,13 +1085,35 @@ generatedFiles: - docs/Models/Components/SortPivot.md - docs/Models/Components/Status.md - docs/Models/Components/Stream.md + - docs/Models/Components/Subscription.md - docs/Models/Components/Subtitles.md - docs/Models/Components/Tag.md - docs/Models/Components/TranscodeSession.md - docs/Models/Components/TranscodeType.md - docs/Models/Components/Type.md - docs/Models/Components/User.md + - docs/Models/Components/UserPlexAccount.md + - docs/Models/Components/UserPlexAccountStatus.md + - docs/Models/Components/UserPlexAccountSubscription.md + - docs/Models/Components/UserPlexAccountSubscriptionStatus.md + - docs/Models/Components/UserPlexAccountSubscriptionsStatus.md + - docs/Models/Components/UserProfile.md - docs/Models/Components/Value.md + - docs/Models/Components/WatchedIndicator.md + - docs/Models/Errors/Errors.md + - docs/Models/Errors/GetServerResourcesErrors.md + - docs/Models/Errors/GetServerResourcesUnauthorized.md + - docs/Models/Errors/GetTokenDetailsBadRequest.md + - docs/Models/Errors/GetTokenDetailsErrors.md + - docs/Models/Errors/GetTokenDetailsUnauthorized.md + - docs/Models/Errors/GetUsersBadRequest.md + - docs/Models/Errors/GetUsersErrors.md + - docs/Models/Errors/GetUsersUnauthorized.md + - docs/Models/Errors/GetUsersUsersErrors.md + - docs/Models/Errors/PostUsersSignInDataAuthenticationErrors.md + - docs/Models/Errors/PostUsersSignInDataBadRequest.md + - docs/Models/Errors/PostUsersSignInDataErrors.md + - docs/Models/Errors/PostUsersSignInDataUnauthorized.md - docs/Models/Requests/Account.md - docs/Models/Requests/Action.md - docs/Models/Requests/Activity.md @@ -1021,6 +1151,12 @@ generatedFiles: - docs/Models/Requests/AddToPlayQueueResponse.md - docs/Models/Requests/AddedQueueItems.md - docs/Models/Requests/AdvancedSubtitles.md + - docs/Models/Requests/AllLibraries.md + - docs/Models/Requests/AllowCameraUpload.md + - docs/Models/Requests/AllowChannels.md + - docs/Models/Requests/AllowSubtitleAdmin.md + - docs/Models/Requests/AllowSync.md + - docs/Models/Requests/AllowTuners.md - docs/Models/Requests/AnalyzeMetadataRequest.md - docs/Models/Requests/AnalyzeMetadataResponse.md - docs/Models/Requests/ApplyUpdatesRequest.md @@ -1031,6 +1167,7 @@ generatedFiles: - docs/Models/Requests/AutocompleteResponse.md - docs/Models/Requests/Bandwidth.md - docs/Models/Requests/Bandwidths.md + - docs/Models/Requests/Billing.md - docs/Models/Requests/ButlerTask.md - docs/Models/Requests/ButlerTasks.md - docs/Models/Requests/CancelActivityRequest.md @@ -1067,6 +1204,7 @@ generatedFiles: - docs/Models/Requests/CreateDownloadQueueMediaContainer.md - docs/Models/Requests/CreateDownloadQueueResponse.md - docs/Models/Requests/CreateDownloadQueueResponseBody.md + - docs/Models/Requests/CreateDownloadQueueStatus.md - docs/Models/Requests/CreateMarkerMediaContainer.md - docs/Models/Requests/CreateMarkerRequest.md - docs/Models/Requests/CreateMarkerResponse.md @@ -1323,6 +1461,7 @@ generatedFiles: - docs/Models/Requests/GetPlayQueueRequest.md - docs/Models/Requests/GetPlayQueueResponse.md - docs/Models/Requests/GetPlaylistGeneratorDevice.md + - docs/Models/Requests/GetPlaylistGeneratorItemsGuids.md - docs/Models/Requests/GetPlaylistGeneratorItemsMediaContainer.md - docs/Models/Requests/GetPlaylistGeneratorItemsMetadata.md - docs/Models/Requests/GetPlaylistGeneratorItemsRequest.md @@ -1385,6 +1524,8 @@ generatedFiles: - docs/Models/Requests/GetSectionsResponseBody.md - docs/Models/Requests/GetServerInfoRequest.md - docs/Models/Requests/GetServerInfoResponse.md + - docs/Models/Requests/GetServerResourcesRequest.md + - docs/Models/Requests/GetServerResourcesResponse.md - docs/Models/Requests/GetSessionPlaylistIndexRequest.md - docs/Models/Requests/GetSessionPlaylistIndexResponse.md - docs/Models/Requests/GetSessionSegmentRequest.md @@ -1413,6 +1554,7 @@ generatedFiles: - docs/Models/Requests/GetTagsRequest.md - docs/Models/Requests/GetTagsResponse.md - docs/Models/Requests/GetTagsResponseBody.md + - docs/Models/Requests/GetTasksButlerTask.md - docs/Models/Requests/GetTasksResponse.md - docs/Models/Requests/GetTasksResponseBody.md - docs/Models/Requests/GetTemplateMediaContainer.md @@ -1421,6 +1563,8 @@ generatedFiles: - docs/Models/Requests/GetTemplateResponseBody.md - docs/Models/Requests/GetThumbRequest.md - docs/Models/Requests/GetThumbResponse.md + - docs/Models/Requests/GetTokenDetailsRequest.md + - docs/Models/Requests/GetTokenDetailsResponse.md - docs/Models/Requests/GetTransientTokenMediaContainer.md - docs/Models/Requests/GetTransientTokenRequest.md - docs/Models/Requests/GetTransientTokenResponse.md @@ -1429,12 +1573,22 @@ generatedFiles: - docs/Models/Requests/GetUpdatesStatusResponse.md - docs/Models/Requests/GetUpdatesStatusResponseBody.md - docs/Models/Requests/GetUpdatesStatusState.md + - docs/Models/Requests/GetUsersMediaContainer.md + - docs/Models/Requests/GetUsersRequest.md + - docs/Models/Requests/GetUsersResponse.md + - docs/Models/Requests/GetUsersResponseBody.md + - docs/Models/Requests/Guids.md - docs/Models/Requests/Hints.md + - docs/Models/Requests/Home.md - docs/Models/Requests/HomeVisibility.md - docs/Models/Requests/Hub.md + - docs/Models/Requests/IncludeHttps.md + - docs/Models/Requests/IncludeIPv6.md + - docs/Models/Requests/IncludeRelay.md - docs/Models/Requests/Index.md - docs/Models/Requests/IngestTransientItemRequest.md - docs/Models/Requests/IngestTransientItemResponse.md + - docs/Models/Requests/InternalPaymentMethod.md - docs/Models/Requests/Item.md - docs/Models/Requests/Language.md - docs/Models/Requests/Level.md @@ -1489,6 +1643,7 @@ generatedFiles: - docs/Models/Requests/ListTopUsersResponse.md - docs/Models/Requests/ListTopUsersResponseBody.md - docs/Models/Requests/Location.md + - docs/Models/Requests/MailingListStatus.md - docs/Models/Requests/MakeDecisionRequest.md - docs/Models/Requests/MakeDecisionResponse.md - docs/Models/Requests/MarkPlayedRequest.md @@ -1516,17 +1671,29 @@ generatedFiles: - docs/Models/Requests/MovePlaylistItemResponse.md - docs/Models/Requests/OptimizeDatabaseRequest.md - docs/Models/Requests/OptimizeDatabaseResponse.md + - docs/Models/Requests/Owned.md - docs/Models/Requests/Params.md + - docs/Models/Requests/PastSubscription.md + - docs/Models/Requests/PathParamButlerTask.md - docs/Models/Requests/PathParamElement.md - docs/Models/Requests/PathParamIndex.md - - docs/Models/Requests/PathParamTask.md + - docs/Models/Requests/Pending.md - docs/Models/Requests/PlayQueueGenerator.md - docs/Models/Requests/PlaylistType.md - docs/Models/Requests/Policy.md + - docs/Models/Requests/PostUsersSignInDataAuthenticationStatus.md + - docs/Models/Requests/PostUsersSignInDataRequest.md + - docs/Models/Requests/PostUsersSignInDataRequestBody.md + - docs/Models/Requests/PostUsersSignInDataResponse.md + - docs/Models/Requests/PostUsersSignInDataState.md + - docs/Models/Requests/PostUsersSignInDataStatus.md + - docs/Models/Requests/PostUsersSignInDataSubscription.md + - docs/Models/Requests/PostUsersSignInDataUserPlexAccount.md - docs/Models/Requests/Prefs.md - docs/Models/Requests/ProcessSubscriptionsResponse.md - docs/Models/Requests/ProcessingState.md - docs/Models/Requests/ProcessingStateContext.md + - docs/Models/Requests/Protected.md - docs/Models/Requests/Protocol.md - docs/Models/Requests/QueryParamArgs.md - docs/Models/Requests/QueryParamAttributes.md @@ -1571,6 +1738,7 @@ generatedFiles: - docs/Models/Requests/ResetSectionDefaultsResponse.md - docs/Models/Requests/RestartProcessingDownloadQueueItemsRequest.md - docs/Models/Requests/RestartProcessingDownloadQueueItemsResponse.md + - docs/Models/Requests/Restricted.md - docs/Models/Requests/ScanRequest.md - docs/Models/Requests/ScanResponse.md - docs/Models/Requests/Scope.md @@ -1578,6 +1746,8 @@ generatedFiles: - docs/Models/Requests/SearchHubsRequest.md - docs/Models/Requests/SearchHubsResponse.md - docs/Models/Requests/SearchHubsResponseBody.md + - docs/Models/Requests/Server.md + - docs/Models/Requests/Services.md - docs/Models/Requests/SetChannelmapRequest.md - docs/Models/Requests/SetChannelmapResponse.md - docs/Models/Requests/SetDVRPreferencesDVR.md @@ -1629,9 +1799,9 @@ generatedFiles: - docs/Models/Requests/StopTaskRequest.md - docs/Models/Requests/StopTaskResponse.md - docs/Models/Requests/StopTasksResponse.md + - docs/Models/Requests/Subscription.md - docs/Models/Requests/SubscriptionTemplate.md - docs/Models/Requests/Subtitles.md - - docs/Models/Requests/Task.md - docs/Models/Requests/TerminateSessionRequest.md - docs/Models/Requests/TerminateSessionResponse.md - docs/Models/Requests/Transcode.md @@ -1640,6 +1810,7 @@ generatedFiles: - docs/Models/Requests/TranscodeJob.md - docs/Models/Requests/TranscodeSubtitlesRequest.md - docs/Models/Requests/TranscodeSubtitlesResponse.md + - docs/Models/Requests/Trials.md - docs/Models/Requests/TriggerFallbackRequest.md - docs/Models/Requests/TriggerFallbackResponse.md - docs/Models/Requests/TuneChannelRequest.md @@ -1662,6 +1833,7 @@ generatedFiles: - docs/Models/Requests/UpdatePlaylistResponse.md - docs/Models/Requests/UploadPlaylistRequest.md - docs/Models/Requests/UploadPlaylistResponse.md + - docs/Models/Requests/User.md - docs/Models/Requests/VoiceSearchHubsMediaContainer.md - docs/Models/Requests/VoiceSearchHubsRequest.md - docs/Models/Requests/VoiceSearchHubsResponse.md @@ -1670,6 +1842,7 @@ generatedFiles: - docs/Models/Requests/WriteMessageRequest.md - docs/Models/Requests/WriteMessageResponse.md - docs/sdks/activities/README.md + - docs/sdks/authentication/README.md - docs/sdks/butler/README.md - docs/sdks/collections/README.md - docs/sdks/content/README.md @@ -1687,6 +1860,7 @@ generatedFiles: - docs/sdks/log/README.md - docs/sdks/playlist/README.md - docs/sdks/playqueue/README.md + - docs/sdks/plex/README.md - docs/sdks/preferences/README.md - docs/sdks/provider/README.md - docs/sdks/rate/README.md @@ -1697,6 +1871,7 @@ generatedFiles: - docs/sdks/transcoder/README.md - docs/sdks/ultrablur/README.md - docs/sdks/updater/README.md + - docs/sdks/users/README.md - global.json examples: getServerCapabilities: @@ -2025,6 +2200,7 @@ examples: path: taskName: "RefreshPeriodicMetadata" task: "RefreshLocalMedia" + butlerTask: "RefreshLocalMedia" header: accepts: "application/xml" X-Plex-Client-Identifier: "abc123" @@ -2048,6 +2224,7 @@ examples: path: taskName: "CleanOldCacheFiles" task: "CleanOldBundles" + butlerTask: "CleanOldBundles" header: accepts: "application/xml" X-Plex-Client-Identifier: "abc123" @@ -2124,7 +2301,8 @@ examples: includeRelay: 1 includeIPv6: 1 header: - X-Plex-Client-Identifier: "3381b62b-9ab7-4e37-827b-203e9809eb58" + X-Plex-Client-Identifier: "abc123" + accepts: "application/xml" responses: "200": 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}]}] @@ -2640,7 +2818,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"composite": "/playlists/96/composite/1705724593", "duration": 141000, "key": "/playlists/96/items", "leafCount": 1, "playlistType": "video", "smart": false, "title": "A Great Playlist", "type": "playlist", "addedAt": 1705719589, "lastViewedAt": 1705719589, "ratingKey": "96", "summary": "What a great playlist", "updatedAt": 1705724593, "viewCount": 1, "guid": "com.plexapp.agents.none://a2f92937-1408-40e2-b022-63a8a9377e55", "icon": "playlist://image.smart"}]}} + application/json: {"MediaContainer": {"Metadata": [{"composite": "/playlists/96/composite/1705724593", "duration": 141000, "key": "/playlists/96/items", "leafCount": 1, "playlistType": "video", "smart": false, "title": "A Great Playlist", "type": "playlist", "addedAt": 1705719589, "guid": "com.plexapp.agents.none://a2f92937-1408-40e2-b022-63a8a9377e55", "lastViewedAt": 1705719589, "ratingKey": "96", "summary": "What a great playlist", "updatedAt": 1705724593, "viewCount": 1, "icon": "playlist://image.smart"}]}} "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": @@ -2674,7 +2852,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"composite": "/playlists/95/composite/1705717387", "duration": 282000, "key": "/playlists/95/items", "leafCount": 2, "playlistType": "video", "smart": true, "title": "Smart Movie Playlist", "type": "playlist", "addedAt": 1705716493, "ratingKey": "95", "summary": "", "updatedAt": 1705717387, "content": "library://x/directory/%2Flibrary%2Fsections%2F1%2Fall%3Ftype%3D1%26push%3D1%26title%3D2%26or%3D1%26title%3DSerenity%26pop%3D1", "guid": "com.plexapp.agents.none://87425529-380f-44b8-a689-9a0537e7ec91", "icon": "playlist://image.smart"}]}} + application/json: {"MediaContainer": {"Metadata": [{"composite": "/playlists/95/composite/1705717387", "duration": 282000, "key": "/playlists/95/items", "leafCount": 2, "playlistType": "video", "smart": true, "title": "Smart Movie Playlist", "type": "playlist", "addedAt": 1705716493, "guid": "com.plexapp.agents.none://87425529-380f-44b8-a689-9a0537e7ec91", "ratingKey": "95", "summary": "", "updatedAt": 1705717387, "content": "library://x/directory/%2Flibrary%2Fsections%2F1%2Fall%3Ftype%3D1%26push%3D1%26title%3D2%26or%3D1%26title%3DSerenity%26pop%3D1", "icon": "playlist://image.smart"}]}} "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": @@ -2840,9 +3018,22 @@ examples: application/json: {} getTokenDetails: speakeasy-default-get-token-details: + parameters: + header: + accepts: "application/xml" + X-Plex-Client-Identifier: "abc123" + X-Plex-Product: "Plex for Roku" + X-Plex-Version: "2.4.1" + X-Plex-Platform: "Roku" + X-Plex-Platform-Version: "4.3 build 1057" + X-Plex-Device: "Roku 3" + X-Plex-Model: "4200X" + X-Plex-Device-Vendor: "Roku" + X-Plex-Device-Name: "Living Room TV" + X-Plex-Marketplace: "googlePlay" responses: "200": - 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} + application/json: {"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, "mailingListActive": false, "mailingListStatus": "active", "maxHomeSize": 15, "profile": {"autoSelectAudio": true, "defaultAudioLanguage": "ja", "defaultAudioAccessibility": 0, "defaultAudioLanguages": null, "defaultSubtitleLanguage": "en", "defaultSubtitleLanguages": null, "autoSelectSubtitle": 1, "defaultSubtitleAccessibility": 1, "defaultSubtitleForced": 1, "watchedIndicator": 1, "mediaReviewsVisibility": 1, "mediaReviewsLanguages": null}, "protected": false, "rememberExpiresAt": 1556281940, "restricted": false, "services": [], "subscription": {"active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive"}, "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}]} "401": @@ -2868,16 +3059,22 @@ examples: speakeasy-default-post-users-sign-in-data: parameters: header: - X-Plex-Client-Identifier: "3381b62b-9ab7-4e37-827b-203e9809eb58" + X-Plex-Client-Identifier: "abc123" X-Plex-Product: "Plex for Roku" X-Plex-Device: "Roku 3" X-Plex-Version: "2.4.1" X-Plex-Platform: "Roku" + accepts: "application/xml" + X-Plex-Platform-Version: "4.3 build 1057" + X-Plex-Model: "4200X" + X-Plex-Device-Vendor: "Roku" + X-Plex-Device-Name: "Living Room TV" + X-Plex-Marketplace: "googlePlay" requestBody: application/x-www-form-urlencoded: {"login": "username@email.com", "password": "password123", "rememberMe": false, "verificationCode": "123456"} responses: "201": - 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": []} + application/json: {"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, "mailingListActive": false, "mailingListStatus": "active", "maxHomeSize": 15, "profile": {"autoSelectAudio": true, "defaultAudioLanguage": "ja", "defaultAudioAccessibility": 0, "defaultAudioLanguages": null, "defaultSubtitleLanguage": "en", "defaultSubtitleLanguages": null, "autoSelectSubtitle": 1, "defaultSubtitleAccessibility": 1, "defaultSubtitleForced": 1, "watchedIndicator": 1, "mediaReviewsVisibility": 1, "mediaReviewsLanguages": null}, "protected": false, "rememberExpiresAt": 1556281940, "restricted": false, "services": [], "subscription": {"active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive"}, "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}]} "401": @@ -2955,7 +3152,7 @@ examples: speakeasy-default-get-sessions: responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"title": "The American Dream Is Killing Me", "type": "track", "addedAt": 1705543312, "art": "/library/metadata/39904/art/1705310687", "duration": 186240, "grandparentArt": "/library/metadata/39904/art/1705310687", "grandparentKey": "/library/metadata/39904", "grandparentRatingKey": "39904", "grandparentThumb": "/library/metadata/39904/thumb/1705310687", "grandparentTitle": "Green Day", "index": 1, "key": "/library/metadata/67085", "Media": [{"audioChannels": 2, "audioCodec": "flac", "bitrate": 1014, "container": "flac", "duration": 186240, "id": 130355, "Part": [{"container": "flac", "duration": 186240, "file": "/music/Green Day/Saviors (2024)/Green Day - Saviors - 01 - The American Dream Is Killing Me.flac", "id": 130625, "key": "/library/parts/130625/1705543268/file.flac", "size": 23644000, "Stream": [{"audioChannelLayout": "stereo", "bitDepth": 16, "bitrate": 1014, "codec": "flac", "displayTitle": "FLAC (Stereo)", "id": 352487, "index": 0, "samplingRate": 44100, "selected": true, "streamType": 2, "albumGain": "-12.94", "albumPeak": "1.000000", "albumRange": "4.751014", "channels": 2, "extendedDisplayTitle": "FLAC (Stereo)", "gain": "-12.94", "loudness": "-5.94", "lra": "1.74", "peak": "1.000000", "location": "direct"}], "hasThumbnail": "1", "decision": "directplay", "selected": true}], "selected": true}], "originalTitle": "The American Dream Is Killing Me", "parentIndex": 1, "parentKey": "/library/metadata/67084", "parentRatingKey": "67084", "parentThumb": "/library/metadata/67084/thumb/1705543314", "parentTitle": "Saviors", "ratingCount": 45885, "ratingKey": "67085", "thumb": "/library/metadata/67084/thumb/1705543314", "titleSort": "American Dream Is Killing Me", "updatedAt": 1705543314, "viewOffset": 1000, "grandparentGuid": "plex://artist/5d07bbfd403c6402904a6480", "guid": "plex://track/6535834f71f22f36f71a8e8f", "librarySectionID": "3", "librarySectionKey": "/library/sections/3", "librarySectionTitle": "Music", "musicAnalysisVersion": "1", "parentGuid": "plex://album/65394d6d472b8ab03ef47f12", "parentStudio": "Reprise Records", "parentYear": 2024, "sessionKey": "203", "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": {"Metadata": [{"title": "The American Dream Is Killing Me", "type": "track", "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", "Media": [{"audioChannels": 2, "audioCodec": "flac", "bitrate": 1014, "container": "flac", "duration": 186240, "id": 130355, "Part": [{"container": "flac", "duration": 186240, "file": "/music/Green Day/Saviors (2024)/Green Day - Saviors - 01 - The American Dream Is Killing Me.flac", "id": 130625, "key": "/library/parts/130625/1705543268/file.flac", "size": 23644000, "Stream": [{"audioChannelLayout": "stereo", "channels": 2, "bitDepth": 16, "bitrate": 1014, "codec": "flac", "displayTitle": "FLAC (Stereo)", "extendedDisplayTitle": "FLAC (Stereo)", "id": 352487, "index": 0, "key": "/library/streams/216389", "samplingRate": 44100, "selected": true, "streamType": 1, "albumGain": "-12.94", "albumPeak": "1.000000", "albumRange": "4.751014", "gain": "-12.94", "loudness": "-5.94", "lra": "1.74", "peak": "1.000000", "location": "direct"}], "hasThumbnail": "1", "decision": "directplay", "selected": true}], "selected": true}], "originalTitle": "The American Dream Is Killing Me", "parentGuid": "plex://album/65394d6d472b8ab03ef47f12", "parentIndex": 1, "parentKey": "/library/metadata/67084", "parentRatingKey": "67084", "parentThumb": "/library/metadata/67084/thumb/1705543314", "parentTitle": "Saviors", "ratingCount": 45885, "ratingKey": "67085", "thumb": "/library/metadata/67084/thumb/1705543314", "titleSort": "American Dream Is Killing Me", "updatedAt": 1705543314, "viewOffset": 1000, "librarySectionID": "3", "librarySectionKey": "/library/sections/3", "librarySectionTitle": "Music", "musicAnalysisVersion": "1", "parentStudio": "Reprise Records", "parentYear": 2024, "sessionKey": "203", "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}]} "401": @@ -3163,10 +3360,10 @@ examples: speakeasy-default-get-users: parameters: header: - X-Plex-Client-Identifier: "3381b62b-9ab7-4e37-827b-203e9809eb58" + X-Plex-Client-Identifier: "abc123" X-Plex-Product: "Plex for Roku" X-Plex-Device: "Roku 3" - X-Plex-Device-Name: "Chrome" + X-Plex-Device-Name: "Living Room TV" X-Plex-Device-Screen-Resolution: "1487x1165,2560x1440" X-Plex-Version: "2.4.1" X-Plex-Platform: "Roku" @@ -3176,9 +3373,13 @@ examples: X-Plex-Language: "en" X-Plex-Platform-Version: "4.3 build 1057" X-Plex-Token: "CV5xoxjTpFKUzBTShsaf" + accepts: "application/xml" + X-Plex-Device-Vendor: "Roku" + X-Plex-Marketplace: "googlePlay" responses: "200": application/xml: "0xfD5052DbD1" + application/json: {"MediaContainer": {"friendlyName": "myPlex", "identifier": "com.plexapp.plugins.myplex", "machineIdentifier": "3dff4c4da3b1229a649aa574a9e2b419a684a20e", "totalSize": 30, "size": 30, "User": [{"id": 22526914, "title": "Plex User", "username": "zgfuc7krcqfimrmb9lsl5j", "email": "zgfuc7krcqfimrmb9lsl5j@protonmail.com", "recommendationsPlaylistId": "", "thumb": "https://plex.tv/users/3346028014e93acd/avatar?c=1731605021", "protected": 1, "home": 1, "allowTuners": 1, "allowSync": 1, "allowCameraUpload": 1, "allowChannels": 1, "allowSubtitleAdmin": 1, "filterAll": "", "filterMovies": "", "filterMusic": "", "filterPhotos": "", "filterTelevision": "", "restricted": 1, "Server": [{"id": 907759180, "serverId": 9999999, "machineIdentifier": "fbb8aa6be6e0c997c6268bc2b4431c8807f70a3", "name": "ConnectedUserFlix", "lastSeenAt": 1556281940, "numLibraries": 16, "allLibraries": 1, "owned": 1, "pending": 1}]}]}} "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": @@ -3493,7 +3694,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 231605, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getDownloadQueueMedia: speakeasy-default-get-download-queue-media: parameters: @@ -3588,7 +3789,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} + application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"title": "", "type": "", "addedAt": 406301, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} getContinueWatching: speakeasy-default-get-continue-watching: parameters: @@ -3606,7 +3807,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} + application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"title": "", "type": "", "addedAt": 302705, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} getHubItems: speakeasy-default-get-hub-items: parameters: @@ -3644,7 +3845,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} + application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"title": "", "type": "", "addedAt": 424115, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} getMetadataHubs: speakeasy-default-get-metadata-hubs: parameters: @@ -3666,7 +3867,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} + application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"title": "", "type": "", "addedAt": 605482, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} getPostplayHubs: speakeasy-default-get-postplay-hubs: parameters: @@ -3688,7 +3889,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} + application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"title": "", "type": "", "addedAt": 441419, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} getRelatedHubs: speakeasy-default-get-related-hubs: parameters: @@ -3710,7 +3911,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} + application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"title": "", "type": "", "addedAt": 8858, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} getSectionHubs: speakeasy-default-get-section-hubs: parameters: @@ -3732,7 +3933,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} + application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"title": "", "type": "", "addedAt": 336924, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} resetSectionDefaults: speakeasy-default-reset-section-defaults: parameters: @@ -3874,12 +4075,13 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} + application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"title": "", "type": "", "addedAt": 758235, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} voiceSearchHubs: speakeasy-default-voice-search-hubs: parameters: query: query: "" + type: 2 header: accepts: "application/xml" X-Plex-Client-Identifier: "abc123" @@ -3894,10 +4096,12 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} + application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"title": "", "type": "", "addedAt": 594971, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} getLibraryItems: speakeasy-default-get-library-items: parameters: + query: + mediaQuery: {"type": 4, "sourceType": 2, "sort": "duration:desc,index"} header: accepts: "application/xml" X-Plex-Client-Identifier: "abc123" @@ -3912,7 +4116,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 159678, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} deleteCaches: {} cleanBundles: {} ingestTransientItem: @@ -3937,7 +4141,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 82660, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getLibraryMatches: speakeasy-default-get-library-matches: parameters: @@ -3945,6 +4149,7 @@ examples: includeFullMetadata: 1 includeAncestorMetadata: 1 includeAlternateMetadataSources: 1 + type: 2 header: accepts: "application/xml" X-Plex-Client-Identifier: "abc123" @@ -3959,7 +4164,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 84198, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} optimizeDatabase: speakeasy-default-optimize-database: parameters: @@ -4001,7 +4206,7 @@ examples: speakeasy-default-get-sections: responses: "200": - application/json: {} + application/json: {"MediaContainer": {"Directory": [{"title": "Movies", "type": "movie", "contentChangedAt": 1556281940, "createdAt": 1556281940, "language": "", "uuid": "e69655a2-ef48-4aba-bb19-d3cc3401e7d6", "scannedAt": 1556281940, "updatedAt": 1556281940}]}} addSection: speakeasy-default-add-section: parameters: @@ -4028,7 +4233,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Directory": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Directory": [{"title": "", "type": "", "addedAt": 39544, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} stopAllRefreshes: speakeasy-default-stop-all-refreshes: responses: @@ -4072,6 +4277,8 @@ examples: getTags: speakeasy-default-get-tags: parameters: + query: + type: 2 header: accepts: "application/xml" X-Plex-Client-Identifier: "abc123" @@ -4159,7 +4366,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 890240, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} analyzeMetadata: speakeasy-default-analyze-metadata: parameters: @@ -4235,7 +4442,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 713455, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} addExtras: speakeasy-default-add-extras: parameters: @@ -4376,7 +4583,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 419882, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} mergeItems: speakeasy-default-merge-items: parameters: @@ -4413,7 +4620,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 51724, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} setItemPreferences: speakeasy-default-set-item-preferences: parameters: @@ -4469,7 +4676,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} + application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"title": "", "type": "", "addedAt": 138475, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} listSimilar: speakeasy-default-list-similar: parameters: @@ -4489,7 +4696,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 976861, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} splitItem: speakeasy-default-split-item: parameters: @@ -4546,7 +4753,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"MetadataItem": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "MetadataItem": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}]}} + application/json: {"MediaContainer": {"MetadataItem": [{"title": "", "type": "", "addedAt": 440490, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "MetadataItem": [{"title": "", "type": "", "addedAt": 405454, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}]}} unmatch: speakeasy-default-unmatch: parameters: @@ -4681,7 +4888,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 718998, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} deleteLibrarySection: speakeasy-default-delete-library-section: parameters: @@ -4722,7 +4929,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Directory": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Directory": [{"title": "", "type": "", "addedAt": 704505, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} editSection: speakeasy-default-edit-section: parameters: @@ -4785,6 +4992,8 @@ examples: parameters: path: sectionId: 942007 + query: + mediaQuery: {"type": 4, "sourceType": 2, "sort": "duration:desc,index"} header: accepts: "application/xml" X-Plex-Client-Identifier: "abc123" @@ -4799,12 +5008,14 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 942007, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getCollections: speakeasy-default-get-collections: parameters: path: sectionId: 348838 + query: + mediaQuery: {"type": 4, "sourceType": 2, "sort": "duration:desc,index"} header: accepts: "application/xml" X-Plex-Client-Identifier: "abc123" @@ -4819,12 +5030,14 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 348838, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getCommon: speakeasy-default-get-common: parameters: path: sectionId: 298154 + query: + mediaQuery: {"type": 4, "sourceType": 2, "sort": "duration:desc,index"} header: accepts: "application/xml" X-Plex-Client-Identifier: "abc123" @@ -4839,7 +5052,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 298154, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} emptyTrash: speakeasy-default-empty-trash: parameters: @@ -4882,6 +5095,8 @@ examples: parameters: path: sectionId: 3947 + query: + mediaQuery: {"type": 4, "sourceType": 2, "sort": "duration:desc,index"} header: accepts: "application/xml" X-Plex-Client-Identifier: "abc123" @@ -5231,6 +5446,8 @@ examples: path: sectionId: 925611 updatedAt: 117413 + query: + mediaQuery: {"type": 4, "sourceType": 2, "sort": "duration:desc,index"} header: accepts: "application/xml" X-Plex-Client-Identifier: "abc123" @@ -5370,6 +5587,7 @@ examples: parameters: query: sectionId: "" + type: 2 header: accepts: "application/xml" X-Plex-Client-Identifier: "abc123" @@ -5384,7 +5602,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 112848, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} listDVRs: speakeasy-default-list-DV-rs: responses: @@ -5567,7 +5785,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 834281, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} removeDeviceFromDVR: speakeasy-default-remove-device-from-DVR: parameters: @@ -5782,7 +6000,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 186347, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getSessionPlaylistIndex: speakeasy-default-get-session-playlist-index: parameters: @@ -6147,7 +6365,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"MediaSubscription": [{"MediaGrabOperation": [{"Metadata": {"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}]}} + application/json: {"MediaContainer": {"MediaSubscription": [{"MediaGrabOperation": [{"Metadata": {"title": "", "type": "", "addedAt": 516979, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}]}} createSubscription: speakeasy-default-create-subscription: parameters: @@ -6172,13 +6390,13 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"MediaSubscription": [{"MediaGrabOperation": [{"Metadata": {"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}]}} + application/json: {"MediaContainer": {"MediaSubscription": [{"MediaGrabOperation": [{"Metadata": {"title": "", "type": "", "addedAt": 868201, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}]}} processSubscriptions: {} getScheduledRecordings: speakeasy-default-get-scheduled-recordings: responses: "200": - application/json: {"MediaContainer": {"MediaGrabOperation": [{"Metadata": {"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}} + application/json: {"MediaContainer": {"MediaGrabOperation": [{"Metadata": {"title": "", "type": "", "addedAt": 478229, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}} getTemplate: speakeasy-default-get-template: parameters: @@ -6198,7 +6416,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"SubscriptionTemplate": [{"MediaSubscription": [{"title": "This Episode", "MediaGrabOperation": [{"Metadata": {"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}]}]}} + application/json: {"MediaContainer": {"SubscriptionTemplate": [{"MediaSubscription": [{"title": "This Episode", "MediaGrabOperation": [{"Metadata": {"title": "", "type": "", "addedAt": 655183, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}]}]}} cancelGrab: speakeasy-default-cancel-grab: parameters: @@ -6255,7 +6473,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"MediaSubscription": [{"MediaGrabOperation": [{"Metadata": {"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}]}} + application/json: {"MediaContainer": {"MediaSubscription": [{"MediaGrabOperation": [{"Metadata": {"title": "", "type": "", "addedAt": 186713, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}]}} editSubscriptionPreferences: speakeasy-default-edit-subscription-preferences: parameters: @@ -6277,7 +6495,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"MediaSubscription": [{"MediaGrabOperation": [{"Metadata": {"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}]}} + application/json: {"MediaContainer": {"MediaSubscription": [{"MediaGrabOperation": [{"Metadata": {"title": "", "type": "", "addedAt": 673918, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}]}} reorderSubscription: speakeasy-default-reorder-subscription: parameters: @@ -6297,7 +6515,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"MediaSubscription": [{"MediaGrabOperation": [{"Metadata": {"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}]}} + application/json: {"MediaContainer": {"MediaSubscription": [{"MediaGrabOperation": [{"Metadata": {"title": "", "type": "", "addedAt": 440634, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}]}} transcodeImage: speakeasy-default-transcode-image: parameters: @@ -6373,7 +6591,7 @@ examples: X-Plex-Client-Profile-Name: "generic" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 313548, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} triggerFallback: speakeasy-default-trigger-fallback: parameters: @@ -6504,7 +6722,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"key": "", "title": "", "type": "", "addedAt": 511190, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getPlaylistItems: speakeasy-default-get-playlist-items: parameters: @@ -6524,7 +6742,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 118195, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getPlaylistGenerators: speakeasy-default-get-playlist-generators: parameters: @@ -6564,7 +6782,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"key": "", "title": "", "type": "", "addedAt": 552140, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} addPlaylistItems: speakeasy-default-add-playlist-items: parameters: @@ -6584,7 +6802,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"key": "", "title": "", "type": "", "addedAt": 533723, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} deletePlaylistItem: speakeasy-default-delete-playlist-item: parameters: @@ -6605,7 +6823,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"key": "", "title": "", "type": "", "addedAt": 981646, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getPlaylistGenerator: speakeasy-default-get-playlist-generator: parameters: @@ -6647,7 +6865,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": {"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}} + application/json: {"MediaContainer": {"Metadata": {"title": "", "type": "", "addedAt": 77230, "art": "/library/metadata/58683/art/1703239236", "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "chapterSource": "media", "childCount": 1, "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "guid": "plex://movie/5d7768ba96b655001fdc0408", "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "lastViewedAt": 1556281940, "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "originallyAvailableAt": "2022-12-14", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "theme": "/library/metadata/1/theme/1705636920", "thumb": "/library/metadata/58683/thumb/1703239236", "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}} movePlaylistItem: speakeasy-default-move-playlist-item: parameters: @@ -6668,7 +6886,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"key": "", "title": "", "type": "", "addedAt": 940298, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} refreshPlaylist: speakeasy-default-refresh-playlist: parameters: @@ -6737,7 +6955,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"key": "", "title": "", "type": "", "addedAt": 210646, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} addToPlayQueue: speakeasy-default-add-to-play-queue: parameters: @@ -6759,7 +6977,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"key": "", "title": "", "type": "", "addedAt": 919248, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} clearPlayQueue: speakeasy-default-clear-play-queue: parameters: @@ -6779,7 +6997,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"key": "", "title": "", "type": "", "addedAt": 86357, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} resetPlayQueue: speakeasy-default-reset-play-queue: parameters: @@ -6799,7 +7017,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"key": "", "title": "", "type": "", "addedAt": 581891, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} shuffle: speakeasy-default-shuffle: parameters: @@ -6819,7 +7037,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"key": "", "title": "", "type": "", "addedAt": 316150, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} unshuffle: speakeasy-default-unshuffle: parameters: @@ -6839,7 +7057,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"key": "", "title": "", "type": "", "addedAt": 484388, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} deletePlayQueueItem: speakeasy-default-delete-play-queue-item: parameters: @@ -6860,7 +7078,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"key": "", "title": "", "type": "", "addedAt": 285738, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} movePlayQueueItem: speakeasy-default-move-play-queue-item: parameters: @@ -6881,7 +7099,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"key": "", "title": "", "type": "", "addedAt": 31341, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getColors: speakeasy-default-get-colors: parameters: @@ -6932,7 +7150,7 @@ examples: speakeasy-default-list-sessions: responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 103950, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getBackgroundTasks: speakeasy-default-get-background-tasks: responses: @@ -7057,7 +7275,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 314585, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getMetadataItem: speakeasy-default-get-metadata-item: parameters: @@ -7086,7 +7304,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 28609, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getAlbums: speakeasy-default-get-albums: parameters: @@ -7106,12 +7324,18 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 817133, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} listContent: speakeasy-default-list-content: parameters: path: sectionId: "" + query: + X-Plex-Container-Start: 0 + X-Plex-Container-Size: 50 + mediaQuery: {"type": 4, "sourceType": 2, "sort": "duration:desc,index"} + includeMeta: 1 + includeGuids: 1 header: accepts: "application/xml" X-Plex-Client-Identifier: "abc123" @@ -7126,7 +7350,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 813218, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getAllLeaves: speakeasy-default-get-all-leaves: parameters: @@ -7146,7 +7370,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 633197, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getArts: speakeasy-default-get-arts: parameters: @@ -7229,7 +7453,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 914549, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getFolders: speakeasy-default-get-folders: parameters: @@ -7291,7 +7515,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 525956, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getCollectionImage: speakeasy-default-get-collection-image: parameters: @@ -7334,7 +7558,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 338144, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} deleteCollectionItem: speakeasy-default-delete-collection-item: parameters: @@ -7355,7 +7579,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 320928, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} moveCollectionItem: speakeasy-default-move-collection-item: parameters: @@ -7376,6 +7600,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 239532, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} examplesVersion: 1.0.2 generatedTests: {} +releaseNotes: "## Csharp SDK Changes:\n* `PlexApi.LibraryPlaylists.AddPlaylistItems()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.LibraryPlaylists.ClearPlaylistItems()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.LibraryCollections.MoveCollectionItem()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.LibraryCollections.DeleteCollectionItem()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.LibraryCollections.AddCollectionItems()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Content.GetSonicallySimilar()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Butler.StopTask()`: `request` **Changed** **Breaking** :warning:\n* `PlexApi.Butler.StartTask()`: `request` **Changed** **Breaking** :warning:\n* `PlexApi.Content.GetSonicPath()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.DownloadQueue.GetItemDecision()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Hubs.GetAllHubs()`: \n * `request.OnlyTransient` **Changed**\n * `response.mediaContainer.Hub.[].Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Hubs.GetContinueWatching()`: `response.mediaContainer.Hub.[].Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Hubs.GetPromotedHubs()`: `response.mediaContainer.Hub.[].Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Hubs.GetMetadataHubs()`: \n * `request.OnlyTransient` **Changed**\n * `response.mediaContainer.Hub.[].Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Hubs.GetPostplayHubs()`: \n * `request.OnlyTransient` **Changed**\n * `response.mediaContainer.Hub.[].Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Hubs.GetRelatedHubs()`: \n * `request.OnlyTransient` **Changed**\n * `response.mediaContainer.Hub.[].Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Hubs.GetSectionHubs()`: \n * `request.OnlyTransient` **Changed**\n * `response.mediaContainer.Hub.[].Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Content.GetAllLeaves()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Content.ListContent()`: \n * `request` **Changed**\n * `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Search.SearchHubs()`: `response.mediaContainer.Hub.[].Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Content.GetAlbums()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Library.GetLibraryItems()`: \n * `request.MediaQuery` **Changed**\n * `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Library.IngestTransientItem()`: \n * `request` **Changed**\n * `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Library.GetLibraryMatches()`: \n * `request` **Changed** **Breaking** :warning:\n * `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Content.GetMetadataItem()`: \n * `request` **Changed**\n * `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Library.GetSections()`: `response.mediaContainer.Directory.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Library.AddSection()`: \n * `request` **Changed**\n * `response.mediaContainer.Directory.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Library.GetTags()`: \n * `request.Type` **Changed** **Breaking** :warning:\n* `PlexApi.Content.GetCollectionItems()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Library.GetAllItemLeaves()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Status.ListSessions()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.PlayQueue.MovePlayQueueItem()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Library.GetExtras()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.PlayQueue.DeletePlayQueueItem()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.PlayQueue.Unshuffle()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Library.ListMatches()`: \n * `request.Manual` **Changed**\n * `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Library.ListSonicallySimilar()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.PlayQueue.Shuffle()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Library.GetRelatedItems()`: `response.mediaContainer.Hub.[].Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Library.ListSimilar()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.PlayQueue.ResetPlayQueue()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Library.GetItemTree()`: `response.mediaContainer.MetadataItem.[]` **Changed** **Breaking** :warning:\n* `PlexApi.PlayQueue.ClearPlayQueue()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.PlayQueue.AddToPlayQueue()`: \n * `request.Next` **Changed**\n * `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Library.GetCommon()`: \n * `request.MediaQuery` **Changed**\n * `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Library.GetPerson()`: `response.mediaContainer.Directory.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Library.ListPersonMedia()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.PlayQueue.GetPlayQueue()`: \n * `request` **Changed**\n * `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Library.GetLibraryDetails()`: \n * `request.IncludeDetails` **Changed**\n * `response.mediaContainer.Directory.[]` **Changed** **Breaking** :warning:\n* `PlexApi.LibraryPlaylists.MovePlaylistItem()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Library.Autocomplete()`: \n * `request.MediaQuery` **Changed**\n * `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Library.GetCollections()`: \n * `request.MediaQuery` **Changed**\n * `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.LibraryPlaylists.GetPlaylistGeneratorItems()`: `response.mediaContainer.Metadata` **Changed** **Breaking** :warning:\n* `PlexApi.LibraryPlaylists.DeletePlaylistItem()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Search.VoiceSearchHubs()`: \n * `request.Type` **Changed** **Breaking** :warning:\n * `response.mediaContainer.Hub.[].Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.LibraryPlaylists.CreatePlaylist()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Playlist.GetPlaylistItems()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Playlist.GetPlaylist()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Playlist.ListPlaylists()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Collections.CreateCollection()`: \n * `request.Type` **Changed** **Breaking** :warning:\n * `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.DvRs.TuneChannel()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.LiveTv.GetSessions()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.LiveTv.GetLiveTvSession()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Transcoder.MakeDecision()`: \n * `request` **Changed**\n * `response.mediaContainer.Metadata.[]` **Changed** **Breaking** :warning:\n* `PlexApi.Subscriptions.GetAllSubscriptions()`: \n * `request` **Changed**\n * `response.mediaContainer.MediaSubscription.[].MediaGrabOperation.[].Metadata` **Changed** **Breaking** :warning:\n* `PlexApi.Subscriptions.CreateSubscription()`: `response.mediaContainer.MediaSubscription.[].MediaGrabOperation.[].Metadata` **Changed** **Breaking** :warning:\n* `PlexApi.Subscriptions.GetScheduledRecordings()`: `response.mediaContainer.MediaGrabOperation.[].Metadata` **Changed** **Breaking** :warning:\n* `PlexApi.Subscriptions.GetTemplate()`: `response.mediaContainer.SubscriptionTemplate.[].MediaSubscription.[].MediaGrabOperation.[].Metadata` **Changed** **Breaking** :warning:\n* `PlexApi.Subscriptions.GetSubscription()`: \n * `request` **Changed**\n * `response.mediaContainer.MediaSubscription.[].MediaGrabOperation.[].Metadata` **Changed** **Breaking** :warning:\n* `PlexApi.Subscriptions.EditSubscriptionPreferences()`: `response.mediaContainer.MediaSubscription.[].MediaGrabOperation.[].Metadata` **Changed** **Breaking** :warning:\n* `PlexApi.Subscriptions.ReorderSubscription()`: `response.mediaContainer.MediaSubscription.[].MediaGrabOperation.[].Metadata` **Changed** **Breaking** :warning:\n* `PlexApi.Library.AddSubtitles()`: `request` **Changed**\n* `PlexApi.LibraryPlaylists.UploadPlaylist()`: \n * `request.Force` **Changed**\n* `PlexApi.Transcoder.TranscodeSubtitles()`: `request` **Changed**\n* `PlexApi.Transcoder.StartTranscodeSession()`: `request` **Changed**\n* `PlexApi.Library.GetMediaPart()`: \n * `request.Download` **Changed**\n* `PlexApi.Library.DetectIntros()`: \n * `request.Force` **Changed**\n* `PlexApi.Library.GetSectionImage()`: \n * `request.MediaQuery` **Changed**\n* `PlexApi.Library.DeleteMediaItem()`: \n * `request.Proxy` **Changed**\n* `PlexApi.Library.RefreshItemsMetadata()`: \n * `request.MarkUpdated` **Changed**\n* `PlexApi.Authentication.Post-Users-Sign-In-Data()`: **Added**\n* `PlexApi.Authentication.GetTokenDetails()`: **Added**\n* `PlexApi.Library.DetectCredits()`: `request` **Changed**\n* `PlexApi.Library.SetStreamSelection()`: \n * `request.AllParts` **Changed**\n* `PlexApi.Library.UpdateItems()`: \n * `request.Field.locked` **Changed**\n* `PlexApi.PlayQueue.CreatePlayQueue()`: `request` **Changed**\n* `PlexApi.Library.DeleteLibrarySection()`: \n * `request.Async` **Changed**\n* `PlexApi.Library.GetAugmentationStatus()`: \n * `request.Wait` **Changed**\n* `PlexApi.Transcoder.TranscodeImage()`: `request` **Changed**\n* `PlexApi.Devices.ModifyDevice()`: \n * `request.Enabled` **Changed**\n* `PlexApi.Library.DetectVoiceActivity()`: `request` **Changed**\n* `PlexApi.Library.GetStream()`: \n * `request.AutoAdjustSubtitle` **Changed**\n* `PlexApi.Library.StartBifGeneration()`: \n * `request.Force` **Changed**\n* `PlexApi.Library.GetFirstCharacters()`: \n * `request.MediaQuery` **Changed**\n* `PlexApi.UltraBlur.GetImage()`: \n * `request.Noise` **Changed**\n* `PlexApi.Library.GenerateThumbs()`: \n * `request.Force` **Changed**\n* `PlexApi.Updater.ApplyUpdates()`: `request` **Changed**\n* `PlexApi.Updater.CheckUpdates()`: \n * `request.Download` **Changed**\n* `PlexApi.Library.DeleteMetadataItem()`: \n * `request.Proxy` **Changed**\n* `PlexApi.Library.OptimizeDatabase()`: \n * `request.Async` **Changed**\n* `PlexApi.Library.RefreshSection()`: \n * `request.Force` **Changed**\n* `PlexApi.Hubs.UpdateHubVisibility()`: `request` **Changed**\n* `PlexApi.Hubs.CreateCustomHub()`: `request` **Changed**\n* `PlexApi.DownloadQueue.AddDownloadQueueItems()`: `request` **Changed**\n* `PlexApi.Timeline.Report()`: `request` **Changed**\n* `PlexApi.General.GetSourceConnectionInformation()`: \n * `request.Refresh` **Changed**\n* `PlexApi.Plex.Get-Server-Resources()`: **Added**\n* `PlexApi.Users.Get-Users()`: **Added**\n" diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 8036b7b..1ab03e7 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -25,7 +25,7 @@ generation: generateNewTests: false skipResponseBodyAssertions: false csharp: - version: 0.19.1 + version: 0.20.0 additionalDependencies: [] author: LukeHagar baseErrorName: PlexAPIError @@ -47,9 +47,11 @@ csharp: shared: Models/Components webhooks: Models/Webhooks includeDebugSymbols: true + inferUnionDiscriminators: false inputModelSuffix: input maxMethodParams: 4 methodArguments: infer-optional-args + multipartArrayFormat: legacy outputModelSuffix: output packageName: LukeHagar.PlexAPI.SDK packageTags: Plex Media Server SDK diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 4f99232..2146406 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -1,4 +1,4 @@ -speakeasyVersion: 1.656.1 +speakeasyVersion: 1.665.0 sources: my-source: sourceNamespace: my-source @@ -16,20 +16,20 @@ sources: - main plexapi: sourceNamespace: plexapi - sourceRevisionDigest: sha256:56fc783b16af019db4eb0fe52df504315e8e7c7ae41e319a61bba8823f19df4b - sourceBlobDigest: sha256:b62613477fd824bb42cf0bf5d0f9980448259c9c7456e03ca6a10eef39a3994f + sourceRevisionDigest: sha256:ace004a3b232e8ab9ca3d89f2da8e40470236e6d997073a16c3f8872d67a7383 + sourceBlobDigest: sha256:993bfb796a3833b0a3b813ad12469ca34db94f23c2d15ae988a26b4d1ed80fbe tags: - latest - - speakeasy-sdk-regen-1762993511 + - speakeasy-sdk-regen-1764549074 - 1.1.1 targets: plexcsharp: source: plexapi sourceNamespace: plexapi - sourceRevisionDigest: sha256:56fc783b16af019db4eb0fe52df504315e8e7c7ae41e319a61bba8823f19df4b - sourceBlobDigest: sha256:b62613477fd824bb42cf0bf5d0f9980448259c9c7456e03ca6a10eef39a3994f + sourceRevisionDigest: sha256:ace004a3b232e8ab9ca3d89f2da8e40470236e6d997073a16c3f8872d67a7383 + sourceBlobDigest: sha256:993bfb796a3833b0a3b813ad12469ca34db94f23c2d15ae988a26b4d1ed80fbe codeSamplesNamespace: code-samples-csharp-plexcsharp - codeSamplesRevisionDigest: sha256:afd93668dc1b2d774d361d321511b4a5655cbbfa606a8a41bbe498aab600f0e9 + codeSamplesRevisionDigest: sha256:1608b54b5bd352a497de07a555fe755ff438efc7fd0d0f42fb1021dda420e88f workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/LukeHagar/PlexAPI/SDK/Activities.cs b/LukeHagar/PlexAPI/SDK/Activities.cs index 3f6fd5f..a1f75b1 100644 --- a/LukeHagar/PlexAPI/SDK/Activities.cs +++ b/LukeHagar/PlexAPI/SDK/Activities.cs @@ -69,10 +69,11 @@ namespace LukeHagar.PlexAPI.SDK public class Activities: IActivities { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public Activities(SDKConfig config) { @@ -187,7 +188,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/activities/{activityId}", request); + var urlString = URLBuilder.Build(baseUrl, "/activities/{activityId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/Authentication.cs b/LukeHagar/PlexAPI/SDK/Authentication.cs new file mode 100644 index 0000000..e4b179a --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Authentication.cs @@ -0,0 +1,372 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK +{ + using LukeHagar.PlexAPI.SDK.Hooks; + using LukeHagar.PlexAPI.SDK.Models.Components; + using LukeHagar.PlexAPI.SDK.Models.Errors; + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using LukeHagar.PlexAPI.SDK.Utils.Retries; + using Newtonsoft.Json; + using System; + using System.Collections.Generic; + using System.Net.Http; + using System.Net.Http.Headers; + using System.Threading.Tasks; + + public interface IAuthentication + { + + /// + /// Get Token Details + /// + /// + /// Get the User data from the provided X-Plex-Token + /// + /// + Task GetTokenDetailsAsync(GetTokenDetailsRequest? request = null, string? serverUrl = null); + + /// + /// Get User Sign In Data + /// + /// + /// Sign in user with username and password and return user data with Plex authentication token + /// + /// + Task PostUsersSignInDataAsync(PostUsersSignInDataRequest? request = null, string? serverUrl = null); + } + + public class Authentication: IAuthentication + { + /// + /// List of server URLs available for the getTokenDetails operation. + /// + public static readonly string[] GetTokenDetailsServerList = { + "https://plex.tv/api/v2", + }; + /// + /// List of server URLs available for the post-users-sign-in-data operation. + /// + public static readonly string[] PostUsersSignInDataServerList = { + "https://plex.tv/api/v2", + }; + public SDKConfig SDKConfiguration { get; private set; } + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; + + public Authentication(SDKConfig config) + { + SDKConfiguration = config; + } + + public async Task GetTokenDetailsAsync(GetTokenDetailsRequest? request = null, string? serverUrl = null) + { + request.Accepts ??= SDKConfiguration.Accepts; + request.ClientIdentifier ??= SDKConfiguration.ClientIdentifier; + request.Product ??= SDKConfiguration.Product; + request.Version ??= SDKConfiguration.Version; + request.Platform ??= SDKConfiguration.Platform; + request.PlatformVersion ??= SDKConfiguration.PlatformVersion; + request.Device ??= SDKConfiguration.Device; + request.Model ??= SDKConfiguration.Model; + request.DeviceVendor ??= SDKConfiguration.DeviceVendor; + request.DeviceName ??= SDKConfiguration.DeviceName; + request.Marketplace ??= SDKConfiguration.Marketplace; + + string baseUrl = Utilities.TemplateUrl(GetTokenDetailsServerList[0], new Dictionary(){ + }); + if (serverUrl != null) + { + baseUrl = serverUrl; + } + + var urlString = baseUrl + "/user"; + + var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); + HeaderSerializer.PopulateHeaders(ref httpRequest, request); + + if (SDKConfiguration.SecuritySource != null) + { + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); + } + + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "getTokenDetails", null, SDKConfiguration.SecuritySource); + + httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); + + HttpResponseMessage httpResponse; + try + { + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); + int _statusCode = (int)httpResponse.StatusCode; + + if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) + { + var _httpResponse = await this.SDKConfiguration.Hooks.AfterErrorAsync(new AfterErrorContext(hookCtx), httpResponse, null); + if (_httpResponse != null) + { + httpResponse = _httpResponse; + } + } + } + catch (Exception error) + { + var _httpResponse = await this.SDKConfiguration.Hooks.AfterErrorAsync(new AfterErrorContext(hookCtx), null, error); + if (_httpResponse != null) + { + httpResponse = _httpResponse; + } + else + { + throw; + } + } + + httpResponse = await this.SDKConfiguration.Hooks.AfterSuccessAsync(new AfterSuccessContext(hookCtx), httpResponse); + + var contentType = httpResponse.Content.Headers.ContentType?.MediaType; + int responseStatusCode = (int)httpResponse.StatusCode; + if(responseStatusCode == 200) + { + if(Utilities.IsContentTypeMatch("application/json", contentType)) + { + var httpResponseBody = await httpResponse.Content.ReadAsStringAsync(); + UserPlexAccount obj; + try + { + obj = ResponseBodyDeserializer.DeserializeNotNull(httpResponseBody, NullValueHandling.Include); + } + catch (Exception ex) + { + throw new ResponseValidationException("Failed to deserialize response body into UserPlexAccount.", httpResponse, httpResponseBody, ex); + } + + var response = new GetTokenDetailsResponse() + { + StatusCode = responseStatusCode, + ContentType = contentType, + RawResponse = httpResponse + }; + response.UserPlexAccount = obj; + return response; + } + + throw new Models.Errors.SDKException("Unknown content type received", httpResponse, await httpResponse.Content.ReadAsStringAsync()); + } + else if(responseStatusCode == 400) + { + if(Utilities.IsContentTypeMatch("application/json", contentType)) + { + var httpResponseBody = await httpResponse.Content.ReadAsStringAsync(); + GetTokenDetailsBadRequestPayload payload; + try + { + payload = ResponseBodyDeserializer.DeserializeNotNull(httpResponseBody, NullValueHandling.Include); + } + catch (Exception ex) + { + throw new ResponseValidationException("Failed to deserialize response body into GetTokenDetailsBadRequestPayload.", httpResponse, httpResponseBody, ex); + } + + payload.RawResponse = httpResponse; + throw new GetTokenDetailsBadRequest(payload, httpResponse, httpResponseBody); + } + + throw new Models.Errors.SDKException("Unknown content type received", httpResponse, await httpResponse.Content.ReadAsStringAsync()); + } + else if(responseStatusCode == 401) + { + if(Utilities.IsContentTypeMatch("application/json", contentType)) + { + var httpResponseBody = await httpResponse.Content.ReadAsStringAsync(); + GetTokenDetailsUnauthorizedPayload payload; + try + { + payload = ResponseBodyDeserializer.DeserializeNotNull(httpResponseBody, NullValueHandling.Include); + } + catch (Exception ex) + { + throw new ResponseValidationException("Failed to deserialize response body into GetTokenDetailsUnauthorizedPayload.", httpResponse, httpResponseBody, ex); + } + + payload.RawResponse = httpResponse; + throw new GetTokenDetailsUnauthorized(payload, httpResponse, httpResponseBody); + } + + throw new Models.Errors.SDKException("Unknown content type received", httpResponse, await httpResponse.Content.ReadAsStringAsync()); + } + else if(responseStatusCode >= 400 && responseStatusCode < 500) + { + throw new Models.Errors.SDKException("API error occurred", httpResponse, await httpResponse.Content.ReadAsStringAsync()); + } + else if(responseStatusCode >= 500 && responseStatusCode < 600) + { + throw new Models.Errors.SDKException("API error occurred", httpResponse, await httpResponse.Content.ReadAsStringAsync()); + } + + throw new Models.Errors.SDKException("Unknown status code received", httpResponse, await httpResponse.Content.ReadAsStringAsync()); + } + + public async Task PostUsersSignInDataAsync(PostUsersSignInDataRequest? request = null, string? serverUrl = null) + { + request.Accepts ??= SDKConfiguration.Accepts; + request.ClientIdentifier ??= SDKConfiguration.ClientIdentifier; + request.Product ??= SDKConfiguration.Product; + request.Version ??= SDKConfiguration.Version; + request.Platform ??= SDKConfiguration.Platform; + request.PlatformVersion ??= SDKConfiguration.PlatformVersion; + request.Device ??= SDKConfiguration.Device; + request.Model ??= SDKConfiguration.Model; + request.DeviceVendor ??= SDKConfiguration.DeviceVendor; + request.DeviceName ??= SDKConfiguration.DeviceName; + request.Marketplace ??= SDKConfiguration.Marketplace; + + string baseUrl = Utilities.TemplateUrl(PostUsersSignInDataServerList[0], new Dictionary(){ + }); + if (serverUrl != null) + { + baseUrl = serverUrl; + } + + var urlString = baseUrl + "/users/signin"; + + var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); + HeaderSerializer.PopulateHeaders(ref httpRequest, request); + + var serializedBody = RequestBodySerializer.Serialize(request, "RequestBody", "form", false, true); + if (serializedBody != null) + { + httpRequest.Content = serializedBody; + } + + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "post-users-sign-in-data", null, null); + + httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); + + HttpResponseMessage httpResponse; + try + { + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); + int _statusCode = (int)httpResponse.StatusCode; + + if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) + { + var _httpResponse = await this.SDKConfiguration.Hooks.AfterErrorAsync(new AfterErrorContext(hookCtx), httpResponse, null); + if (_httpResponse != null) + { + httpResponse = _httpResponse; + } + } + } + catch (Exception error) + { + var _httpResponse = await this.SDKConfiguration.Hooks.AfterErrorAsync(new AfterErrorContext(hookCtx), null, error); + if (_httpResponse != null) + { + httpResponse = _httpResponse; + } + else + { + throw; + } + } + + httpResponse = await this.SDKConfiguration.Hooks.AfterSuccessAsync(new AfterSuccessContext(hookCtx), httpResponse); + + var contentType = httpResponse.Content.Headers.ContentType?.MediaType; + int responseStatusCode = (int)httpResponse.StatusCode; + if(responseStatusCode == 201) + { + if(Utilities.IsContentTypeMatch("application/json", contentType)) + { + var httpResponseBody = await httpResponse.Content.ReadAsStringAsync(); + PostUsersSignInDataUserPlexAccount obj; + try + { + obj = ResponseBodyDeserializer.DeserializeNotNull(httpResponseBody, NullValueHandling.Include); + } + catch (Exception ex) + { + throw new ResponseValidationException("Failed to deserialize response body into PostUsersSignInDataUserPlexAccount.", httpResponse, httpResponseBody, ex); + } + + var response = new PostUsersSignInDataResponse() + { + StatusCode = responseStatusCode, + ContentType = contentType, + RawResponse = httpResponse + }; + response.UserPlexAccount = obj; + return response; + } + + throw new Models.Errors.SDKException("Unknown content type received", httpResponse, await httpResponse.Content.ReadAsStringAsync()); + } + else if(responseStatusCode == 400) + { + if(Utilities.IsContentTypeMatch("application/json", contentType)) + { + var httpResponseBody = await httpResponse.Content.ReadAsStringAsync(); + PostUsersSignInDataBadRequestPayload payload; + try + { + payload = ResponseBodyDeserializer.DeserializeNotNull(httpResponseBody, NullValueHandling.Include); + } + catch (Exception ex) + { + throw new ResponseValidationException("Failed to deserialize response body into PostUsersSignInDataBadRequestPayload.", httpResponse, httpResponseBody, ex); + } + + payload.RawResponse = httpResponse; + throw new PostUsersSignInDataBadRequest(payload, httpResponse, httpResponseBody); + } + + throw new Models.Errors.SDKException("Unknown content type received", httpResponse, await httpResponse.Content.ReadAsStringAsync()); + } + else if(responseStatusCode == 401) + { + if(Utilities.IsContentTypeMatch("application/json", contentType)) + { + var httpResponseBody = await httpResponse.Content.ReadAsStringAsync(); + PostUsersSignInDataUnauthorizedPayload payload; + try + { + payload = ResponseBodyDeserializer.DeserializeNotNull(httpResponseBody, NullValueHandling.Include); + } + catch (Exception ex) + { + throw new ResponseValidationException("Failed to deserialize response body into PostUsersSignInDataUnauthorizedPayload.", httpResponse, httpResponseBody, ex); + } + + payload.RawResponse = httpResponse; + throw new PostUsersSignInDataUnauthorized(payload, httpResponse, httpResponseBody); + } + + throw new Models.Errors.SDKException("Unknown content type received", httpResponse, await httpResponse.Content.ReadAsStringAsync()); + } + else if(responseStatusCode >= 400 && responseStatusCode < 500) + { + throw new Models.Errors.SDKException("API error occurred", httpResponse, await httpResponse.Content.ReadAsStringAsync()); + } + else if(responseStatusCode >= 500 && responseStatusCode < 600) + { + throw new Models.Errors.SDKException("API error occurred", httpResponse, await httpResponse.Content.ReadAsStringAsync()); + } + + throw new Models.Errors.SDKException("Unknown status code received", httpResponse, await httpResponse.Content.ReadAsStringAsync()); + } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Butler.cs b/LukeHagar/PlexAPI/SDK/Butler.cs index aaf22e7..a5ed8dc 100644 --- a/LukeHagar/PlexAPI/SDK/Butler.cs +++ b/LukeHagar/PlexAPI/SDK/Butler.cs @@ -89,10 +89,11 @@ namespace LukeHagar.PlexAPI.SDK public class Butler: IButler { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public Butler(SDKConfig config) { @@ -349,7 +350,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/butler/{task}", request); + var urlString = URLBuilder.Build(baseUrl, "/butler/{butlerTask}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -436,7 +437,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/butler/{task}", request); + var urlString = URLBuilder.Build(baseUrl, "/butler/{butlerTask}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/Collections.cs b/LukeHagar/PlexAPI/SDK/Collections.cs index 057968c..44f0783 100644 --- a/LukeHagar/PlexAPI/SDK/Collections.cs +++ b/LukeHagar/PlexAPI/SDK/Collections.cs @@ -44,10 +44,11 @@ namespace LukeHagar.PlexAPI.SDK public class Collections: ICollections { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public Collections(SDKConfig config) { @@ -73,7 +74,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/collections", request); + var urlString = URLBuilder.Build(baseUrl, "/library/collections", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/Content.cs b/LukeHagar/PlexAPI/SDK/Content.cs index 5875622..132c884 100644 --- a/LukeHagar/PlexAPI/SDK/Content.cs +++ b/LukeHagar/PlexAPI/SDK/Content.cs @@ -152,10 +152,11 @@ namespace LukeHagar.PlexAPI.SDK public class Content: IContent { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public Content(SDKConfig config) { @@ -181,7 +182,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/collections/{collectionId}/items", request); + var urlString = URLBuilder.Build(baseUrl, "/library/collections/{collectionId}/items", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -286,7 +287,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -391,7 +392,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/albums", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/albums", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -496,7 +497,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/all", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/all", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -601,7 +602,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/allLeaves", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/allLeaves", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -706,7 +707,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/arts", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/arts", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -811,7 +812,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/categories", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/categories", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -916,7 +917,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/cluster", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/cluster", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1021,7 +1022,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/computePath", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/computePath", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1126,7 +1127,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/location", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/location", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1231,7 +1232,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/moment", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/moment", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1336,7 +1337,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/nearest", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/nearest", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1441,7 +1442,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/collections/{collectionId}/composite/{updatedAt}", request); + var urlString = URLBuilder.Build(baseUrl, "/library/collections/{collectionId}/composite/{updatedAt}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/DVRs.cs b/LukeHagar/PlexAPI/SDK/DVRs.cs index af0cb3f..6fb39b3 100644 --- a/LukeHagar/PlexAPI/SDK/DVRs.cs +++ b/LukeHagar/PlexAPI/SDK/DVRs.cs @@ -151,10 +151,11 @@ namespace LukeHagar.PlexAPI.SDK public class DVRs: IDVRs { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public DVRs(SDKConfig config) { @@ -265,7 +266,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/livetv/dvrs", request); + var urlString = URLBuilder.Build(baseUrl, "/livetv/dvrs", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -370,7 +371,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/livetv/dvrs/{dvrId}", request); + var urlString = URLBuilder.Build(baseUrl, "/livetv/dvrs/{dvrId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -457,7 +458,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/livetv/dvrs/{dvrId}", request); + var urlString = URLBuilder.Build(baseUrl, "/livetv/dvrs/{dvrId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -562,7 +563,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/livetv/dvrs/{dvrId}/lineups", request); + var urlString = URLBuilder.Build(baseUrl, "/livetv/dvrs/{dvrId}/lineups", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -667,7 +668,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/livetv/dvrs/{dvrId}/lineups", request); + var urlString = URLBuilder.Build(baseUrl, "/livetv/dvrs/{dvrId}/lineups", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -772,7 +773,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/livetv/dvrs/{dvrId}/prefs", request); + var urlString = URLBuilder.Build(baseUrl, "/livetv/dvrs/{dvrId}/prefs", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -877,7 +878,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/livetv/dvrs/{dvrId}/reloadGuide", request); + var urlString = URLBuilder.Build(baseUrl, "/livetv/dvrs/{dvrId}/reloadGuide", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -964,7 +965,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/livetv/dvrs/{dvrId}/reloadGuide", request); + var urlString = URLBuilder.Build(baseUrl, "/livetv/dvrs/{dvrId}/reloadGuide", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1051,7 +1052,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/livetv/dvrs/{dvrId}/channels/{channel}/tune", request); + var urlString = URLBuilder.Build(baseUrl, "/livetv/dvrs/{dvrId}/channels/{channel}/tune", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1156,7 +1157,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/livetv/dvrs/{dvrId}/devices/{deviceId}", request); + var urlString = URLBuilder.Build(baseUrl, "/livetv/dvrs/{dvrId}/devices/{deviceId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1261,7 +1262,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/livetv/dvrs/{dvrId}/devices/{deviceId}", request); + var urlString = URLBuilder.Build(baseUrl, "/livetv/dvrs/{dvrId}/devices/{deviceId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/Devices.cs b/LukeHagar/PlexAPI/SDK/Devices.cs index e95058c..12c89c5 100644 --- a/LukeHagar/PlexAPI/SDK/Devices.cs +++ b/LukeHagar/PlexAPI/SDK/Devices.cs @@ -226,10 +226,11 @@ namespace LukeHagar.PlexAPI.SDK public class Devices: IDevices { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public Devices(SDKConfig config) { @@ -251,7 +252,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/media/grabbers", request); + var urlString = URLBuilder.Build(baseUrl, "/media/grabbers", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -441,7 +442,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/media/grabbers/devices", request); + var urlString = URLBuilder.Build(baseUrl, "/media/grabbers/devices", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -635,7 +636,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/media/grabbers/devices/{deviceId}", request); + var urlString = URLBuilder.Build(baseUrl, "/media/grabbers/devices/{deviceId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -740,7 +741,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/media/grabbers/devices/{deviceId}", request); + var urlString = URLBuilder.Build(baseUrl, "/media/grabbers/devices/{deviceId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -845,7 +846,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/media/grabbers/devices/{deviceId}", request); + var urlString = URLBuilder.Build(baseUrl, "/media/grabbers/devices/{deviceId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -950,7 +951,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/media/grabbers/devices/{deviceId}/channelmap", request); + var urlString = URLBuilder.Build(baseUrl, "/media/grabbers/devices/{deviceId}/channelmap", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1055,7 +1056,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/media/grabbers/devices/{deviceId}/channels", request); + var urlString = URLBuilder.Build(baseUrl, "/media/grabbers/devices/{deviceId}/channels", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1160,7 +1161,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/media/grabbers/devices/{deviceId}/prefs", request); + var urlString = URLBuilder.Build(baseUrl, "/media/grabbers/devices/{deviceId}/prefs", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1247,7 +1248,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/media/grabbers/devices/{deviceId}/scan", request); + var urlString = URLBuilder.Build(baseUrl, "/media/grabbers/devices/{deviceId}/scan", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1352,7 +1353,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/media/grabbers/devices/{deviceId}/scan", request); + var urlString = URLBuilder.Build(baseUrl, "/media/grabbers/devices/{deviceId}/scan", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1457,7 +1458,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/media/grabbers/devices/{deviceId}/thumb/{version}", request); + var urlString = URLBuilder.Build(baseUrl, "/media/grabbers/devices/{deviceId}/thumb/{version}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/DownloadQueue.cs b/LukeHagar/PlexAPI/SDK/DownloadQueue.cs index f77345f..261b74a 100644 --- a/LukeHagar/PlexAPI/SDK/DownloadQueue.cs +++ b/LukeHagar/PlexAPI/SDK/DownloadQueue.cs @@ -140,10 +140,11 @@ namespace LukeHagar.PlexAPI.SDK public class DownloadQueue: IDownloadQueue { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public DownloadQueue(SDKConfig config) { @@ -258,7 +259,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/downloadQueue/{queueId}", request); + var urlString = URLBuilder.Build(baseUrl, "/downloadQueue/{queueId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -363,7 +364,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/downloadQueue/{queueId}/add", request); + var urlString = URLBuilder.Build(baseUrl, "/downloadQueue/{queueId}/add", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -468,7 +469,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/downloadQueue/{queueId}/items", request); + var urlString = URLBuilder.Build(baseUrl, "/downloadQueue/{queueId}/items", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -573,7 +574,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/downloadQueue/{queueId}/item/{itemId}/decision", request); + var urlString = URLBuilder.Build(baseUrl, "/downloadQueue/{queueId}/item/{itemId}/decision", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -678,7 +679,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/downloadQueue/{queueId}/item/{itemId}/media", request); + var urlString = URLBuilder.Build(baseUrl, "/downloadQueue/{queueId}/item/{itemId}/media", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -769,7 +770,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/downloadQueue/{queueId}/items/{itemId}", request); + var urlString = URLBuilder.Build(baseUrl, "/downloadQueue/{queueId}/items/{itemId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -856,7 +857,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/downloadQueue/{queueId}/items/{itemId}", request); + var urlString = URLBuilder.Build(baseUrl, "/downloadQueue/{queueId}/items/{itemId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -961,7 +962,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/downloadQueue/{queueId}/items/{itemId}/restart", request); + var urlString = URLBuilder.Build(baseUrl, "/downloadQueue/{queueId}/items/{itemId}/restart", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/Epg.cs b/LukeHagar/PlexAPI/SDK/Epg.cs index 60e6dac..f16d3aa 100644 --- a/LukeHagar/PlexAPI/SDK/Epg.cs +++ b/LukeHagar/PlexAPI/SDK/Epg.cs @@ -124,10 +124,11 @@ namespace LukeHagar.PlexAPI.SDK public class Epg: IEpg { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public Epg(SDKConfig config) { @@ -153,7 +154,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/livetv/epg/channelmap", request); + var urlString = URLBuilder.Build(baseUrl, "/livetv/epg/channelmap", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -258,7 +259,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/livetv/epg/channels", request); + var urlString = URLBuilder.Build(baseUrl, "/livetv/epg/channels", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -541,7 +542,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/livetv/epg/lineup", request); + var urlString = URLBuilder.Build(baseUrl, "/livetv/epg/lineup", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -628,7 +629,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/livetv/epg/lineupchannels", request); + var urlString = URLBuilder.Build(baseUrl, "/livetv/epg/lineupchannels", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -733,7 +734,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/livetv/epg/countries/{country}/{epgId}/lineups", request); + var urlString = URLBuilder.Build(baseUrl, "/livetv/epg/countries/{country}/{epgId}/lineups", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -838,7 +839,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/livetv/epg/countries/{country}/{epgId}/regions", request); + var urlString = URLBuilder.Build(baseUrl, "/livetv/epg/countries/{country}/{epgId}/regions", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -943,7 +944,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/livetv/epg/countries/{country}/{epgId}/regions/{region}/lineups", request); + var urlString = URLBuilder.Build(baseUrl, "/livetv/epg/countries/{country}/{epgId}/regions/{region}/lineups", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/Events.cs b/LukeHagar/PlexAPI/SDK/Events.cs index 6c5fa58..9e80ccf 100644 --- a/LukeHagar/PlexAPI/SDK/Events.cs +++ b/LukeHagar/PlexAPI/SDK/Events.cs @@ -64,10 +64,11 @@ namespace LukeHagar.PlexAPI.SDK public class Events: IEvents { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public Events(SDKConfig config) { @@ -89,7 +90,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/:/eventsource/notifications", request); + var urlString = URLBuilder.Build(baseUrl, "/:/eventsource/notifications", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -179,7 +180,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/:/websocket/notifications", request); + var urlString = URLBuilder.Build(baseUrl, "/:/websocket/notifications", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/General.cs b/LukeHagar/PlexAPI/SDK/General.cs index 11e7ed8..b6b3326 100644 --- a/LukeHagar/PlexAPI/SDK/General.cs +++ b/LukeHagar/PlexAPI/SDK/General.cs @@ -72,10 +72,11 @@ namespace LukeHagar.PlexAPI.SDK public class General: IGeneral { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public General(SDKConfig config) { @@ -287,7 +288,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/security/resources", request); + var urlString = URLBuilder.Build(baseUrl, "/security/resources", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -392,7 +393,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/security/token", request); + var urlString = URLBuilder.Build(baseUrl, "/security/token", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/Hubs.cs b/LukeHagar/PlexAPI/SDK/Hubs.cs index c3bca3b..d7b7694 100644 --- a/LukeHagar/PlexAPI/SDK/Hubs.cs +++ b/LukeHagar/PlexAPI/SDK/Hubs.cs @@ -161,10 +161,11 @@ namespace LukeHagar.PlexAPI.SDK public class Hubs: IHubs { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public Hubs(SDKConfig config) { @@ -186,7 +187,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/hubs", request); + var urlString = URLBuilder.Build(baseUrl, "/hubs", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -287,7 +288,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/hubs/continueWatching", request); + var urlString = URLBuilder.Build(baseUrl, "/hubs/continueWatching", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -392,7 +393,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/hubs/items", request); + var urlString = URLBuilder.Build(baseUrl, "/hubs/items", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -493,7 +494,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/hubs/promoted", request); + var urlString = URLBuilder.Build(baseUrl, "/hubs/promoted", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -598,7 +599,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/hubs/metadata/{metadataId}", request); + var urlString = URLBuilder.Build(baseUrl, "/hubs/metadata/{metadataId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -703,7 +704,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/hubs/metadata/{metadataId}/postplay", request); + var urlString = URLBuilder.Build(baseUrl, "/hubs/metadata/{metadataId}/postplay", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -808,7 +809,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/hubs/metadata/{metadataId}/related", request); + var urlString = URLBuilder.Build(baseUrl, "/hubs/metadata/{metadataId}/related", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -913,7 +914,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/hubs/sections/{sectionId}", request); + var urlString = URLBuilder.Build(baseUrl, "/hubs/sections/{sectionId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1018,7 +1019,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/hubs/sections/{sectionId}/manage", request); + var urlString = URLBuilder.Build(baseUrl, "/hubs/sections/{sectionId}/manage", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1105,7 +1106,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/hubs/sections/{sectionId}/manage", request); + var urlString = URLBuilder.Build(baseUrl, "/hubs/sections/{sectionId}/manage", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1210,7 +1211,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/hubs/sections/{sectionId}/manage", request); + var urlString = URLBuilder.Build(baseUrl, "/hubs/sections/{sectionId}/manage", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1297,7 +1298,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/hubs/sections/{sectionId}/manage/move", request); + var urlString = URLBuilder.Build(baseUrl, "/hubs/sections/{sectionId}/manage/move", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1402,7 +1403,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/hubs/sections/{sectionId}/manage/{identifier}", request); + var urlString = URLBuilder.Build(baseUrl, "/hubs/sections/{sectionId}/manage/{identifier}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1489,7 +1490,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/hubs/sections/{sectionId}/manage/{identifier}", request); + var urlString = URLBuilder.Build(baseUrl, "/hubs/sections/{sectionId}/manage/{identifier}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/Library.cs b/LukeHagar/PlexAPI/SDK/Library.cs index 5609deb..dc08991 100644 --- a/LukeHagar/PlexAPI/SDK/Library.cs +++ b/LukeHagar/PlexAPI/SDK/Library.cs @@ -806,10 +806,11 @@ namespace LukeHagar.PlexAPI.SDK public class Library: ILibrary { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public Library(SDKConfig config) { @@ -831,7 +832,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/all", request); + var urlString = URLBuilder.Build(baseUrl, "/library/all", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1074,7 +1075,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/file", request); + var urlString = URLBuilder.Build(baseUrl, "/library/file", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1175,7 +1176,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/matches", request); + var urlString = URLBuilder.Build(baseUrl, "/library/matches", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1276,7 +1277,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/optimize", request); + var urlString = URLBuilder.Build(baseUrl, "/library/optimize", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1359,7 +1360,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/randomArtwork", request); + var urlString = URLBuilder.Build(baseUrl, "/library/randomArtwork", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1553,7 +1554,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/all", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/all", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1747,7 +1748,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/prefs", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/prefs", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1848,7 +1849,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/refresh", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/refresh", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1931,7 +1932,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/tags", request); + var urlString = URLBuilder.Build(baseUrl, "/library/tags", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -2036,7 +2037,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -2123,7 +2124,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -2210,7 +2211,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/addetect", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/addetect", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -2297,7 +2298,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/allLeaves", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/allLeaves", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -2402,7 +2403,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/analyze", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/analyze", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -2489,7 +2490,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/chapterThumbs", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/chapterThumbs", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -2576,7 +2577,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/credits", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/credits", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -2663,7 +2664,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/extras", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/extras", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -2768,7 +2769,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/extras", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/extras", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -2855,7 +2856,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/file", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/file", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -2960,7 +2961,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/index", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/index", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -3047,7 +3048,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/intro", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/intro", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -3134,7 +3135,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/marker", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/marker", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -3239,7 +3240,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/match", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/match", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -3326,7 +3327,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/matches", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/matches", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -3431,7 +3432,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/merge", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/merge", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -3518,7 +3519,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/nearest", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/nearest", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -3623,7 +3624,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/prefs", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/prefs", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -3710,7 +3711,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/refresh", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/refresh", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -3797,7 +3798,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/related", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/related", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -3902,7 +3903,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/similar", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/similar", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -4007,7 +4008,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/split", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/split", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -4094,7 +4095,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/subtitles", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/subtitles", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -4181,7 +4182,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/tree", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/tree", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -4286,7 +4287,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/unmatch", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/unmatch", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -4373,7 +4374,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/users/top", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/users/top", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -4478,7 +4479,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/voiceActivity", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/voiceActivity", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -4565,7 +4566,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/augmentations/{augmentationId}", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/augmentations/{augmentationId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -4652,7 +4653,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/parts/{partId}", request); + var urlString = URLBuilder.Build(baseUrl, "/library/parts/{partId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -4739,7 +4740,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/people/{personId}", request); + var urlString = URLBuilder.Build(baseUrl, "/library/people/{personId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -4844,7 +4845,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/people/{personId}/media", request); + var urlString = URLBuilder.Build(baseUrl, "/library/people/{personId}/media", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -4949,7 +4950,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -5036,7 +5037,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -5141,7 +5142,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -5228,7 +5229,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/all", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/all", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -5315,7 +5316,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/analyze", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/analyze", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -5402,7 +5403,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/autocomplete", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/autocomplete", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -5507,7 +5508,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/collections", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/collections", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -5612,7 +5613,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/common", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/common", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -5717,7 +5718,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/emptyTrash", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/emptyTrash", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -5804,7 +5805,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/filters", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/filters", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -5909,7 +5910,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/firstCharacters", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/firstCharacters", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -6014,7 +6015,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/indexes", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/indexes", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -6101,7 +6102,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/intros", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/intros", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -6188,7 +6189,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/prefs", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/prefs", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -6293,7 +6294,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/prefs", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/prefs", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -6380,7 +6381,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/refresh", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/refresh", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -6467,7 +6468,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/refresh", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/refresh", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -6554,7 +6555,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/sorts", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/sorts", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -6659,7 +6660,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/streams/{streamId}/levels", request); + var urlString = URLBuilder.Build(baseUrl, "/library/streams/{streamId}/levels", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -6764,7 +6765,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/streams/{streamId}/loudness", request); + var urlString = URLBuilder.Build(baseUrl, "/library/streams/{streamId}/loudness", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -6858,7 +6859,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/media/{mediaId}/chapterImages/{chapter}", request); + var urlString = URLBuilder.Build(baseUrl, "/library/media/{mediaId}/chapterImages/{chapter}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -6952,7 +6953,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/{element}", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/{element}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -7039,7 +7040,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/{element}", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/{element}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -7126,7 +7127,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/marker/{marker}", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/marker/{marker}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -7213,7 +7214,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/marker/{marker}", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/marker/{marker}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -7318,7 +7319,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/media/{mediaItem}", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/media/{mediaItem}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -7405,7 +7406,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/parts/{partId}/indexes/{index}", request); + var urlString = URLBuilder.Build(baseUrl, "/library/parts/{partId}/indexes/{index}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -7499,7 +7500,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/collection/{collectionId}", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/collection/{collectionId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -7586,7 +7587,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/composite/{updatedAt}", request); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/composite/{updatedAt}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -7673,7 +7674,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/streams/{streamId}.{ext}", request); + var urlString = URLBuilder.Build(baseUrl, "/library/streams/{streamId}.{ext}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -7760,7 +7761,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/streams/{streamId}.{ext}", request); + var urlString = URLBuilder.Build(baseUrl, "/library/streams/{streamId}.{ext}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -7847,7 +7848,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/streams/{streamId}.{ext}", request); + var urlString = URLBuilder.Build(baseUrl, "/library/streams/{streamId}.{ext}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -7934,7 +7935,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/{element}/{timestamp}", request); + var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ids}/{element}/{timestamp}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -8039,7 +8040,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/parts/{partId}/{changestamp}/{filename}", request); + var urlString = URLBuilder.Build(baseUrl, "/library/parts/{partId}/{changestamp}/{filename}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -8126,7 +8127,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/parts/{partId}/indexes/{index}/{offset}", request); + var urlString = URLBuilder.Build(baseUrl, "/library/parts/{partId}/indexes/{index}/{offset}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/LibraryCollections.cs b/LukeHagar/PlexAPI/SDK/LibraryCollections.cs index 6cca456..14f9851 100644 --- a/LukeHagar/PlexAPI/SDK/LibraryCollections.cs +++ b/LukeHagar/PlexAPI/SDK/LibraryCollections.cs @@ -62,10 +62,11 @@ namespace LukeHagar.PlexAPI.SDK public class LibraryCollections: ILibraryCollections { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public LibraryCollections(SDKConfig config) { @@ -91,7 +92,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/collections/{collectionId}/items", request); + var urlString = URLBuilder.Build(baseUrl, "/library/collections/{collectionId}/items", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -196,7 +197,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/collections/{collectionId}/items/{itemId}", request); + var urlString = URLBuilder.Build(baseUrl, "/library/collections/{collectionId}/items/{itemId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -301,7 +302,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/library/collections/{collectionId}/items/{itemId}/move", request); + var urlString = URLBuilder.Build(baseUrl, "/library/collections/{collectionId}/items/{itemId}/move", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/LibraryPlaylists.cs b/LukeHagar/PlexAPI/SDK/LibraryPlaylists.cs index ecfdffc..45c4dec 100644 --- a/LukeHagar/PlexAPI/SDK/LibraryPlaylists.cs +++ b/LukeHagar/PlexAPI/SDK/LibraryPlaylists.cs @@ -143,10 +143,11 @@ namespace LukeHagar.PlexAPI.SDK public class LibraryPlaylists: ILibraryPlaylists { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public LibraryPlaylists(SDKConfig config) { @@ -168,7 +169,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/playlists", request); + var urlString = URLBuilder.Build(baseUrl, "/playlists", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -269,7 +270,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/playlists/upload", request); + var urlString = URLBuilder.Build(baseUrl, "/playlists/upload", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -356,7 +357,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistId}", request); + var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -443,7 +444,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistId}", request); + var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -530,7 +531,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistId}/generators", request); + var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistId}/generators", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -635,7 +636,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistId}/items", request); + var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistId}/items", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -740,7 +741,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistId}/items", request); + var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistId}/items", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -845,7 +846,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistId}/items/{generatorId}", request); + var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistId}/items/{generatorId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -950,7 +951,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistId}/items/{generatorId}", request); + var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistId}/items/{generatorId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1055,7 +1056,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistId}/items/{generatorId}/items", request); + var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistId}/items/{generatorId}/items", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1160,7 +1161,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistId}/items/{playlistItemId}/move", request); + var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistId}/items/{playlistItemId}/move", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1265,7 +1266,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistId}/items/{generatorId}/{metadataId}/{action}", request); + var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistId}/items/{generatorId}/{metadataId}/{action}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/LiveTV.cs b/LukeHagar/PlexAPI/SDK/LiveTV.cs index ad576ed..ac9b88e 100644 --- a/LukeHagar/PlexAPI/SDK/LiveTV.cs +++ b/LukeHagar/PlexAPI/SDK/LiveTV.cs @@ -79,10 +79,11 @@ namespace LukeHagar.PlexAPI.SDK public class LiveTV: ILiveTV { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public LiveTV(SDKConfig config) { @@ -197,7 +198,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/livetv/sessions/{sessionId}", request); + var urlString = URLBuilder.Build(baseUrl, "/livetv/sessions/{sessionId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -302,7 +303,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/livetv/sessions/{sessionId}/{consumerId}/index.m3u8", request); + var urlString = URLBuilder.Build(baseUrl, "/livetv/sessions/{sessionId}/{consumerId}/index.m3u8", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -389,7 +390,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/livetv/sessions/{sessionId}/{consumerId}/{segmentId}", request); + var urlString = URLBuilder.Build(baseUrl, "/livetv/sessions/{sessionId}/{consumerId}/{segmentId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/Log.cs b/LukeHagar/PlexAPI/SDK/Log.cs index 4bec7be..64a5188 100644 --- a/LukeHagar/PlexAPI/SDK/Log.cs +++ b/LukeHagar/PlexAPI/SDK/Log.cs @@ -68,10 +68,11 @@ namespace LukeHagar.PlexAPI.SDK public class Log: ILog { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public Log(SDKConfig config) { @@ -170,7 +171,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/log", request); + var urlString = URLBuilder.Build(baseUrl, "/log", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -253,7 +254,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/log/networked", request); + var urlString = URLBuilder.Build(baseUrl, "/log/networked", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/LukeHagar.PlexAPI.SDK.csproj b/LukeHagar/PlexAPI/SDK/LukeHagar.PlexAPI.SDK.csproj index befc835..076a2d7 100644 --- a/LukeHagar/PlexAPI/SDK/LukeHagar.PlexAPI.SDK.csproj +++ b/LukeHagar/PlexAPI/SDK/LukeHagar.PlexAPI.SDK.csproj @@ -3,7 +3,7 @@ true LukeHagar.PlexAPI.SDK - 0.19.1 + 0.20.0 net8.0 LukeHagar Copyright (c) LukeHagar 2025 diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/AutoSelectSubtitle.cs b/LukeHagar/PlexAPI/SDK/Models/Components/AutoSelectSubtitle.cs new file mode 100644 index 0000000..5208016 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Components/AutoSelectSubtitle.cs @@ -0,0 +1,24 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Components +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// The auto-select subtitle mode (0 = Manually selected, 1 = Shown with foreign audio, 2 = Always enabled) + /// + public enum AutoSelectSubtitle + { + ManuallySelected = 0, + ShownWithForeignAudio = 1, + AlwaysEnabled = 2, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/BoolInt.cs b/LukeHagar/PlexAPI/SDK/Models/Components/BoolInt.cs index b5954f2..a6c348f 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Components/BoolInt.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Components/BoolInt.cs @@ -13,8 +13,8 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components public enum BoolInt { - Zero = 0, - One = 1, + False = 0, + True = 1, } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/Connections.cs b/LukeHagar/PlexAPI/SDK/Models/Components/Connections.cs new file mode 100644 index 0000000..02e5f00 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Components/Connections.cs @@ -0,0 +1,61 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Components +{ + using LukeHagar.PlexAPI.SDK.Models.Components; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class Connections + { + + /// + /// The protocol used for the connection (http, https, etc) + /// + [JsonProperty("protocol")] + public PlexDeviceProtocol Protocol { get; set; } = default!; + + /// + /// The (ip) address or domain name used for the connection + /// + [JsonProperty("address")] + public string Address { get; set; } = default!; + + /// + /// The port used for the connection + /// + [JsonProperty("port")] + public int Port { get; set; } = default!; + + /// + /// The full URI of the connection + /// + [JsonProperty("uri")] + public string Uri { get; set; } = default!; + + /// + /// If the connection is local address + /// + [JsonProperty("local")] + public bool Local { get; set; } = default!; + + /// + /// If the connection is relayed through plex.direct + /// + [JsonProperty("relay")] + public bool Relay { get; set; } = default!; + + /// + /// If the connection is using IPv6 + /// + [JsonProperty("IPv6")] + public bool IPv6 { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/DefaultAudioAccessibility.cs b/LukeHagar/PlexAPI/SDK/Models/Components/DefaultAudioAccessibility.cs new file mode 100644 index 0000000..ce87930 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Components/DefaultAudioAccessibility.cs @@ -0,0 +1,25 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Components +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// The audio accessibility mode (0 = Prefer non-accessibility audio, 1 = Prefer accessibility audio, 2 = Only show accessibility audio, 3 = Only show non-accessibility audio) + /// + public enum DefaultAudioAccessibility + { + PreferNonAccessibility = 0, + PreferAccessibility = 1, + OnlyAccessibility = 2, + OnlyNonAccessibility = 3, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/DefaultSubtitleAccessibility.cs b/LukeHagar/PlexAPI/SDK/Models/Components/DefaultSubtitleAccessibility.cs new file mode 100644 index 0000000..642de5c --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Components/DefaultSubtitleAccessibility.cs @@ -0,0 +1,25 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Components +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// The subtitles for the deaf or hard-of-hearing (SDH) searches mode (0 = Prefer non-SDH subtitles, 1 = Prefer SDH subtitles, 2 = Only show SDH subtitles, 3 = Only show non-SDH subtitles) + /// + public enum DefaultSubtitleAccessibility + { + PreferNonSdh = 0, + PreferSdh = 1, + OnlySdh = 2, + OnlyNonSdh = 3, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/DefaultSubtitleForced.cs b/LukeHagar/PlexAPI/SDK/Models/Components/DefaultSubtitleForced.cs new file mode 100644 index 0000000..a66f9fc --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Components/DefaultSubtitleForced.cs @@ -0,0 +1,25 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Components +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// The forced subtitles searches mode (0 = Prefer non-forced subtitles, 1 = Prefer forced subtitles, 2 = Only show forced subtitles, 3 = Only show non-forced subtitles) + /// + public enum DefaultSubtitleForced + { + PreferNonForced = 0, + PreferForced = 1, + OnlyForced = 2, + OnlyNonForced = 3, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/Guids.cs b/LukeHagar/PlexAPI/SDK/Models/Components/Guids.cs new file mode 100644 index 0000000..288934d --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Components/Guids.cs @@ -0,0 +1,28 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Components +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class Guids + { + + /// + /// The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb://
+ /// + /// + /// + /// + ///
+ [JsonProperty("id")] + public string Id { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/Items.cs b/LukeHagar/PlexAPI/SDK/Models/Components/Items.cs index c343114..b363c1e 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Components/Items.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Components/Items.cs @@ -12,6 +12,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components using LukeHagar.PlexAPI.SDK.Models.Components; using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; + using NodaTime; using System.Collections.Generic; /// @@ -32,43 +33,43 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// The title of the item (e.g. “300” or “The Simpsons”) /// [JsonProperty("title")] - public object? Title { get; set; } + public string Title { get; set; } = default!; /// /// The type of the video item, such as `movie`, `episode`, or `clip`. /// [JsonProperty("type")] - public object? Type { get; set; } + public string Type { get; set; } = default!; /// /// When present, contains the disc number for a track on multi-disc albums. /// [JsonProperty("absoluteIndex")] - public long? AbsoluteIndex { get; set; } + public int? AbsoluteIndex { get; set; } /// /// In units of seconds since the epoch, returns the time at which the item was added to the library. /// [JsonProperty("addedAt")] - public long? AddedAt { get; set; } + public long AddedAt { get; set; } = default!; /// /// When present, the URL for the background artwork for the item. /// [JsonProperty("art")] - public object? Art { get; set; } + public string? Art { get; set; } /// /// Some rating systems separate reviewer ratings from audience ratings /// [JsonProperty("audienceRating")] - public double? AudienceRating { get; set; } + public float? AudienceRating { get; set; } /// /// A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). /// [JsonProperty("audienceRatingImage")] - public object? AudienceRatingImage { get; set; } + public string? AudienceRatingImage { get; set; } [JsonProperty("Autotag")] public List? Autotag { get; set; } @@ -77,25 +78,31 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, the URL for a banner graphic for the item. /// [JsonProperty("banner")] - public object? Banner { get; set; } + public string? Banner { get; set; } /// /// When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). /// [JsonProperty("chapterSource")] - public object? ChapterSource { get; set; } + public string? ChapterSource { get; set; } + + /// + /// The number of child items associated with this media item. + /// + [JsonProperty("childCount")] + public int? ChildCount { get; set; } /// /// When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). /// [JsonProperty("composite")] - public object? Composite { get; set; } + public string? Composite { get; set; } /// /// If known, the content rating (e.g. MPAA) for an item. /// [JsonProperty("contentRating")] - public object? ContentRating { get; set; } + public string? ContentRating { get; set; } [JsonProperty("Country")] public List? Country { get; set; } @@ -107,7 +114,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, the duration for the item, in units of milliseconds. /// [JsonProperty("duration")] - public long? Duration { get; set; } + public int? Duration { get; set; } /// /// Typically only seen in metadata at a library's top level @@ -124,6 +131,12 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components [JsonProperty("grandparentArt")] public string? GrandparentArt { get; set; } + /// + /// The GUID of the grandparent media item. + /// + [JsonProperty("grandparentGuid")] + public string? GrandparentGuid { get; set; } + /// /// The `hero` of the grandparent /// @@ -160,14 +173,20 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components [JsonProperty("grandparentTitle")] public string? GrandparentTitle { get; set; } + /// + /// The globally unique identifier for the media item. + /// + [JsonProperty("guid")] + public string? Guid { get; set; } + [JsonProperty("Guid")] - public List? Guid { get; set; } + public List? Guids { get; set; } /// /// When present, the URL for a hero image for the item. /// [JsonProperty("hero")] - public object? Hero { get; set; } + public string? Hero { get; set; } [JsonProperty("Image")] public List? Image { get; set; } @@ -176,17 +195,14 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. /// [JsonProperty("index")] - public long? Index { get; set; } + public int? Index { get; set; } /// /// The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. /// [JsonProperty("key")] - public object? Key { get; set; } + public string Key { get; set; } = default!; - /// - /// When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - /// [JsonProperty("lastViewedAt")] public long? LastViewedAt { get; set; } @@ -194,7 +210,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// For shows and seasons, contains the number of total episodes. /// [JsonProperty("leafCount")] - public long? LeafCount { get; set; } + public int? LeafCount { get; set; } [JsonProperty("Media")] public List? Media { get; set; } @@ -203,13 +219,19 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. /// [JsonProperty("originallyAvailableAt")] - public object? OriginallyAvailableAt { get; set; } + public LocalDate? OriginallyAvailableAt { get; set; } /// /// When present, used to indicate an item's original title, e.g. a movie's foreign title. /// [JsonProperty("originalTitle")] - public object? OriginalTitle { get; set; } + public string? OriginalTitle { get; set; } + + /// + /// The GUID of the parent media item. + /// + [JsonProperty("parentGuid")] + public string? ParentGuid { get; set; } /// /// The `hero` of the parent @@ -221,7 +243,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// The `index` of the parent /// [JsonProperty("parentIndex")] - public long? ParentIndex { get; set; } + public int? ParentIndex { get; set; } /// /// The `key` of the parent @@ -251,7 +273,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. /// [JsonProperty("primaryExtraKey")] - public object? PrimaryExtraKey { get; set; } + public string? PrimaryExtraKey { get; set; } /// /// Prompt to give the user for this directory (such as `Search Movies`) @@ -263,7 +285,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. /// [JsonProperty("rating")] - public double? Rating { get; set; } + public float? Rating { get; set; } [JsonProperty("Rating")] public List? RatingArray { get; set; } @@ -272,19 +294,19 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// Number of ratings under this metadata /// [JsonProperty("ratingCount")] - public long? RatingCount { get; set; } + public int? RatingCount { get; set; } /// /// When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. /// [JsonProperty("ratingImage")] - public object? RatingImage { get; set; } + public string? RatingImage { get; set; } /// /// This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. /// [JsonProperty("ratingKey")] - public object? RatingKey { get; set; } + public string? RatingKey { get; set; } [JsonProperty("Role")] public List? Role { get; set; } @@ -323,43 +345,43 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). /// [JsonProperty("studio")] - public object? Studio { get; set; } + public string? Studio { get; set; } /// /// The subtype of the video item, such as `photo` when the video item is in a photo library /// [JsonProperty("subtype")] - public object? Subtype { get; set; } + public string? Subtype { get; set; } /// /// When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). /// [JsonProperty("summary")] - public object? Summary { get; set; } + public string? Summary { get; set; } /// /// When present, a pithy one-liner about the item (usually only seen for movies). /// [JsonProperty("tagline")] - public object? Tagline { get; set; } + public string? Tagline { get; set; } /// /// When present, the URL for theme music for the item (usually only for TV shows). /// [JsonProperty("theme")] - public object? Theme { get; set; } + public string? Theme { get; set; } /// /// When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. /// [JsonProperty("thumb")] - public object? Thumb { get; set; } + public string? Thumb { get; set; } /// /// Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). /// [JsonProperty("titleSort")] - public object? TitleSort { get; set; } + public string? TitleSort { get; set; } /// /// In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). @@ -371,25 +393,25 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When the user has rated an item, this contains the user rating /// [JsonProperty("userRating")] - public double? UserRating { get; set; } + public float? UserRating { get; set; } /// /// When a users has completed watched or listened to an item, this attribute contains the number of consumptions. /// [JsonProperty("viewCount")] - public long? ViewCount { get; set; } + public int? ViewCount { get; set; } /// /// For shows and seasons, contains the number of viewed episodes. /// [JsonProperty("viewedLeafCount")] - public long? ViewedLeafCount { get; set; } + public int? ViewedLeafCount { get; set; } /// /// When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. /// [JsonProperty("viewOffset")] - public long? ViewOffset { get; set; } + public int? ViewOffset { get; set; } [JsonProperty("Writer")] public List? Writer { get; set; } @@ -398,7 +420,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, the year associated with the item's release (e.g. release year for a movie). /// [JsonProperty("year")] - public long? Year { get; set; } + public int? Year { get; set; } [JsonProperty("MetadataItem")] public List? MetadataItem { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/ItemsGuids.cs b/LukeHagar/PlexAPI/SDK/Models/Components/ItemsGuids.cs new file mode 100644 index 0000000..6952da0 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Components/ItemsGuids.cs @@ -0,0 +1,28 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Components +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class ItemsGuids + { + + /// + /// The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb://
+ /// + /// + /// + /// + ///
+ [JsonProperty("id")] + public string Id { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/LibrarySection.cs b/LukeHagar/PlexAPI/SDK/Models/Components/LibrarySection.cs index 124e9aa..7285542 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Components/LibrarySection.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Components/LibrarySection.cs @@ -17,11 +17,21 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components public class LibrarySection { + /// + /// The title of the library + /// [JsonProperty("title")] public string? Title { get; set; } + /// + /// The type of media content in the Plex library. This can represent videos, music, or photos.
+ /// + /// + /// + /// + ///
[JsonProperty("type")] - public string? Type { get; set; } + public MediaTypeString Type { get; set; } = default!; [JsonProperty("agent")] public string? Agent { get; set; } @@ -60,7 +70,13 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components public string? Key { get; set; } [JsonProperty("language")] - public string? Language { get; set; } + public string Language { get; set; } = default!; + + /// + /// The universally unique identifier for the library. + /// + [JsonProperty("uuid")] + public string Uuid { get; set; } = default!; [JsonProperty("Location")] public List? Location { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/MailingListStatus.cs b/LukeHagar/PlexAPI/SDK/Models/Components/MailingListStatus.cs new file mode 100644 index 0000000..b4168a3 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Components/MailingListStatus.cs @@ -0,0 +1,62 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Components +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + + /// + /// Your current mailing list status + /// + public enum MailingListStatus + { + [JsonProperty("active")] + Active, + [JsonProperty("unsubscribed")] + Unsubscribed, + [JsonProperty("removed")] + Removed, + } + + public static class MailingListStatusExtension + { + public static string Value(this MailingListStatus value) + { + return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString(); + } + + public static MailingListStatus ToEnum(this string value) + { + foreach(var field in typeof(MailingListStatus).GetFields()) + { + var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false); + if (attributes.Length == 0) + { + continue; + } + + var attribute = attributes[0] as JsonPropertyAttribute; + if (attribute != null && attribute.PropertyName == value) + { + var enumVal = field.GetValue(null); + + if (enumVal is MailingListStatus) + { + return (MailingListStatus)enumVal; + } + } + } + + throw new Exception($"Unknown value {value} for enum MailingListStatus"); + } + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/Media.cs b/LukeHagar/PlexAPI/SDK/Models/Components/Media.cs index 0dbeb63..635b202 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Components/Media.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Components/Media.cs @@ -25,25 +25,25 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components { [JsonProperty("aspectRatio")] - public double? AspectRatio { get; set; } + public float? AspectRatio { get; set; } [JsonProperty("audioChannels")] - public long? AudioChannels { get; set; } + public int? AudioChannels { get; set; } [JsonProperty("audioCodec")] - public object? AudioCodec { get; set; } + public string? AudioCodec { get; set; } [JsonProperty("audioProfile")] - public object? AudioProfile { get; set; } + public string? AudioProfile { get; set; } [JsonProperty("bitrate")] - public long? Bitrate { get; set; } + public int? Bitrate { get; set; } [JsonProperty("container")] - public object? Container { get; set; } + public string? Container { get; set; } [JsonProperty("duration")] - public long? Duration { get; set; } + public int? Duration { get; set; } [JsonProperty("has64bitOffsets")] public bool? Has64bitOffsets { get; set; } @@ -52,10 +52,10 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components public bool? HasVoiceActivity { get; set; } [JsonProperty("height")] - public long? Height { get; set; } + public int? Height { get; set; } [JsonProperty("id")] - public long? Id { get; set; } + public long Id { get; set; } = default!; [JsonProperty("optimizedForStreaming")] public bool? OptimizedForStreaming { get; set; } @@ -64,19 +64,19 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components public List? Part { get; set; } [JsonProperty("videoCodec")] - public object? VideoCodec { get; set; } + public string? VideoCodec { get; set; } [JsonProperty("videoFrameRate")] - public object? VideoFrameRate { get; set; } + public string? VideoFrameRate { get; set; } [JsonProperty("videoProfile")] - public object? VideoProfile { get; set; } + public string? VideoProfile { get; set; } [JsonProperty("videoResolution")] - public object? VideoResolution { get; set; } + public string? VideoResolution { get; set; } [JsonProperty("width")] - public long? Width { get; set; } + public int? Width { get; set; } [JsonProperty("additionalProperties")] public Dictionary? AdditionalProperties { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithDecisionGuids.cs b/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithDecisionGuids.cs new file mode 100644 index 0000000..9dec583 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithDecisionGuids.cs @@ -0,0 +1,28 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Components +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class MediaContainerWithDecisionGuids + { + + /// + /// The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb://
+ /// + /// + /// + /// + ///
+ [JsonProperty("id")] + public string Id { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithDecisionMedia.cs b/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithDecisionMedia.cs index b86b3ed..d8d335f 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithDecisionMedia.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithDecisionMedia.cs @@ -25,25 +25,25 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components { [JsonProperty("aspectRatio")] - public double? AspectRatio { get; set; } + public float? AspectRatio { get; set; } [JsonProperty("audioChannels")] - public long? AudioChannels { get; set; } + public int? AudioChannels { get; set; } [JsonProperty("audioCodec")] - public object? AudioCodec { get; set; } + public string? AudioCodec { get; set; } [JsonProperty("audioProfile")] - public object? AudioProfile { get; set; } + public string? AudioProfile { get; set; } [JsonProperty("bitrate")] - public long? Bitrate { get; set; } + public int? Bitrate { get; set; } [JsonProperty("container")] - public object? Container { get; set; } + public string? Container { get; set; } [JsonProperty("duration")] - public long? Duration { get; set; } + public int? Duration { get; set; } [JsonProperty("has64bitOffsets")] public bool? Has64bitOffsets { get; set; } @@ -52,10 +52,10 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components public bool? HasVoiceActivity { get; set; } [JsonProperty("height")] - public long? Height { get; set; } + public int? Height { get; set; } [JsonProperty("id")] - public long? Id { get; set; } + public long Id { get; set; } = default!; [JsonProperty("optimizedForStreaming")] public bool? OptimizedForStreaming { get; set; } @@ -64,19 +64,19 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components public List? Part { get; set; } [JsonProperty("videoCodec")] - public object? VideoCodec { get; set; } + public string? VideoCodec { get; set; } [JsonProperty("videoFrameRate")] - public object? VideoFrameRate { get; set; } + public string? VideoFrameRate { get; set; } [JsonProperty("videoProfile")] - public object? VideoProfile { get; set; } + public string? VideoProfile { get; set; } [JsonProperty("videoResolution")] - public object? VideoResolution { get; set; } + public string? VideoResolution { get; set; } [JsonProperty("width")] - public long? Width { get; set; } + public int? Width { get; set; } [JsonProperty("abr")] public bool? Abr { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithDecisionMetadata.cs b/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithDecisionMetadata.cs index 2ababf3..6867c32 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithDecisionMetadata.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithDecisionMetadata.cs @@ -12,6 +12,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components using LukeHagar.PlexAPI.SDK.Models.Components; using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; + using NodaTime; using System.Collections.Generic; /// @@ -32,43 +33,43 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// The title of the item (e.g. “300” or “The Simpsons”) /// [JsonProperty("title")] - public object? Title { get; set; } + public string Title { get; set; } = default!; /// /// The type of the video item, such as `movie`, `episode`, or `clip`. /// [JsonProperty("type")] - public object? Type { get; set; } + public string Type { get; set; } = default!; /// /// When present, contains the disc number for a track on multi-disc albums. /// [JsonProperty("absoluteIndex")] - public long? AbsoluteIndex { get; set; } + public int? AbsoluteIndex { get; set; } /// /// In units of seconds since the epoch, returns the time at which the item was added to the library. /// [JsonProperty("addedAt")] - public long? AddedAt { get; set; } + public long AddedAt { get; set; } = default!; /// /// When present, the URL for the background artwork for the item. /// [JsonProperty("art")] - public object? Art { get; set; } + public string? Art { get; set; } /// /// Some rating systems separate reviewer ratings from audience ratings /// [JsonProperty("audienceRating")] - public double? AudienceRating { get; set; } + public float? AudienceRating { get; set; } /// /// A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). /// [JsonProperty("audienceRatingImage")] - public object? AudienceRatingImage { get; set; } + public string? AudienceRatingImage { get; set; } [JsonProperty("Autotag")] public List? Autotag { get; set; } @@ -77,25 +78,31 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, the URL for a banner graphic for the item. /// [JsonProperty("banner")] - public object? Banner { get; set; } + public string? Banner { get; set; } /// /// When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). /// [JsonProperty("chapterSource")] - public object? ChapterSource { get; set; } + public string? ChapterSource { get; set; } + + /// + /// The number of child items associated with this media item. + /// + [JsonProperty("childCount")] + public int? ChildCount { get; set; } /// /// When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). /// [JsonProperty("composite")] - public object? Composite { get; set; } + public string? Composite { get; set; } /// /// If known, the content rating (e.g. MPAA) for an item. /// [JsonProperty("contentRating")] - public object? ContentRating { get; set; } + public string? ContentRating { get; set; } [JsonProperty("Country")] public List? Country { get; set; } @@ -107,7 +114,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, the duration for the item, in units of milliseconds. /// [JsonProperty("duration")] - public long? Duration { get; set; } + public int? Duration { get; set; } /// /// Typically only seen in metadata at a library's top level @@ -124,6 +131,12 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components [JsonProperty("grandparentArt")] public string? GrandparentArt { get; set; } + /// + /// The GUID of the grandparent media item. + /// + [JsonProperty("grandparentGuid")] + public string? GrandparentGuid { get; set; } + /// /// The `hero` of the grandparent /// @@ -160,14 +173,20 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components [JsonProperty("grandparentTitle")] public string? GrandparentTitle { get; set; } + /// + /// The globally unique identifier for the media item. + /// + [JsonProperty("guid")] + public string? Guid { get; set; } + [JsonProperty("Guid")] - public List? Guid { get; set; } + public List? Guids { get; set; } /// /// When present, the URL for a hero image for the item. /// [JsonProperty("hero")] - public object? Hero { get; set; } + public string? Hero { get; set; } [JsonProperty("Image")] public List? Image { get; set; } @@ -176,17 +195,14 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. /// [JsonProperty("index")] - public long? Index { get; set; } + public int? Index { get; set; } /// /// The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. /// [JsonProperty("key")] - public object? Key { get; set; } + public string Key { get; set; } = default!; - /// - /// When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - /// [JsonProperty("lastViewedAt")] public long? LastViewedAt { get; set; } @@ -194,7 +210,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// For shows and seasons, contains the number of total episodes. /// [JsonProperty("leafCount")] - public long? LeafCount { get; set; } + public int? LeafCount { get; set; } [JsonProperty("Media")] public List? Media { get; set; } @@ -203,13 +219,19 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. /// [JsonProperty("originallyAvailableAt")] - public object? OriginallyAvailableAt { get; set; } + public LocalDate? OriginallyAvailableAt { get; set; } /// /// When present, used to indicate an item's original title, e.g. a movie's foreign title. /// [JsonProperty("originalTitle")] - public object? OriginalTitle { get; set; } + public string? OriginalTitle { get; set; } + + /// + /// The GUID of the parent media item. + /// + [JsonProperty("parentGuid")] + public string? ParentGuid { get; set; } /// /// The `hero` of the parent @@ -221,7 +243,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// The `index` of the parent /// [JsonProperty("parentIndex")] - public long? ParentIndex { get; set; } + public int? ParentIndex { get; set; } /// /// The `key` of the parent @@ -251,7 +273,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. /// [JsonProperty("primaryExtraKey")] - public object? PrimaryExtraKey { get; set; } + public string? PrimaryExtraKey { get; set; } /// /// Prompt to give the user for this directory (such as `Search Movies`) @@ -263,7 +285,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. /// [JsonProperty("rating")] - public double? Rating { get; set; } + public float? Rating { get; set; } [JsonProperty("Rating")] public List? RatingArray { get; set; } @@ -272,19 +294,19 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// Number of ratings under this metadata /// [JsonProperty("ratingCount")] - public long? RatingCount { get; set; } + public int? RatingCount { get; set; } /// /// When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. /// [JsonProperty("ratingImage")] - public object? RatingImage { get; set; } + public string? RatingImage { get; set; } /// /// This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. /// [JsonProperty("ratingKey")] - public object? RatingKey { get; set; } + public string? RatingKey { get; set; } [JsonProperty("Role")] public List? Role { get; set; } @@ -323,43 +345,43 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). /// [JsonProperty("studio")] - public object? Studio { get; set; } + public string? Studio { get; set; } /// /// The subtype of the video item, such as `photo` when the video item is in a photo library /// [JsonProperty("subtype")] - public object? Subtype { get; set; } + public string? Subtype { get; set; } /// /// When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). /// [JsonProperty("summary")] - public object? Summary { get; set; } + public string? Summary { get; set; } /// /// When present, a pithy one-liner about the item (usually only seen for movies). /// [JsonProperty("tagline")] - public object? Tagline { get; set; } + public string? Tagline { get; set; } /// /// When present, the URL for theme music for the item (usually only for TV shows). /// [JsonProperty("theme")] - public object? Theme { get; set; } + public string? Theme { get; set; } /// /// When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. /// [JsonProperty("thumb")] - public object? Thumb { get; set; } + public string? Thumb { get; set; } /// /// Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). /// [JsonProperty("titleSort")] - public object? TitleSort { get; set; } + public string? TitleSort { get; set; } /// /// In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). @@ -371,25 +393,25 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When the user has rated an item, this contains the user rating /// [JsonProperty("userRating")] - public double? UserRating { get; set; } + public float? UserRating { get; set; } /// /// When a users has completed watched or listened to an item, this attribute contains the number of consumptions. /// [JsonProperty("viewCount")] - public long? ViewCount { get; set; } + public int? ViewCount { get; set; } /// /// For shows and seasons, contains the number of viewed episodes. /// [JsonProperty("viewedLeafCount")] - public long? ViewedLeafCount { get; set; } + public int? ViewedLeafCount { get; set; } /// /// When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. /// [JsonProperty("viewOffset")] - public long? ViewOffset { get; set; } + public int? ViewOffset { get; set; } [JsonProperty("Writer")] public List? Writer { get; set; } @@ -398,7 +420,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, the year associated with the item's release (e.g. release year for a movie). /// [JsonProperty("year")] - public long? Year { get; set; } + public int? Year { get; set; } [JsonProperty("additionalProperties")] public Dictionary? AdditionalProperties { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithDecisionPart.cs b/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithDecisionPart.cs index 72c1ed9..58bc0ad 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithDecisionPart.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithDecisionPart.cs @@ -24,38 +24,53 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components public class MediaContainerWithDecisionPart { + /// + /// Indicates if the part is accessible. + /// + [JsonProperty("accessible")] + public bool? Accessible { get; set; } + [JsonProperty("audioProfile")] - public object? AudioProfile { get; set; } + public string? AudioProfile { get; set; } /// /// The container of the media file, such as `mp4` or `mkv` /// [JsonProperty("container")] - public object? Container { get; set; } + public string? Container { get; set; } /// /// The duration of the media item, in milliseconds /// [JsonProperty("duration")] - public long? Duration { get; set; } + public int? Duration { get; set; } + + /// + /// Indicates if the part exists. + /// + [JsonProperty("exists")] + public bool? Exists { get; set; } /// /// The local file path at which the part is stored on the server /// [JsonProperty("file")] - public object? File { get; set; } + public string? File { get; set; } [JsonProperty("has64bitOffsets")] public bool? Has64bitOffsets { get; set; } [JsonProperty("id")] - public long? Id { get; set; } + public long Id { get; set; } = default!; + + [JsonProperty("indexes")] + public string? Indexes { get; set; } /// /// The key from which the media can be streamed /// [JsonProperty("key")] - public object? Key { get; set; } + public string Key { get; set; } = default!; [JsonProperty("optimizedForStreaming")] public bool? OptimizedForStreaming { get; set; } @@ -70,7 +85,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components public List? Stream { get; set; } [JsonProperty("videoProfile")] - public object? VideoProfile { get; set; } + public string? VideoProfile { get; set; } [JsonProperty("decision")] public Decision? Decision { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithDecisionStream.cs b/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithDecisionStream.cs index 2768604..eef6c61 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithDecisionStream.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithDecisionStream.cs @@ -24,113 +24,306 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components public class MediaContainerWithDecisionStream { + /// + /// Indicates if this stream is default. + /// [JsonProperty("default")] public bool? Default { get; set; } + /// + /// Audio channel layout. + /// [JsonProperty("audioChannelLayout")] - public object? AudioChannelLayout { get; set; } - - [JsonProperty("bitDepth")] - public long? BitDepth { get; set; } - - [JsonProperty("bitrate")] - public long? Bitrate { get; set; } + public string? AudioChannelLayout { get; set; } /// - /// For subtitle streams only. If `true` then the server can attempt to automatically sync the subtitle timestamps with the video. + /// Number of audio channels (for audio streams). + /// + [JsonProperty("channels")] + public int? Channels { get; set; } + + /// + /// Bit depth of the video stream. + /// + [JsonProperty("bitDepth")] + public int? BitDepth { get; set; } + + /// + /// Dolby Vision BL compatibility ID. + /// + [JsonProperty("DOVIBLCompatID")] + public int? DOVIBLCompatID { get; set; } + + /// + /// Indicates if Dolby Vision BL is present. + /// + [JsonProperty("DOVIBLPresent")] + public bool? DOVIBLPresent { get; set; } + + /// + /// Indicates if Dolby Vision EL is present. + /// + [JsonProperty("DOVIELPresent")] + public bool? DOVIELPresent { get; set; } + + /// + /// Dolby Vision level. + /// + [JsonProperty("DOVILevel")] + public int? DOVILevel { get; set; } + + /// + /// Indicates if Dolby Vision is present. + /// + [JsonProperty("DOVIPresent")] + public bool? DOVIPresent { get; set; } + + /// + /// Dolby Vision profile. + /// + [JsonProperty("DOVIProfile")] + public int? DOVIProfile { get; set; } + + /// + /// Indicates if Dolby Vision RPU is present. + /// + [JsonProperty("DOVIRPUPresent")] + public bool? DOVIRPUPresent { get; set; } + + /// + /// Dolby Vision version. + /// + [JsonProperty("DOVIVersion")] + public string? DOVIVersion { get; set; } + + /// + /// Bitrate of the stream. + /// + [JsonProperty("bitrate")] + public int? Bitrate { get; set; } + + /// + /// Indicates if the stream can auto-sync. /// [JsonProperty("canAutoSync")] public bool? CanAutoSync { get; set; } + /// + /// Chroma sample location. + /// [JsonProperty("chromaLocation")] - public object? ChromaLocation { get; set; } - - [JsonProperty("chromaSubsampling")] - public object? ChromaSubsampling { get; set; } + public string? ChromaLocation { get; set; } /// - /// The codec of the stream, such as `h264` or `aac` + /// Chroma subsampling format. + /// + [JsonProperty("chromaSubsampling")] + public string? ChromaSubsampling { get; set; } + + /// + /// Coded video height. + /// + [JsonProperty("codedHeight")] + public int? CodedHeight { get; set; } + + /// + /// Coded video width. + /// + [JsonProperty("codedWidth")] + public int? CodedWidth { get; set; } + + [JsonProperty("closedCaptions")] + public bool? ClosedCaptions { get; set; } + + /// + /// Codec used by the stream. /// [JsonProperty("codec")] - public object? Codec { get; set; } - - [JsonProperty("colorPrimaries")] - public object? ColorPrimaries { get; set; } - - [JsonProperty("colorRange")] - public object? ColorRange { get; set; } - - [JsonProperty("colorSpace")] - public object? ColorSpace { get; set; } - - [JsonProperty("colorTrc")] - public object? ColorTrc { get; set; } + public string Codec { get; set; } = default!; /// - /// A friendly name for the stream, often comprised of the language and codec information + /// Color primaries used. + /// + [JsonProperty("colorPrimaries")] + public string? ColorPrimaries { get; set; } + + /// + /// Color range (e.g., tv). + /// + [JsonProperty("colorRange")] + public string? ColorRange { get; set; } + + /// + /// Color space. + /// + [JsonProperty("colorSpace")] + public string? ColorSpace { get; set; } + + /// + /// Color transfer characteristics. + /// + [JsonProperty("colorTrc")] + public string? ColorTrc { get; set; } + + /// + /// Display title for the stream. /// [JsonProperty("displayTitle")] - public object? DisplayTitle { get; set; } + public string DisplayTitle { get; set; } = default!; + /// + /// Extended display title for the stream. + /// + [JsonProperty("extendedDisplayTitle")] + public string? ExtendedDisplayTitle { get; set; } + + /// + /// Frame rate of the stream. + /// [JsonProperty("frameRate")] - public double? FrameRate { get; set; } + public float? FrameRate { get; set; } [JsonProperty("hasScalingMatrix")] - public object? HasScalingMatrix { get; set; } - - [JsonProperty("height")] - public long? Height { get; set; } - - [JsonProperty("id")] - public long? Id { get; set; } + public bool? HasScalingMatrix { get; set; } /// - /// If the stream is part of the `Part` and not an external resource, the index of the stream within that part + /// Height of the video stream. + /// + [JsonProperty("height")] + public int? Height { get; set; } + + /// + /// Unique stream identifier. + /// + [JsonProperty("id")] + public int Id { get; set; } = default!; + + /// + /// Index of the stream. /// [JsonProperty("index")] - public long? Index { get; set; } + public int? Index { get; set; } /// - /// If the stream is independently streamable, the key from which it can be streamed + /// Key to access this stream part. /// [JsonProperty("key")] - public object? Key { get; set; } - - [JsonProperty("language")] - public object? Language { get; set; } + public string Key { get; set; } = default!; /// - /// The three character language code for the stream contents + /// Language of the stream. + /// + [JsonProperty("language")] + public string? Language { get; set; } + + /// + /// ISO language code. /// [JsonProperty("languageCode")] - public object? LanguageCode { get; set; } + public string? LanguageCode { get; set; } + /// + /// Language tag (e.g., en). + /// + [JsonProperty("languageTag")] + public string? LanguageTag { get; set; } + + /// + /// Format of the stream (e.g., srt). + /// + [JsonProperty("format")] + public string? Format { get; set; } + + /// + /// Indicates whether header compression is enabled. + /// + [JsonProperty("headerCompression")] + public bool? HeaderCompression { get; set; } + + /// + /// Video level. + /// [JsonProperty("level")] - public long? Level { get; set; } + public int? Level { get; set; } + /// + /// Indicates if this is the original stream. + /// + [JsonProperty("original")] + public bool? Original { get; set; } + + /// + /// Video profile. + /// [JsonProperty("profile")] - public object? Profile { get; set; } + public string? Profile { get; set; } + /// + /// Number of reference frames. + /// [JsonProperty("refFrames")] - public long? RefFrames { get; set; } + public int? RefFrames { get; set; } + /// + /// Sampling rate for the audio stream. + /// [JsonProperty("samplingRate")] - public long? SamplingRate { get; set; } + public int? SamplingRate { get; set; } + [JsonProperty("scanType")] + public string? ScanType { get; set; } + + [JsonProperty("embeddedInVideo")] + public string? EmbeddedInVideo { get; set; } + + /// + /// Indicates if this stream is selected (applicable for audio streams). + /// [JsonProperty("selected")] public bool? Selected { get; set; } - [JsonProperty("streamIdentifier")] - public long? StreamIdentifier { get; set; } + [JsonProperty("forced")] + public bool? Forced { get; set; } /// - /// A number indicating the type of the stream. `1` for video, `2` for audio, `3` for subtitles, `4` for lyrics + /// Indicates if the stream is for the hearing impaired. + /// + [JsonProperty("hearingImpaired")] + public bool? HearingImpaired { get; set; } + + /// + /// Indicates if the stream is a dub. + /// + [JsonProperty("dub")] + public bool? Dub { get; set; } + + /// + /// Optional title for the stream (e.g., language variant). + /// + [JsonProperty("title")] + public string? Title { get; set; } + + [JsonProperty("streamIdentifier")] + public int? StreamIdentifier { get; set; } + + /// + /// Stream type:
+ /// + /// + /// - VIDEO = 1
+ /// - AUDIO = 2
+ /// - SUBTITLE = 3
+ /// + ///
///
[JsonProperty("streamType")] - public long? StreamType { get; set; } + public long StreamType { get; } = 1; + /// + /// Width of the video stream. + /// [JsonProperty("width")] - public long? Width { get; set; } + public int? Width { get; set; } [JsonProperty("decision")] public MediaContainerWithDecisionDecision? Decision { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithNestedMetadataGuids.cs b/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithNestedMetadataGuids.cs new file mode 100644 index 0000000..a564eb1 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithNestedMetadataGuids.cs @@ -0,0 +1,28 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Components +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class MediaContainerWithNestedMetadataGuids + { + + /// + /// The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb://
+ /// + /// + /// + /// + ///
+ [JsonProperty("id")] + public string Id { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithPlaylistMetadataGuids.cs b/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithPlaylistMetadataGuids.cs new file mode 100644 index 0000000..3d6a61c --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithPlaylistMetadataGuids.cs @@ -0,0 +1,28 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Components +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class MediaContainerWithPlaylistMetadataGuids + { + + /// + /// The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb://
+ /// + /// + /// + /// + ///
+ [JsonProperty("id")] + public string Id { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithPlaylistMetadataMetadata.cs b/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithPlaylistMetadataMetadata.cs index 406f8c0..89d5190 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithPlaylistMetadataMetadata.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Components/MediaContainerWithPlaylistMetadataMetadata.cs @@ -12,6 +12,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components using LukeHagar.PlexAPI.SDK.Models.Components; using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; + using NodaTime; using System.Collections.Generic; /// @@ -38,25 +39,25 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). /// [JsonProperty("composite")] - public object? Composite { get; set; } + public string? Composite { get; set; } /// /// When present, the duration for the item, in units of milliseconds. /// [JsonProperty("duration")] - public long? Duration { get; set; } + public int? Duration { get; set; } /// /// The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. /// [JsonProperty("key")] - public object? Key { get; set; } + public string Key { get; set; } = default!; /// /// For shows and seasons, contains the number of total episodes. /// [JsonProperty("leafCount")] - public long? LeafCount { get; set; } + public int? LeafCount { get; set; } /// /// The type of the playlist. @@ -80,43 +81,43 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// The title of the item (e.g. “300” or “The Simpsons”) /// [JsonProperty("title")] - public object? Title { get; set; } + public string Title { get; set; } = default!; /// /// The type of the video item, such as `movie`, `episode`, or `clip`. /// [JsonProperty("type")] - public object? Type { get; set; } + public string Type { get; set; } = default!; /// /// When present, contains the disc number for a track on multi-disc albums. /// [JsonProperty("absoluteIndex")] - public long? AbsoluteIndex { get; set; } + public int? AbsoluteIndex { get; set; } /// /// In units of seconds since the epoch, returns the time at which the item was added to the library. /// [JsonProperty("addedAt")] - public long? AddedAt { get; set; } + public long AddedAt { get; set; } = default!; /// /// When present, the URL for the background artwork for the item. /// [JsonProperty("art")] - public object? Art { get; set; } + public string? Art { get; set; } /// /// Some rating systems separate reviewer ratings from audience ratings /// [JsonProperty("audienceRating")] - public double? AudienceRating { get; set; } + public float? AudienceRating { get; set; } /// /// A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). /// [JsonProperty("audienceRatingImage")] - public object? AudienceRatingImage { get; set; } + public string? AudienceRatingImage { get; set; } [JsonProperty("Autotag")] public List? Autotag { get; set; } @@ -125,19 +126,25 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, the URL for a banner graphic for the item. /// [JsonProperty("banner")] - public object? Banner { get; set; } + public string? Banner { get; set; } /// /// When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). /// [JsonProperty("chapterSource")] - public object? ChapterSource { get; set; } + public string? ChapterSource { get; set; } + + /// + /// The number of child items associated with this media item. + /// + [JsonProperty("childCount")] + public int? ChildCount { get; set; } /// /// If known, the content rating (e.g. MPAA) for an item. /// [JsonProperty("contentRating")] - public object? ContentRating { get; set; } + public string? ContentRating { get; set; } [JsonProperty("Country")] public List? Country { get; set; } @@ -160,6 +167,12 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components [JsonProperty("grandparentArt")] public string? GrandparentArt { get; set; } + /// + /// The GUID of the grandparent media item. + /// + [JsonProperty("grandparentGuid")] + public string? GrandparentGuid { get; set; } + /// /// The `hero` of the grandparent /// @@ -196,14 +209,20 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components [JsonProperty("grandparentTitle")] public string? GrandparentTitle { get; set; } + /// + /// The globally unique identifier for the media item. + /// + [JsonProperty("guid")] + public string? Guid { get; set; } + [JsonProperty("Guid")] - public List? Guid { get; set; } + public List? Guids { get; set; } /// /// When present, the URL for a hero image for the item. /// [JsonProperty("hero")] - public object? Hero { get; set; } + public string? Hero { get; set; } [JsonProperty("Image")] public List? Image { get; set; } @@ -212,11 +231,8 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. /// [JsonProperty("index")] - public long? Index { get; set; } + public int? Index { get; set; } - /// - /// When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - /// [JsonProperty("lastViewedAt")] public long? LastViewedAt { get; set; } @@ -227,13 +243,19 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. /// [JsonProperty("originallyAvailableAt")] - public object? OriginallyAvailableAt { get; set; } + public LocalDate? OriginallyAvailableAt { get; set; } /// /// When present, used to indicate an item's original title, e.g. a movie's foreign title. /// [JsonProperty("originalTitle")] - public object? OriginalTitle { get; set; } + public string? OriginalTitle { get; set; } + + /// + /// The GUID of the parent media item. + /// + [JsonProperty("parentGuid")] + public string? ParentGuid { get; set; } /// /// The `hero` of the parent @@ -245,7 +267,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// The `index` of the parent /// [JsonProperty("parentIndex")] - public long? ParentIndex { get; set; } + public int? ParentIndex { get; set; } /// /// The `key` of the parent @@ -275,7 +297,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. /// [JsonProperty("primaryExtraKey")] - public object? PrimaryExtraKey { get; set; } + public string? PrimaryExtraKey { get; set; } /// /// Prompt to give the user for this directory (such as `Search Movies`) @@ -287,7 +309,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. /// [JsonProperty("rating")] - public double? Rating { get; set; } + public float? Rating { get; set; } [JsonProperty("Rating")] public List? RatingArray { get; set; } @@ -296,19 +318,19 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// Number of ratings under this metadata /// [JsonProperty("ratingCount")] - public long? RatingCount { get; set; } + public int? RatingCount { get; set; } /// /// When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. /// [JsonProperty("ratingImage")] - public object? RatingImage { get; set; } + public string? RatingImage { get; set; } /// /// This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. /// [JsonProperty("ratingKey")] - public object? RatingKey { get; set; } + public string? RatingKey { get; set; } [JsonProperty("Role")] public List? Role { get; set; } @@ -347,43 +369,43 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). /// [JsonProperty("studio")] - public object? Studio { get; set; } + public string? Studio { get; set; } /// /// The subtype of the video item, such as `photo` when the video item is in a photo library /// [JsonProperty("subtype")] - public object? Subtype { get; set; } + public string? Subtype { get; set; } /// /// When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). /// [JsonProperty("summary")] - public object? Summary { get; set; } + public string? Summary { get; set; } /// /// When present, a pithy one-liner about the item (usually only seen for movies). /// [JsonProperty("tagline")] - public object? Tagline { get; set; } + public string? Tagline { get; set; } /// /// When present, the URL for theme music for the item (usually only for TV shows). /// [JsonProperty("theme")] - public object? Theme { get; set; } + public string? Theme { get; set; } /// /// When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. /// [JsonProperty("thumb")] - public object? Thumb { get; set; } + public string? Thumb { get; set; } /// /// Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). /// [JsonProperty("titleSort")] - public object? TitleSort { get; set; } + public string? TitleSort { get; set; } /// /// In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). @@ -395,25 +417,25 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When the user has rated an item, this contains the user rating /// [JsonProperty("userRating")] - public double? UserRating { get; set; } + public float? UserRating { get; set; } /// /// When a users has completed watched or listened to an item, this attribute contains the number of consumptions. /// [JsonProperty("viewCount")] - public long? ViewCount { get; set; } + public int? ViewCount { get; set; } /// /// For shows and seasons, contains the number of viewed episodes. /// [JsonProperty("viewedLeafCount")] - public long? ViewedLeafCount { get; set; } + public int? ViewedLeafCount { get; set; } /// /// When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. /// [JsonProperty("viewOffset")] - public long? ViewOffset { get; set; } + public int? ViewOffset { get; set; } [JsonProperty("Writer")] public List? Writer { get; set; } @@ -422,7 +444,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, the year associated with the item's release (e.g. release year for a movie). /// [JsonProperty("year")] - public long? Year { get; set; } + public int? Year { get; set; } [JsonProperty("additionalProperties")] public Dictionary? AdditionalProperties { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/MediaQuery.cs b/LukeHagar/PlexAPI/SDK/Models/Components/MediaQuery.cs index dd9333f..84fa002 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Components/MediaQuery.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Components/MediaQuery.cs @@ -9,9 +9,65 @@ #nullable enable namespace LukeHagar.PlexAPI.SDK.Models.Components { + using LukeHagar.PlexAPI.SDK.Models.Components; using LukeHagar.PlexAPI.SDK.Utils; + /// + /// A querystring-based filtering language used to select subsets of media. When provided as an object, properties are serialized as a querystring using form style with explode.
+ /// + /// + ///
+ /// Only the defined properties below are allowed. The object serializes to a querystring format like: `type=4&sourceType=2&sort=duration:desc,index`
+ /// + ///
+ ///
public class MediaQuery { + + /// + /// The type of media to retrieve or filter by.
+ /// + /// + ///
+ /// 1 = movie
+ /// 2 = show
+ /// 3 = season
+ /// 4 = episode
+ /// 5 = artist
+ /// 6 = album
+ /// 7 = track
+ /// 8 = photo_album
+ /// 9 = photo
+ ///
+ /// E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries
+ /// + ///
+ ///
+ [SpeakeasyMetadata("queryParam:name=type")] + public MediaType? Type { get; set; } + + /// + /// Change the default level to which fields refer (used with type for hierarchical queries) + /// + [SpeakeasyMetadata("queryParam:name=sourceType")] + public long? SourceType { get; set; } + + /// + /// Field(s) to sort by, with optional modifiers. Use comma to separate multiple fields, and :desc or :nullsLast for modifiers (e.g., "duration:desc,index") + /// + [SpeakeasyMetadata("queryParam:name=sort")] + public string? Sort { get; set; } + + /// + /// Field to group results by (similar to SQL GROUP BY) + /// + [SpeakeasyMetadata("queryParam:name=group")] + public string? Group { get; set; } + + /// + /// Maximum number of results to return + /// + [SpeakeasyMetadata("queryParam:name=limit")] + public long? Limit { get; set; } } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/MediaReviewsVisibility.cs b/LukeHagar/PlexAPI/SDK/Models/Components/MediaReviewsVisibility.cs new file mode 100644 index 0000000..a60c3ae --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Components/MediaReviewsVisibility.cs @@ -0,0 +1,25 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Components +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// Whether or not the account has media reviews visibility enabled + /// + public enum MediaReviewsVisibility + { + NoOne = 0, + CriticsOnly = 1, + PlexUsersOnly = 2, + PlexUsersAndCritics = 3, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/MediaType.cs b/LukeHagar/PlexAPI/SDK/Models/Components/MediaType.cs new file mode 100644 index 0000000..c17c93f --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Components/MediaType.cs @@ -0,0 +1,46 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Components +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// The type of media to retrieve or filter by.
+ /// + /// + ///
+ /// 1 = movie
+ /// 2 = show
+ /// 3 = season
+ /// 4 = episode
+ /// 5 = artist
+ /// 6 = album
+ /// 7 = track
+ /// 8 = photo_album
+ /// 9 = photo
+ ///
+ /// E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries
+ /// + ///
+ ///
+ public enum MediaType + { + 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/LukeHagar/PlexAPI/SDK/Models/Components/MediaTypeString.cs b/LukeHagar/PlexAPI/SDK/Models/Components/MediaTypeString.cs new file mode 100644 index 0000000..b2c78fb --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Components/MediaTypeString.cs @@ -0,0 +1,80 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Components +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + + /// + /// The type of media content in the Plex library. This can represent videos, music, or photos.
+ /// + /// + /// + /// + ///
+ public enum MediaTypeString + { + [JsonProperty("movie")] + Movie, + [JsonProperty("show")] + TvShow, + [JsonProperty("season")] + Season, + [JsonProperty("episode")] + Episode, + [JsonProperty("artist")] + Artist, + [JsonProperty("album")] + Album, + [JsonProperty("track")] + Track, + [JsonProperty("photoalbum")] + PhotoAlbum, + [JsonProperty("photo")] + Photo, + [JsonProperty("collection")] + Collection, + } + + public static class MediaTypeStringExtension + { + public static string Value(this MediaTypeString value) + { + return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString(); + } + + public static MediaTypeString ToEnum(this string value) + { + foreach(var field in typeof(MediaTypeString).GetFields()) + { + var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false); + if (attributes.Length == 0) + { + continue; + } + + var attribute = attributes[0] as JsonPropertyAttribute; + if (attribute != null && attribute.PropertyName == value) + { + var enumVal = field.GetValue(null); + + if (enumVal is MediaTypeString) + { + return (MediaTypeString)enumVal; + } + } + } + + throw new Exception($"Unknown value {value} for enum MediaTypeString"); + } + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/Metadata.cs b/LukeHagar/PlexAPI/SDK/Models/Components/Metadata.cs index 57dbcad..6c84586 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Components/Metadata.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Components/Metadata.cs @@ -12,6 +12,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components using LukeHagar.PlexAPI.SDK.Models.Components; using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; + using NodaTime; using System.Collections.Generic; /// @@ -32,43 +33,43 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// The title of the item (e.g. “300” or “The Simpsons”) /// [JsonProperty("title")] - public object? Title { get; set; } + public string Title { get; set; } = default!; /// /// The type of the video item, such as `movie`, `episode`, or `clip`. /// [JsonProperty("type")] - public object? Type { get; set; } + public string Type { get; set; } = default!; /// /// When present, contains the disc number for a track on multi-disc albums. /// [JsonProperty("absoluteIndex")] - public long? AbsoluteIndex { get; set; } + public int? AbsoluteIndex { get; set; } /// /// In units of seconds since the epoch, returns the time at which the item was added to the library. /// [JsonProperty("addedAt")] - public long? AddedAt { get; set; } + public long AddedAt { get; set; } = default!; /// /// When present, the URL for the background artwork for the item. /// [JsonProperty("art")] - public object? Art { get; set; } + public string? Art { get; set; } /// /// Some rating systems separate reviewer ratings from audience ratings /// [JsonProperty("audienceRating")] - public double? AudienceRating { get; set; } + public float? AudienceRating { get; set; } /// /// A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). /// [JsonProperty("audienceRatingImage")] - public object? AudienceRatingImage { get; set; } + public string? AudienceRatingImage { get; set; } [JsonProperty("Autotag")] public List? Autotag { get; set; } @@ -77,25 +78,31 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, the URL for a banner graphic for the item. /// [JsonProperty("banner")] - public object? Banner { get; set; } + public string? Banner { get; set; } /// /// When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). /// [JsonProperty("chapterSource")] - public object? ChapterSource { get; set; } + public string? ChapterSource { get; set; } + + /// + /// The number of child items associated with this media item. + /// + [JsonProperty("childCount")] + public int? ChildCount { get; set; } /// /// When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). /// [JsonProperty("composite")] - public object? Composite { get; set; } + public string? Composite { get; set; } /// /// If known, the content rating (e.g. MPAA) for an item. /// [JsonProperty("contentRating")] - public object? ContentRating { get; set; } + public string? ContentRating { get; set; } [JsonProperty("Country")] public List? Country { get; set; } @@ -107,7 +114,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, the duration for the item, in units of milliseconds. /// [JsonProperty("duration")] - public long? Duration { get; set; } + public int? Duration { get; set; } /// /// Typically only seen in metadata at a library's top level @@ -124,6 +131,12 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components [JsonProperty("grandparentArt")] public string? GrandparentArt { get; set; } + /// + /// The GUID of the grandparent media item. + /// + [JsonProperty("grandparentGuid")] + public string? GrandparentGuid { get; set; } + /// /// The `hero` of the grandparent /// @@ -160,14 +173,20 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components [JsonProperty("grandparentTitle")] public string? GrandparentTitle { get; set; } + /// + /// The globally unique identifier for the media item. + /// + [JsonProperty("guid")] + public string? Guid { get; set; } + [JsonProperty("Guid")] - public List? Guid { get; set; } + public List? Guids { get; set; } /// /// When present, the URL for a hero image for the item. /// [JsonProperty("hero")] - public object? Hero { get; set; } + public string? Hero { get; set; } [JsonProperty("Image")] public List? Image { get; set; } @@ -176,17 +195,14 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. /// [JsonProperty("index")] - public long? Index { get; set; } + public int? Index { get; set; } /// /// The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. /// [JsonProperty("key")] - public object? Key { get; set; } + public string Key { get; set; } = default!; - /// - /// When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - /// [JsonProperty("lastViewedAt")] public long? LastViewedAt { get; set; } @@ -194,7 +210,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// For shows and seasons, contains the number of total episodes. /// [JsonProperty("leafCount")] - public long? LeafCount { get; set; } + public int? LeafCount { get; set; } [JsonProperty("Media")] public List? Media { get; set; } @@ -203,13 +219,19 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. /// [JsonProperty("originallyAvailableAt")] - public object? OriginallyAvailableAt { get; set; } + public LocalDate? OriginallyAvailableAt { get; set; } /// /// When present, used to indicate an item's original title, e.g. a movie's foreign title. /// [JsonProperty("originalTitle")] - public object? OriginalTitle { get; set; } + public string? OriginalTitle { get; set; } + + /// + /// The GUID of the parent media item. + /// + [JsonProperty("parentGuid")] + public string? ParentGuid { get; set; } /// /// The `hero` of the parent @@ -221,7 +243,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// The `index` of the parent /// [JsonProperty("parentIndex")] - public long? ParentIndex { get; set; } + public int? ParentIndex { get; set; } /// /// The `key` of the parent @@ -251,7 +273,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. /// [JsonProperty("primaryExtraKey")] - public object? PrimaryExtraKey { get; set; } + public string? PrimaryExtraKey { get; set; } /// /// Prompt to give the user for this directory (such as `Search Movies`) @@ -263,7 +285,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. /// [JsonProperty("rating")] - public double? Rating { get; set; } + public float? Rating { get; set; } [JsonProperty("Rating")] public List? RatingArray { get; set; } @@ -272,19 +294,19 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// Number of ratings under this metadata /// [JsonProperty("ratingCount")] - public long? RatingCount { get; set; } + public int? RatingCount { get; set; } /// /// When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. /// [JsonProperty("ratingImage")] - public object? RatingImage { get; set; } + public string? RatingImage { get; set; } /// /// This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. /// [JsonProperty("ratingKey")] - public object? RatingKey { get; set; } + public string? RatingKey { get; set; } [JsonProperty("Role")] public List? Role { get; set; } @@ -323,43 +345,43 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). /// [JsonProperty("studio")] - public object? Studio { get; set; } + public string? Studio { get; set; } /// /// The subtype of the video item, such as `photo` when the video item is in a photo library /// [JsonProperty("subtype")] - public object? Subtype { get; set; } + public string? Subtype { get; set; } /// /// When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). /// [JsonProperty("summary")] - public object? Summary { get; set; } + public string? Summary { get; set; } /// /// When present, a pithy one-liner about the item (usually only seen for movies). /// [JsonProperty("tagline")] - public object? Tagline { get; set; } + public string? Tagline { get; set; } /// /// When present, the URL for theme music for the item (usually only for TV shows). /// [JsonProperty("theme")] - public object? Theme { get; set; } + public string? Theme { get; set; } /// /// When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. /// [JsonProperty("thumb")] - public object? Thumb { get; set; } + public string? Thumb { get; set; } /// /// Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). /// [JsonProperty("titleSort")] - public object? TitleSort { get; set; } + public string? TitleSort { get; set; } /// /// In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). @@ -371,25 +393,25 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When the user has rated an item, this contains the user rating /// [JsonProperty("userRating")] - public double? UserRating { get; set; } + public float? UserRating { get; set; } /// /// When a users has completed watched or listened to an item, this attribute contains the number of consumptions. /// [JsonProperty("viewCount")] - public long? ViewCount { get; set; } + public int? ViewCount { get; set; } /// /// For shows and seasons, contains the number of viewed episodes. /// [JsonProperty("viewedLeafCount")] - public long? ViewedLeafCount { get; set; } + public int? ViewedLeafCount { get; set; } /// /// When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. /// [JsonProperty("viewOffset")] - public long? ViewOffset { get; set; } + public int? ViewOffset { get; set; } [JsonProperty("Writer")] public List? Writer { get; set; } @@ -398,7 +420,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, the year associated with the item's release (e.g. release year for a movie). /// [JsonProperty("year")] - public long? Year { get; set; } + public int? Year { get; set; } [JsonProperty("additionalProperties")] public Dictionary? AdditionalProperties { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/MetadataItem.cs b/LukeHagar/PlexAPI/SDK/Models/Components/MetadataItem.cs index e221908..6eb7972 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Components/MetadataItem.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Components/MetadataItem.cs @@ -12,6 +12,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components using LukeHagar.PlexAPI.SDK.Models.Components; using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; + using NodaTime; using System.Collections.Generic; /// @@ -32,43 +33,43 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// The title of the item (e.g. “300” or “The Simpsons”) /// [JsonProperty("title")] - public object? Title { get; set; } + public string Title { get; set; } = default!; /// /// The type of the video item, such as `movie`, `episode`, or `clip`. /// [JsonProperty("type")] - public object? Type { get; set; } + public string Type { get; set; } = default!; /// /// When present, contains the disc number for a track on multi-disc albums. /// [JsonProperty("absoluteIndex")] - public long? AbsoluteIndex { get; set; } + public int? AbsoluteIndex { get; set; } /// /// In units of seconds since the epoch, returns the time at which the item was added to the library. /// [JsonProperty("addedAt")] - public long? AddedAt { get; set; } + public long AddedAt { get; set; } = default!; /// /// When present, the URL for the background artwork for the item. /// [JsonProperty("art")] - public object? Art { get; set; } + public string? Art { get; set; } /// /// Some rating systems separate reviewer ratings from audience ratings /// [JsonProperty("audienceRating")] - public double? AudienceRating { get; set; } + public float? AudienceRating { get; set; } /// /// A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). /// [JsonProperty("audienceRatingImage")] - public object? AudienceRatingImage { get; set; } + public string? AudienceRatingImage { get; set; } [JsonProperty("Autotag")] public List? Autotag { get; set; } @@ -77,25 +78,31 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, the URL for a banner graphic for the item. /// [JsonProperty("banner")] - public object? Banner { get; set; } + public string? Banner { get; set; } /// /// When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). /// [JsonProperty("chapterSource")] - public object? ChapterSource { get; set; } + public string? ChapterSource { get; set; } + + /// + /// The number of child items associated with this media item. + /// + [JsonProperty("childCount")] + public int? ChildCount { get; set; } /// /// When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). /// [JsonProperty("composite")] - public object? Composite { get; set; } + public string? Composite { get; set; } /// /// If known, the content rating (e.g. MPAA) for an item. /// [JsonProperty("contentRating")] - public object? ContentRating { get; set; } + public string? ContentRating { get; set; } [JsonProperty("Country")] public List? Country { get; set; } @@ -107,7 +114,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, the duration for the item, in units of milliseconds. /// [JsonProperty("duration")] - public long? Duration { get; set; } + public int? Duration { get; set; } /// /// Typically only seen in metadata at a library's top level @@ -124,6 +131,12 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components [JsonProperty("grandparentArt")] public string? GrandparentArt { get; set; } + /// + /// The GUID of the grandparent media item. + /// + [JsonProperty("grandparentGuid")] + public string? GrandparentGuid { get; set; } + /// /// The `hero` of the grandparent /// @@ -160,14 +173,20 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components [JsonProperty("grandparentTitle")] public string? GrandparentTitle { get; set; } + /// + /// The globally unique identifier for the media item. + /// + [JsonProperty("guid")] + public string? Guid { get; set; } + [JsonProperty("Guid")] - public List? Guid { get; set; } + public List? Guids { get; set; } /// /// When present, the URL for a hero image for the item. /// [JsonProperty("hero")] - public object? Hero { get; set; } + public string? Hero { get; set; } [JsonProperty("Image")] public List? Image { get; set; } @@ -176,17 +195,14 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. /// [JsonProperty("index")] - public long? Index { get; set; } + public int? Index { get; set; } /// /// The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. /// [JsonProperty("key")] - public object? Key { get; set; } + public string Key { get; set; } = default!; - /// - /// When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - /// [JsonProperty("lastViewedAt")] public long? LastViewedAt { get; set; } @@ -194,7 +210,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// For shows and seasons, contains the number of total episodes. /// [JsonProperty("leafCount")] - public long? LeafCount { get; set; } + public int? LeafCount { get; set; } [JsonProperty("Media")] public List? Media { get; set; } @@ -203,13 +219,19 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. /// [JsonProperty("originallyAvailableAt")] - public object? OriginallyAvailableAt { get; set; } + public LocalDate? OriginallyAvailableAt { get; set; } /// /// When present, used to indicate an item's original title, e.g. a movie's foreign title. /// [JsonProperty("originalTitle")] - public object? OriginalTitle { get; set; } + public string? OriginalTitle { get; set; } + + /// + /// The GUID of the parent media item. + /// + [JsonProperty("parentGuid")] + public string? ParentGuid { get; set; } /// /// The `hero` of the parent @@ -221,7 +243,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// The `index` of the parent /// [JsonProperty("parentIndex")] - public long? ParentIndex { get; set; } + public int? ParentIndex { get; set; } /// /// The `key` of the parent @@ -251,7 +273,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. /// [JsonProperty("primaryExtraKey")] - public object? PrimaryExtraKey { get; set; } + public string? PrimaryExtraKey { get; set; } /// /// Prompt to give the user for this directory (such as `Search Movies`) @@ -263,7 +285,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. /// [JsonProperty("rating")] - public double? Rating { get; set; } + public float? Rating { get; set; } [JsonProperty("Rating")] public List? RatingArray { get; set; } @@ -272,19 +294,19 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// Number of ratings under this metadata /// [JsonProperty("ratingCount")] - public long? RatingCount { get; set; } + public int? RatingCount { get; set; } /// /// When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. /// [JsonProperty("ratingImage")] - public object? RatingImage { get; set; } + public string? RatingImage { get; set; } /// /// This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. /// [JsonProperty("ratingKey")] - public object? RatingKey { get; set; } + public string? RatingKey { get; set; } [JsonProperty("Role")] public List? Role { get; set; } @@ -323,43 +345,43 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). /// [JsonProperty("studio")] - public object? Studio { get; set; } + public string? Studio { get; set; } /// /// The subtype of the video item, such as `photo` when the video item is in a photo library /// [JsonProperty("subtype")] - public object? Subtype { get; set; } + public string? Subtype { get; set; } /// /// When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). /// [JsonProperty("summary")] - public object? Summary { get; set; } + public string? Summary { get; set; } /// /// When present, a pithy one-liner about the item (usually only seen for movies). /// [JsonProperty("tagline")] - public object? Tagline { get; set; } + public string? Tagline { get; set; } /// /// When present, the URL for theme music for the item (usually only for TV shows). /// [JsonProperty("theme")] - public object? Theme { get; set; } + public string? Theme { get; set; } /// /// When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. /// [JsonProperty("thumb")] - public object? Thumb { get; set; } + public string? Thumb { get; set; } /// /// Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). /// [JsonProperty("titleSort")] - public object? TitleSort { get; set; } + public string? TitleSort { get; set; } /// /// In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). @@ -371,25 +393,25 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When the user has rated an item, this contains the user rating /// [JsonProperty("userRating")] - public double? UserRating { get; set; } + public float? UserRating { get; set; } /// /// When a users has completed watched or listened to an item, this attribute contains the number of consumptions. /// [JsonProperty("viewCount")] - public long? ViewCount { get; set; } + public int? ViewCount { get; set; } /// /// For shows and seasons, contains the number of viewed episodes. /// [JsonProperty("viewedLeafCount")] - public long? ViewedLeafCount { get; set; } + public int? ViewedLeafCount { get; set; } /// /// When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. /// [JsonProperty("viewOffset")] - public long? ViewOffset { get; set; } + public int? ViewOffset { get; set; } [JsonProperty("Writer")] public List? Writer { get; set; } @@ -398,7 +420,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// When present, the year associated with the item's release (e.g. release year for a movie). /// [JsonProperty("year")] - public long? Year { get; set; } + public int? Year { get; set; } [JsonProperty("MetadataItem")] public List? MetadataItemValue { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/Part.cs b/LukeHagar/PlexAPI/SDK/Models/Components/Part.cs index 62f0eb2..07cbc0d 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Components/Part.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Components/Part.cs @@ -24,38 +24,53 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components public class Part { + /// + /// Indicates if the part is accessible. + /// + [JsonProperty("accessible")] + public bool? Accessible { get; set; } + [JsonProperty("audioProfile")] - public object? AudioProfile { get; set; } + public string? AudioProfile { get; set; } /// /// The container of the media file, such as `mp4` or `mkv` /// [JsonProperty("container")] - public object? Container { get; set; } + public string? Container { get; set; } /// /// The duration of the media item, in milliseconds /// [JsonProperty("duration")] - public long? Duration { get; set; } + public int? Duration { get; set; } + + /// + /// Indicates if the part exists. + /// + [JsonProperty("exists")] + public bool? Exists { get; set; } /// /// The local file path at which the part is stored on the server /// [JsonProperty("file")] - public object? File { get; set; } + public string? File { get; set; } [JsonProperty("has64bitOffsets")] public bool? Has64bitOffsets { get; set; } [JsonProperty("id")] - public long? Id { get; set; } + public long Id { get; set; } = default!; + + [JsonProperty("indexes")] + public string? Indexes { get; set; } /// /// The key from which the media can be streamed /// [JsonProperty("key")] - public object? Key { get; set; } + public string Key { get; set; } = default!; [JsonProperty("optimizedForStreaming")] public bool? OptimizedForStreaming { get; set; } @@ -70,7 +85,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components public List? Stream { get; set; } [JsonProperty("videoProfile")] - public object? VideoProfile { get; set; } + public string? VideoProfile { get; set; } [JsonProperty("additionalProperties")] public Dictionary? AdditionalProperties { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/PlexDevice.cs b/LukeHagar/PlexAPI/SDK/Models/Components/PlexDevice.cs new file mode 100644 index 0000000..9f00ab8 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Components/PlexDevice.cs @@ -0,0 +1,96 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Components +{ + using LukeHagar.PlexAPI.SDK.Models.Components; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + using System.Collections.Generic; + + public class PlexDevice + { + + [JsonProperty("name")] + public string Name { get; set; } = default!; + + [JsonProperty("product")] + public string Product { get; set; } = default!; + + [JsonProperty("productVersion")] + public string ProductVersion { get; set; } = default!; + + [JsonProperty("platform", NullValueHandling = NullValueHandling.Include)] + public string? Platform { get; set; } + + [JsonProperty("platformVersion", NullValueHandling = NullValueHandling.Include)] + public string? PlatformVersion { get; set; } + + [JsonProperty("device", NullValueHandling = NullValueHandling.Include)] + public string? Device { get; set; } + + [JsonProperty("clientIdentifier")] + public string ClientIdentifier { get; set; } = default!; + + [JsonProperty("createdAt")] + public DateTime CreatedAt { get; set; } = default!; + + [JsonProperty("lastSeenAt")] + public DateTime LastSeenAt { get; set; } = default!; + + [JsonProperty("provides")] + public string Provides { get; set; } = default!; + + /// + /// ownerId is null when the device is owned by the token used to send the request + /// + [JsonProperty("ownerId", NullValueHandling = NullValueHandling.Include)] + public long? OwnerId { get; set; } + + [JsonProperty("sourceTitle", NullValueHandling = NullValueHandling.Include)] + public string? SourceTitle { get; set; } + + [JsonProperty("publicAddress")] + public string PublicAddress { get; set; } = default!; + + [JsonProperty("accessToken")] + public string AccessToken { get; set; } = default!; + + [JsonProperty("owned")] + public bool Owned { get; set; } = default!; + + [JsonProperty("home")] + public bool Home { get; set; } = default!; + + [JsonProperty("synced")] + public bool Synced { get; set; } = default!; + + [JsonProperty("relay")] + public bool Relay { get; set; } = default!; + + [JsonProperty("presence")] + public bool Presence { get; set; } = default!; + + [JsonProperty("httpsRequired")] + public bool HttpsRequired { get; set; } = default!; + + [JsonProperty("publicAddressMatches")] + public bool PublicAddressMatches { get; set; } = default!; + + [JsonProperty("dnsRebindingProtection")] + public bool DnsRebindingProtection { get; set; } = default!; + + [JsonProperty("natLoopbackSupported")] + public bool NatLoopbackSupported { get; set; } = default!; + + [JsonProperty("connections")] + public List Connections { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/PlexDeviceProtocol.cs b/LukeHagar/PlexAPI/SDK/Models/Components/PlexDeviceProtocol.cs new file mode 100644 index 0000000..0b698d6 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Components/PlexDeviceProtocol.cs @@ -0,0 +1,60 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Components +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + + /// + /// The protocol used for the connection (http, https, etc) + /// + public enum PlexDeviceProtocol + { + [JsonProperty("http")] + Http, + [JsonProperty("https")] + Https, + } + + public static class PlexDeviceProtocolExtension + { + public static string Value(this PlexDeviceProtocol value) + { + return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString(); + } + + public static PlexDeviceProtocol ToEnum(this string value) + { + foreach(var field in typeof(PlexDeviceProtocol).GetFields()) + { + var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false); + if (attributes.Length == 0) + { + continue; + } + + var attribute = attributes[0] as JsonPropertyAttribute; + if (attribute != null && attribute.PropertyName == value) + { + var enumVal = field.GetValue(null); + + if (enumVal is PlexDeviceProtocol) + { + return (PlexDeviceProtocol)enumVal; + } + } + } + + throw new Exception($"Unknown value {value} for enum PlexDeviceProtocol"); + } + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/Services.cs b/LukeHagar/PlexAPI/SDK/Models/Components/Services.cs new file mode 100644 index 0000000..9f561e3 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Components/Services.cs @@ -0,0 +1,38 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Components +{ + using LukeHagar.PlexAPI.SDK.Models.Components; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + using System.Collections.Concurrent; + using System.Collections.Generic; + using System.Linq; + + public class Services + { + + [JsonProperty("identifier")] + public string Identifier { get; set; } = default!; + + [JsonProperty("endpoint")] + public string Endpoint { get; set; } = default!; + + [JsonProperty("token", NullValueHandling = NullValueHandling.Include)] + public string? Token { get; set; } + + [JsonProperty("secret", NullValueHandling = NullValueHandling.Include)] + public string? Secret { get; set; } + + [JsonProperty("status")] + public UserPlexAccountStatus Status { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/Stream.cs b/LukeHagar/PlexAPI/SDK/Models/Components/Stream.cs index a7fab92..7274cbf 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Components/Stream.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Components/Stream.cs @@ -23,113 +23,306 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components public class Stream { + /// + /// Indicates if this stream is default. + /// [JsonProperty("default")] public bool? Default { get; set; } + /// + /// Audio channel layout. + /// [JsonProperty("audioChannelLayout")] - public object? AudioChannelLayout { get; set; } - - [JsonProperty("bitDepth")] - public long? BitDepth { get; set; } - - [JsonProperty("bitrate")] - public long? Bitrate { get; set; } + public string? AudioChannelLayout { get; set; } /// - /// For subtitle streams only. If `true` then the server can attempt to automatically sync the subtitle timestamps with the video. + /// Number of audio channels (for audio streams). + /// + [JsonProperty("channels")] + public int? Channels { get; set; } + + /// + /// Bit depth of the video stream. + /// + [JsonProperty("bitDepth")] + public int? BitDepth { get; set; } + + /// + /// Dolby Vision BL compatibility ID. + /// + [JsonProperty("DOVIBLCompatID")] + public int? DOVIBLCompatID { get; set; } + + /// + /// Indicates if Dolby Vision BL is present. + /// + [JsonProperty("DOVIBLPresent")] + public bool? DOVIBLPresent { get; set; } + + /// + /// Indicates if Dolby Vision EL is present. + /// + [JsonProperty("DOVIELPresent")] + public bool? DOVIELPresent { get; set; } + + /// + /// Dolby Vision level. + /// + [JsonProperty("DOVILevel")] + public int? DOVILevel { get; set; } + + /// + /// Indicates if Dolby Vision is present. + /// + [JsonProperty("DOVIPresent")] + public bool? DOVIPresent { get; set; } + + /// + /// Dolby Vision profile. + /// + [JsonProperty("DOVIProfile")] + public int? DOVIProfile { get; set; } + + /// + /// Indicates if Dolby Vision RPU is present. + /// + [JsonProperty("DOVIRPUPresent")] + public bool? DOVIRPUPresent { get; set; } + + /// + /// Dolby Vision version. + /// + [JsonProperty("DOVIVersion")] + public string? DOVIVersion { get; set; } + + /// + /// Bitrate of the stream. + /// + [JsonProperty("bitrate")] + public int? Bitrate { get; set; } + + /// + /// Indicates if the stream can auto-sync. /// [JsonProperty("canAutoSync")] public bool? CanAutoSync { get; set; } + /// + /// Chroma sample location. + /// [JsonProperty("chromaLocation")] - public object? ChromaLocation { get; set; } - - [JsonProperty("chromaSubsampling")] - public object? ChromaSubsampling { get; set; } + public string? ChromaLocation { get; set; } /// - /// The codec of the stream, such as `h264` or `aac` + /// Chroma subsampling format. + /// + [JsonProperty("chromaSubsampling")] + public string? ChromaSubsampling { get; set; } + + /// + /// Coded video height. + /// + [JsonProperty("codedHeight")] + public int? CodedHeight { get; set; } + + /// + /// Coded video width. + /// + [JsonProperty("codedWidth")] + public int? CodedWidth { get; set; } + + [JsonProperty("closedCaptions")] + public bool? ClosedCaptions { get; set; } + + /// + /// Codec used by the stream. /// [JsonProperty("codec")] - public object? Codec { get; set; } - - [JsonProperty("colorPrimaries")] - public object? ColorPrimaries { get; set; } - - [JsonProperty("colorRange")] - public object? ColorRange { get; set; } - - [JsonProperty("colorSpace")] - public object? ColorSpace { get; set; } - - [JsonProperty("colorTrc")] - public object? ColorTrc { get; set; } + public string Codec { get; set; } = default!; /// - /// A friendly name for the stream, often comprised of the language and codec information + /// Color primaries used. + /// + [JsonProperty("colorPrimaries")] + public string? ColorPrimaries { get; set; } + + /// + /// Color range (e.g., tv). + /// + [JsonProperty("colorRange")] + public string? ColorRange { get; set; } + + /// + /// Color space. + /// + [JsonProperty("colorSpace")] + public string? ColorSpace { get; set; } + + /// + /// Color transfer characteristics. + /// + [JsonProperty("colorTrc")] + public string? ColorTrc { get; set; } + + /// + /// Display title for the stream. /// [JsonProperty("displayTitle")] - public object? DisplayTitle { get; set; } + public string DisplayTitle { get; set; } = default!; + /// + /// Extended display title for the stream. + /// + [JsonProperty("extendedDisplayTitle")] + public string? ExtendedDisplayTitle { get; set; } + + /// + /// Frame rate of the stream. + /// [JsonProperty("frameRate")] - public double? FrameRate { get; set; } + public float? FrameRate { get; set; } [JsonProperty("hasScalingMatrix")] - public object? HasScalingMatrix { get; set; } - - [JsonProperty("height")] - public long? Height { get; set; } - - [JsonProperty("id")] - public long? Id { get; set; } + public bool? HasScalingMatrix { get; set; } /// - /// If the stream is part of the `Part` and not an external resource, the index of the stream within that part + /// Height of the video stream. + /// + [JsonProperty("height")] + public int? Height { get; set; } + + /// + /// Unique stream identifier. + /// + [JsonProperty("id")] + public int Id { get; set; } = default!; + + /// + /// Index of the stream. /// [JsonProperty("index")] - public long? Index { get; set; } + public int? Index { get; set; } /// - /// If the stream is independently streamable, the key from which it can be streamed + /// Key to access this stream part. /// [JsonProperty("key")] - public object? Key { get; set; } - - [JsonProperty("language")] - public object? Language { get; set; } + public string Key { get; set; } = default!; /// - /// The three character language code for the stream contents + /// Language of the stream. + /// + [JsonProperty("language")] + public string? Language { get; set; } + + /// + /// ISO language code. /// [JsonProperty("languageCode")] - public object? LanguageCode { get; set; } + public string? LanguageCode { get; set; } + /// + /// Language tag (e.g., en). + /// + [JsonProperty("languageTag")] + public string? LanguageTag { get; set; } + + /// + /// Format of the stream (e.g., srt). + /// + [JsonProperty("format")] + public string? Format { get; set; } + + /// + /// Indicates whether header compression is enabled. + /// + [JsonProperty("headerCompression")] + public bool? HeaderCompression { get; set; } + + /// + /// Video level. + /// [JsonProperty("level")] - public long? Level { get; set; } + public int? Level { get; set; } + /// + /// Indicates if this is the original stream. + /// + [JsonProperty("original")] + public bool? Original { get; set; } + + /// + /// Video profile. + /// [JsonProperty("profile")] - public object? Profile { get; set; } + public string? Profile { get; set; } + /// + /// Number of reference frames. + /// [JsonProperty("refFrames")] - public long? RefFrames { get; set; } + public int? RefFrames { get; set; } + /// + /// Sampling rate for the audio stream. + /// [JsonProperty("samplingRate")] - public long? SamplingRate { get; set; } + public int? SamplingRate { get; set; } + [JsonProperty("scanType")] + public string? ScanType { get; set; } + + [JsonProperty("embeddedInVideo")] + public string? EmbeddedInVideo { get; set; } + + /// + /// Indicates if this stream is selected (applicable for audio streams). + /// [JsonProperty("selected")] public bool? Selected { get; set; } - [JsonProperty("streamIdentifier")] - public long? StreamIdentifier { get; set; } + [JsonProperty("forced")] + public bool? Forced { get; set; } /// - /// A number indicating the type of the stream. `1` for video, `2` for audio, `3` for subtitles, `4` for lyrics + /// Indicates if the stream is for the hearing impaired. + /// + [JsonProperty("hearingImpaired")] + public bool? HearingImpaired { get; set; } + + /// + /// Indicates if the stream is a dub. + /// + [JsonProperty("dub")] + public bool? Dub { get; set; } + + /// + /// Optional title for the stream (e.g., language variant). + /// + [JsonProperty("title")] + public string? Title { get; set; } + + [JsonProperty("streamIdentifier")] + public int? StreamIdentifier { get; set; } + + /// + /// Stream type:
+ /// + /// + /// - VIDEO = 1
+ /// - AUDIO = 2
+ /// - SUBTITLE = 3
+ /// + ///
///
[JsonProperty("streamType")] - public long? StreamType { get; set; } + public long StreamType { get; } = 1; + /// + /// Width of the video stream. + /// [JsonProperty("width")] - public long? Width { get; set; } + public int? Width { get; set; } [JsonProperty("additionalProperties")] public Dictionary? AdditionalProperties { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/Subscription.cs b/LukeHagar/PlexAPI/SDK/Models/Components/Subscription.cs new file mode 100644 index 0000000..ff3d951 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Components/Subscription.cs @@ -0,0 +1,62 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Components +{ + using LukeHagar.PlexAPI.SDK.Models.Components; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + using System.Collections.Concurrent; + using System.Collections.Generic; + using System.Linq; + + /// + /// If the account's Plex Pass subscription is active + /// + public class Subscription + { + + /// + /// List of features allowed on your Plex Pass subscription + /// + [JsonProperty("features")] + public List? Features { get; set; } + + /// + /// If the account's Plex Pass subscription is active + /// + [JsonProperty("active")] + public bool? Active { get; set; } + + /// + /// Date the account subscribed to Plex Pass + /// + [JsonProperty("subscribedAt")] + public string? SubscribedAt { get; set; } = null; + + /// + /// String representation of subscriptionActive + /// + [JsonProperty("status")] + public UserPlexAccountSubscriptionStatus? Status { get; set; } + + /// + /// Payment service used for your Plex Pass subscription + /// + [JsonProperty("paymentService")] + public string? PaymentService { get; set; } = null; + + /// + /// Name of Plex Pass subscription plan + /// + [JsonProperty("plan")] + public string? Plan { get; set; } = null; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/Tag.cs b/LukeHagar/PlexAPI/SDK/Models/Components/Tag.cs index d09fed2..ab36ea2 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Components/Tag.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Components/Tag.cs @@ -35,11 +35,14 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// A filter parameter that can be used to query for more content that matches this tag value. /// [JsonProperty("filter")] - public object? Filter { get; set; } + public string? Filter { get; set; } [JsonProperty("id")] - public long? Id { get; set; } + public int? Id { get; set; } + /// + /// 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. + /// [JsonProperty("ratingKey")] public string? RatingKey { get; set; } @@ -47,24 +50,24 @@ namespace LukeHagar.PlexAPI.SDK.Models.Components /// The role this actor played /// [JsonProperty("role")] - public object? Role { get; set; } + public string? Role { get; set; } /// /// The value of the tag (the name) /// [JsonProperty("tag")] - public object? TagValue { get; set; } + public string TagValue { get; set; } = default!; /// /// Plex identifier for this tag which can be used to fetch additional information from plex.tv /// [JsonProperty("tagKey")] - public object? TagKey { get; set; } + public string? TagKey { get; set; } [JsonProperty("tagType")] - public long? TagType { get; set; } + public int? TagType { get; set; } [JsonProperty("thumb")] - public object? Thumb { get; set; } + public string? Thumb { get; set; } } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/UserPlexAccount.cs b/LukeHagar/PlexAPI/SDK/Models/Components/UserPlexAccount.cs new file mode 100644 index 0000000..94a1e52 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Components/UserPlexAccount.cs @@ -0,0 +1,250 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Components +{ + using LukeHagar.PlexAPI.SDK.Models.Components; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + using System.Collections.Generic; + + public class UserPlexAccount + { + + /// + /// Unknown + /// + [JsonProperty("adsConsent")] + public bool? AdsConsent { get; set; } = null; + + [JsonProperty("adsConsentReminderAt")] + public long? AdsConsentReminderAt { get; set; } = null; + + [JsonProperty("adsConsentSetAt")] + public long? AdsConsentSetAt { get; set; } = null; + + /// + /// Unknown + /// + [JsonProperty("anonymous")] + public bool? Anonymous { get; set; } = false; + + /// + /// The account token + /// + [JsonProperty("authToken")] + public string AuthToken { get; set; } = default!; + + /// + /// If the two-factor authentication backup codes have been created + /// + [JsonProperty("backupCodesCreated")] + public bool? BackupCodesCreated { get; set; } = false; + + /// + /// If the account has been confirmed + /// + [JsonProperty("confirmed")] + public bool? Confirmed { get; set; } = false; + + /// + /// The account country + /// + [JsonProperty("country")] + public string? Country { get; set; } + + /// + /// The account email address + /// + [JsonProperty("email")] + public string Email { get; set; } = default!; + + /// + /// If login with email only is enabled + /// + [JsonProperty("emailOnlyAuth")] + public bool? EmailOnlyAuth { get; set; } = false; + + /// + /// If experimental features are enabled + /// + [JsonProperty("experimentalFeatures")] + public bool? ExperimentalFeatures { get; set; } = false; + + /// + /// Your account full name + /// + [JsonProperty("friendlyName")] + public string FriendlyName { get; set; } = default!; + + /// + /// List of devices your allowed to use with this account + /// + [JsonProperty("entitlements")] + public List? Entitlements { get; set; } + + /// + /// If the account is a Plex Home guest user + /// + [JsonProperty("guest")] + public bool? Guest { get; set; } = false; + + /// + /// If the account has a password + /// + [JsonProperty("hasPassword")] + public bool? HasPassword { get; set; } = true; + + /// + /// If the account is a Plex Home user + /// + [JsonProperty("home")] + public bool? Home { get; set; } = false; + + /// + /// If the account is the Plex Home admin + /// + [JsonProperty("homeAdmin")] + public bool? HomeAdmin { get; set; } = false; + + /// + /// The number of accounts in the Plex Home + /// + [JsonProperty("homeSize")] + public int? HomeSize { get; set; } + + /// + /// The Plex account ID + /// + [JsonProperty("id")] + public int Id { get; set; } = default!; + + /// + /// Unix epoch datetime in seconds + /// + [JsonProperty("joinedAt")] + public long JoinedAt { get; set; } = default!; + + /// + /// The account locale + /// + [JsonProperty("locale")] + public string? Locale { get; set; } = null; + + /// + /// If you are subscribed to the Plex newsletter + /// + [JsonProperty("mailingListActive")] + public bool? MailingListActive { get; set; } = false; + + /// + /// Your current mailing list status + /// + [JsonProperty("mailingListStatus")] + public Models.Components.MailingListStatus? MailingListStatus { get; set; } + + /// + /// The maximum number of accounts allowed in the Plex Home + /// + [JsonProperty("maxHomeSize")] + public int? MaxHomeSize { get; set; } + + /// + /// [Might be removed] The hashed Plex Home PIN + /// + [Obsolete("This field will be removed in a future release, please migrate away from it as soon as possible")] + [JsonProperty("pin")] + public string? Pin { get; set; } + + [JsonProperty("profile")] + public UserProfile? Profile { get; set; } + + /// + /// If the account has a Plex Home PIN enabled + /// + [JsonProperty("protected")] + public bool? Protected { get; set; } = false; + + /// + /// Unix epoch datetime in seconds + /// + [JsonProperty("rememberExpiresAt")] + public long? RememberExpiresAt { get; set; } + + /// + /// If the account is a Plex Home managed user + /// + [JsonProperty("restricted")] + public bool? Restricted { get; set; } = false; + + /// + /// [Might be removed] List of account roles. Plexpass membership listed here + /// + [JsonProperty("roles")] + public List? Roles { get; set; } + + /// + /// Unknown + /// + [JsonProperty("scrobbleTypes")] + public string? ScrobbleTypes { get; set; } + + [JsonProperty("services")] + public List? Services { get; set; } + + /// + /// If the account's Plex Pass subscription is active + /// + [JsonProperty("subscription")] + public Models.Components.Subscription? Subscription { get; set; } + + /// + /// Description of the Plex Pass subscription + /// + [JsonProperty("subscriptionDescription")] + public string? SubscriptionDescription { get; set; } = null; + + [JsonProperty("subscriptions")] + public List? Subscriptions { get; set; } + + /// + /// URL of the account thumbnail + /// + [JsonProperty("thumb")] + public string? Thumb { get; set; } + + /// + /// The title of the account (username or friendly name) + /// + [JsonProperty("title")] + public string Title { get; set; } = default!; + + /// + /// If two-factor authentication is enabled + /// + [JsonProperty("twoFactorEnabled")] + public bool? TwoFactorEnabled { get; set; } = false; + + /// + /// The account username + /// + [JsonProperty("username")] + public string Username { get; set; } = default!; + + /// + /// The account UUID + /// + [JsonProperty("uuid")] + public string Uuid { get; set; } = default!; + + [JsonProperty("attributionPartner")] + public string? AttributionPartner { get; set; } = null; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/UserPlexAccountStatus.cs b/LukeHagar/PlexAPI/SDK/Models/Components/UserPlexAccountStatus.cs new file mode 100644 index 0000000..b2894ae --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Components/UserPlexAccountStatus.cs @@ -0,0 +1,75 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Components +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + using System.Collections.Concurrent; + using System.Collections.Generic; + using System.Linq; + + [JsonConverter(typeof(OpenEnumConverter))] + public class UserPlexAccountStatus : IEquatable + { + public static readonly UserPlexAccountStatus Online = new UserPlexAccountStatus("online"); + public static readonly UserPlexAccountStatus Offline = new UserPlexAccountStatus("offline"); + + private static readonly Dictionary _knownValues = + new Dictionary () + { + ["online"] = Online, + ["offline"] = Offline + }; + + private static readonly ConcurrentDictionary _values = + new ConcurrentDictionary(_knownValues); + + private UserPlexAccountStatus(string value) + { + if (value == null) throw new ArgumentNullException(nameof(value)); + Value = value; + } + + public string Value { get; } + + public static UserPlexAccountStatus Of(string value) + { + return _values.GetOrAdd(value, _ => new UserPlexAccountStatus(value)); + } + + public static implicit operator UserPlexAccountStatus(string value) => Of(value); + public static implicit operator string(UserPlexAccountStatus userplexaccountstatus) => userplexaccountstatus.Value; + + public static UserPlexAccountStatus[] Values() + { + return _values.Values.ToArray(); + } + + public override string ToString() => Value.ToString(); + + public bool IsKnown() + { + return _knownValues.ContainsKey(Value); + } + + public override bool Equals(object? obj) => Equals(obj as UserPlexAccountStatus); + + public bool Equals(UserPlexAccountStatus? other) + { + if (ReferenceEquals(this, other)) return true; + if (other is null) return false; + return string.Equals(Value, other.Value); + } + + public override int GetHashCode() => Value.GetHashCode(); + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/UserPlexAccountSubscription.cs b/LukeHagar/PlexAPI/SDK/Models/Components/UserPlexAccountSubscription.cs new file mode 100644 index 0000000..c22c155 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Components/UserPlexAccountSubscription.cs @@ -0,0 +1,59 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Components +{ + using LukeHagar.PlexAPI.SDK.Models.Components; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + using System.Collections.Concurrent; + using System.Collections.Generic; + using System.Linq; + + public class UserPlexAccountSubscription + { + + /// + /// List of features allowed on your Plex Pass subscription + /// + [JsonProperty("features")] + public List? Features { get; set; } + + /// + /// If the account's Plex Pass subscription is active + /// + [JsonProperty("active")] + public bool? Active { get; set; } + + /// + /// Date the account subscribed to Plex Pass + /// + [JsonProperty("subscribedAt")] + public string? SubscribedAt { get; set; } = null; + + /// + /// String representation of subscriptionActive + /// + [JsonProperty("status")] + public UserPlexAccountSubscriptionsStatus? Status { get; set; } + + /// + /// Payment service used for your Plex Pass subscription + /// + [JsonProperty("paymentService")] + public string? PaymentService { get; set; } = null; + + /// + /// Name of Plex Pass subscription plan + /// + [JsonProperty("plan")] + public string? Plan { get; set; } = null; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/UserPlexAccountSubscriptionStatus.cs b/LukeHagar/PlexAPI/SDK/Models/Components/UserPlexAccountSubscriptionStatus.cs new file mode 100644 index 0000000..5249a27 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Components/UserPlexAccountSubscriptionStatus.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Components +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + using System.Collections.Concurrent; + using System.Collections.Generic; + using System.Linq; + + /// + /// String representation of subscriptionActive + /// + [JsonConverter(typeof(OpenEnumConverter))] + public class UserPlexAccountSubscriptionStatus : IEquatable + { + public static readonly UserPlexAccountSubscriptionStatus Inactive = new UserPlexAccountSubscriptionStatus("Inactive"); + public static readonly UserPlexAccountSubscriptionStatus Active = new UserPlexAccountSubscriptionStatus("Active"); + + private static readonly Dictionary _knownValues = + new Dictionary () + { + ["Inactive"] = Inactive, + ["Active"] = Active + }; + + private static readonly ConcurrentDictionary _values = + new ConcurrentDictionary(_knownValues); + + private UserPlexAccountSubscriptionStatus(string value) + { + if (value == null) throw new ArgumentNullException(nameof(value)); + Value = value; + } + + public string Value { get; } + + public static UserPlexAccountSubscriptionStatus Of(string value) + { + return _values.GetOrAdd(value, _ => new UserPlexAccountSubscriptionStatus(value)); + } + + public static implicit operator UserPlexAccountSubscriptionStatus(string value) => Of(value); + public static implicit operator string(UserPlexAccountSubscriptionStatus userplexaccountsubscriptionstatus) => userplexaccountsubscriptionstatus.Value; + + public static UserPlexAccountSubscriptionStatus[] Values() + { + return _values.Values.ToArray(); + } + + public override string ToString() => Value.ToString(); + + public bool IsKnown() + { + return _knownValues.ContainsKey(Value); + } + + public override bool Equals(object? obj) => Equals(obj as UserPlexAccountSubscriptionStatus); + + public bool Equals(UserPlexAccountSubscriptionStatus? other) + { + if (ReferenceEquals(this, other)) return true; + if (other is null) return false; + return string.Equals(Value, other.Value); + } + + public override int GetHashCode() => Value.GetHashCode(); + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/UserPlexAccountSubscriptionsStatus.cs b/LukeHagar/PlexAPI/SDK/Models/Components/UserPlexAccountSubscriptionsStatus.cs new file mode 100644 index 0000000..1e66162 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Components/UserPlexAccountSubscriptionsStatus.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Components +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + using System.Collections.Concurrent; + using System.Collections.Generic; + using System.Linq; + + /// + /// String representation of subscriptionActive + /// + [JsonConverter(typeof(OpenEnumConverter))] + public class UserPlexAccountSubscriptionsStatus : IEquatable + { + public static readonly UserPlexAccountSubscriptionsStatus Inactive = new UserPlexAccountSubscriptionsStatus("Inactive"); + public static readonly UserPlexAccountSubscriptionsStatus Active = new UserPlexAccountSubscriptionsStatus("Active"); + + private static readonly Dictionary _knownValues = + new Dictionary () + { + ["Inactive"] = Inactive, + ["Active"] = Active + }; + + private static readonly ConcurrentDictionary _values = + new ConcurrentDictionary(_knownValues); + + private UserPlexAccountSubscriptionsStatus(string value) + { + if (value == null) throw new ArgumentNullException(nameof(value)); + Value = value; + } + + public string Value { get; } + + public static UserPlexAccountSubscriptionsStatus Of(string value) + { + return _values.GetOrAdd(value, _ => new UserPlexAccountSubscriptionsStatus(value)); + } + + public static implicit operator UserPlexAccountSubscriptionsStatus(string value) => Of(value); + public static implicit operator string(UserPlexAccountSubscriptionsStatus userplexaccountsubscriptionsstatus) => userplexaccountsubscriptionsstatus.Value; + + public static UserPlexAccountSubscriptionsStatus[] Values() + { + return _values.Values.ToArray(); + } + + public override string ToString() => Value.ToString(); + + public bool IsKnown() + { + return _knownValues.ContainsKey(Value); + } + + public override bool Equals(object? obj) => Equals(obj as UserPlexAccountSubscriptionsStatus); + + public bool Equals(UserPlexAccountSubscriptionsStatus? other) + { + if (ReferenceEquals(this, other)) return true; + if (other is null) return false; + return string.Equals(Value, other.Value); + } + + public override int GetHashCode() => Value.GetHashCode(); + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/UserProfile.cs b/LukeHagar/PlexAPI/SDK/Models/Components/UserProfile.cs new file mode 100644 index 0000000..2123411 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Components/UserProfile.cs @@ -0,0 +1,74 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Components +{ + using LukeHagar.PlexAPI.SDK.Models.Components; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System.Collections.Generic; + + public class UserProfile + { + + /// + /// If the account has automatically select audio and subtitle tracks enabled + /// + [JsonProperty("autoSelectAudio")] + public bool? AutoSelectAudio { get; set; } = true; + + /// + /// The preferred audio language for the account + /// + [JsonProperty("defaultAudioLanguage", NullValueHandling = NullValueHandling.Include)] + public string? DefaultAudioLanguage { get; set; } + + [JsonProperty("defaultAudioAccessibility")] + public DefaultAudioAccessibility? DefaultAudioAccessibility { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.DefaultAudioAccessibility.PreferNonAccessibility; + + /// + /// The preferred audio languages for the account + /// + [JsonProperty("defaultAudioLanguages")] + public List? DefaultAudioLanguages { get; set; } = null; + + /// + /// The preferred subtitle language for the account + /// + [JsonProperty("defaultSubtitleLanguage", NullValueHandling = NullValueHandling.Include)] + public string? DefaultSubtitleLanguage { get; set; } + + /// + /// The preferred subtitle languages for the account + /// + [JsonProperty("defaultSubtitleLanguages")] + public List? DefaultSubtitleLanguages { get; set; } = null; + + [JsonProperty("autoSelectSubtitle")] + public AutoSelectSubtitle? AutoSelectSubtitle { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.AutoSelectSubtitle.ManuallySelected; + + [JsonProperty("defaultSubtitleAccessibility")] + public DefaultSubtitleAccessibility? DefaultSubtitleAccessibility { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.DefaultSubtitleAccessibility.PreferNonSdh; + + [JsonProperty("defaultSubtitleForced")] + public DefaultSubtitleForced? DefaultSubtitleForced { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.DefaultSubtitleForced.PreferNonForced; + + [JsonProperty("watchedIndicator")] + public WatchedIndicator? WatchedIndicator { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.WatchedIndicator.None; + + [JsonProperty("mediaReviewsVisibility")] + public MediaReviewsVisibility? MediaReviewsVisibility { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.MediaReviewsVisibility.NoOne; + + /// + /// The languages for media reviews visibility + /// + [JsonProperty("mediaReviewsLanguages")] + public List? MediaReviewsLanguages { get; set; } = null; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Components/WatchedIndicator.cs b/LukeHagar/PlexAPI/SDK/Models/Components/WatchedIndicator.cs new file mode 100644 index 0000000..03885c0 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Components/WatchedIndicator.cs @@ -0,0 +1,25 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Components +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// Whether or not media watched indicators are enabled (little orange dot on media) + /// + public enum WatchedIndicator + { + None = 0, + MoviesAndTvShows = 1, + Movies = 2, + TvShows = 3, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Errors/Errors.cs b/LukeHagar/PlexAPI/SDK/Models/Errors/Errors.cs new file mode 100644 index 0000000..420cda7 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Errors/Errors.cs @@ -0,0 +1,27 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Errors +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class Errors + { + + [JsonProperty("code")] + public int? Code { get; set; } + + [JsonProperty("message")] + public string? Message { get; set; } + + [JsonProperty("status")] + public int? Status { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Errors/GetServerResourcesErrors.cs b/LukeHagar/PlexAPI/SDK/Models/Errors/GetServerResourcesErrors.cs new file mode 100644 index 0000000..30c5384 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Errors/GetServerResourcesErrors.cs @@ -0,0 +1,27 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Errors +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class GetServerResourcesErrors + { + + [JsonProperty("code")] + public int? Code { get; set; } + + [JsonProperty("message")] + public string? Message { get; set; } + + [JsonProperty("status")] + public int? Status { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Errors/GetServerResourcesUnauthorized.cs b/LukeHagar/PlexAPI/SDK/Models/Errors/GetServerResourcesUnauthorized.cs new file mode 100644 index 0000000..048cd1a --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Errors/GetServerResourcesUnauthorized.cs @@ -0,0 +1,58 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Errors +{ + using LukeHagar.PlexAPI.SDK.Models.Errors; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + using System.Collections.Generic; + using System.Net.Http; + + public class GetServerResourcesUnauthorizedPayload + { + [JsonProperty("errors")] + public List? Errors { get; set; } + + /// + /// Raw HTTP response; suitable for custom response parsing + /// + [JsonProperty("-")] + public HttpResponseMessage? RawResponse { get; set; } + } + + /// + /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + /// + public class GetServerResourcesUnauthorized : PlexAPIError + { + /// + /// The original data that was passed to this exception. + /// + public GetServerResourcesUnauthorizedPayload Payload { get; } + + [Obsolete("This field will be removed in a future release, please migrate away from it as soon as possible. Use GetServerResourcesUnauthorized.Payload.Errors instead.")] + public List? Errors { get; set; } + + public GetServerResourcesUnauthorized( + GetServerResourcesUnauthorizedPayload payload, + HttpResponseMessage rawResponse, + string body + ): base("API error occurred", rawResponse, body) + { + Payload = payload; + + #pragma warning disable CS0618 + Errors = payload.Errors; + #pragma warning restore CS0618 + } + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Errors/GetTokenDetailsBadRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Errors/GetTokenDetailsBadRequest.cs new file mode 100644 index 0000000..6bd0c82 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Errors/GetTokenDetailsBadRequest.cs @@ -0,0 +1,58 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Errors +{ + using LukeHagar.PlexAPI.SDK.Models.Errors; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + using System.Collections.Generic; + using System.Net.Http; + + public class GetTokenDetailsBadRequestPayload + { + [JsonProperty("errors")] + public List? Errors { get; set; } + + /// + /// Raw HTTP response; suitable for custom response parsing + /// + [JsonProperty("-")] + public HttpResponseMessage? RawResponse { get; set; } + } + + /// + /// Bad Request - A parameter was not specified, or was specified incorrectly. + /// + public class GetTokenDetailsBadRequest : PlexAPIError + { + /// + /// The original data that was passed to this exception. + /// + public GetTokenDetailsBadRequestPayload Payload { get; } + + [Obsolete("This field will be removed in a future release, please migrate away from it as soon as possible. Use GetTokenDetailsBadRequest.Payload.Errors instead.")] + public List? Errors { get; set; } + + public GetTokenDetailsBadRequest( + GetTokenDetailsBadRequestPayload payload, + HttpResponseMessage rawResponse, + string body + ): base("API error occurred", rawResponse, body) + { + Payload = payload; + + #pragma warning disable CS0618 + Errors = payload.Errors; + #pragma warning restore CS0618 + } + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Errors/GetTokenDetailsErrors.cs b/LukeHagar/PlexAPI/SDK/Models/Errors/GetTokenDetailsErrors.cs new file mode 100644 index 0000000..c8bbe23 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Errors/GetTokenDetailsErrors.cs @@ -0,0 +1,27 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Errors +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class GetTokenDetailsErrors + { + + [JsonProperty("code")] + public int? Code { get; set; } + + [JsonProperty("message")] + public string? Message { get; set; } + + [JsonProperty("status")] + public int? Status { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Errors/GetTokenDetailsUnauthorized.cs b/LukeHagar/PlexAPI/SDK/Models/Errors/GetTokenDetailsUnauthorized.cs new file mode 100644 index 0000000..40ffebf --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Errors/GetTokenDetailsUnauthorized.cs @@ -0,0 +1,58 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Errors +{ + using LukeHagar.PlexAPI.SDK.Models.Errors; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + using System.Collections.Generic; + using System.Net.Http; + + public class GetTokenDetailsUnauthorizedPayload + { + [JsonProperty("errors")] + public List? Errors { get; set; } + + /// + /// Raw HTTP response; suitable for custom response parsing + /// + [JsonProperty("-")] + public HttpResponseMessage? RawResponse { get; set; } + } + + /// + /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + /// + public class GetTokenDetailsUnauthorized : PlexAPIError + { + /// + /// The original data that was passed to this exception. + /// + public GetTokenDetailsUnauthorizedPayload Payload { get; } + + [Obsolete("This field will be removed in a future release, please migrate away from it as soon as possible. Use GetTokenDetailsUnauthorized.Payload.Errors instead.")] + public List? Errors { get; set; } + + public GetTokenDetailsUnauthorized( + GetTokenDetailsUnauthorizedPayload payload, + HttpResponseMessage rawResponse, + string body + ): base("API error occurred", rawResponse, body) + { + Payload = payload; + + #pragma warning disable CS0618 + Errors = payload.Errors; + #pragma warning restore CS0618 + } + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Errors/GetUsersBadRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Errors/GetUsersBadRequest.cs new file mode 100644 index 0000000..78e786f --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Errors/GetUsersBadRequest.cs @@ -0,0 +1,58 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Errors +{ + using LukeHagar.PlexAPI.SDK.Models.Errors; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + using System.Collections.Generic; + using System.Net.Http; + + public class GetUsersBadRequestPayload + { + [JsonProperty("errors")] + public List? Errors { get; set; } + + /// + /// Raw HTTP response; suitable for custom response parsing + /// + [JsonProperty("-")] + public HttpResponseMessage? RawResponse { get; set; } + } + + /// + /// Bad Request - A parameter was not specified, or was specified incorrectly. + /// + public class GetUsersBadRequest : PlexAPIError + { + /// + /// The original data that was passed to this exception. + /// + public GetUsersBadRequestPayload Payload { get; } + + [Obsolete("This field will be removed in a future release, please migrate away from it as soon as possible. Use GetUsersBadRequest.Payload.Errors instead.")] + public List? Errors { get; set; } + + public GetUsersBadRequest( + GetUsersBadRequestPayload payload, + HttpResponseMessage rawResponse, + string body + ): base("API error occurred", rawResponse, body) + { + Payload = payload; + + #pragma warning disable CS0618 + Errors = payload.Errors; + #pragma warning restore CS0618 + } + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Errors/GetUsersErrors.cs b/LukeHagar/PlexAPI/SDK/Models/Errors/GetUsersErrors.cs new file mode 100644 index 0000000..478115e --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Errors/GetUsersErrors.cs @@ -0,0 +1,27 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Errors +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class GetUsersErrors + { + + [JsonProperty("code")] + public int? Code { get; set; } + + [JsonProperty("message")] + public string? Message { get; set; } + + [JsonProperty("status")] + public int? Status { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Errors/GetUsersUnauthorized.cs b/LukeHagar/PlexAPI/SDK/Models/Errors/GetUsersUnauthorized.cs new file mode 100644 index 0000000..51280d9 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Errors/GetUsersUnauthorized.cs @@ -0,0 +1,58 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Errors +{ + using LukeHagar.PlexAPI.SDK.Models.Errors; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + using System.Collections.Generic; + using System.Net.Http; + + public class GetUsersUnauthorizedPayload + { + [JsonProperty("errors")] + public List? Errors { get; set; } + + /// + /// Raw HTTP response; suitable for custom response parsing + /// + [JsonProperty("-")] + public HttpResponseMessage? RawResponse { get; set; } + } + + /// + /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + /// + public class GetUsersUnauthorized : PlexAPIError + { + /// + /// The original data that was passed to this exception. + /// + public GetUsersUnauthorizedPayload Payload { get; } + + [Obsolete("This field will be removed in a future release, please migrate away from it as soon as possible. Use GetUsersUnauthorized.Payload.Errors instead.")] + public List? Errors { get; set; } + + public GetUsersUnauthorized( + GetUsersUnauthorizedPayload payload, + HttpResponseMessage rawResponse, + string body + ): base("API error occurred", rawResponse, body) + { + Payload = payload; + + #pragma warning disable CS0618 + Errors = payload.Errors; + #pragma warning restore CS0618 + } + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Errors/GetUsersUsersErrors.cs b/LukeHagar/PlexAPI/SDK/Models/Errors/GetUsersUsersErrors.cs new file mode 100644 index 0000000..de207cd --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Errors/GetUsersUsersErrors.cs @@ -0,0 +1,27 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Errors +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class GetUsersUsersErrors + { + + [JsonProperty("code")] + public int? Code { get; set; } + + [JsonProperty("message")] + public string? Message { get; set; } + + [JsonProperty("status")] + public int? Status { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Errors/PostUsersSignInDataAuthenticationErrors.cs b/LukeHagar/PlexAPI/SDK/Models/Errors/PostUsersSignInDataAuthenticationErrors.cs new file mode 100644 index 0000000..a01dc60 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Errors/PostUsersSignInDataAuthenticationErrors.cs @@ -0,0 +1,27 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Errors +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class PostUsersSignInDataAuthenticationErrors + { + + [JsonProperty("code")] + public int? Code { get; set; } + + [JsonProperty("message")] + public string? Message { get; set; } + + [JsonProperty("status")] + public int? Status { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Errors/PostUsersSignInDataBadRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Errors/PostUsersSignInDataBadRequest.cs new file mode 100644 index 0000000..8c68811 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Errors/PostUsersSignInDataBadRequest.cs @@ -0,0 +1,58 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Errors +{ + using LukeHagar.PlexAPI.SDK.Models.Errors; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + using System.Collections.Generic; + using System.Net.Http; + + public class PostUsersSignInDataBadRequestPayload + { + [JsonProperty("errors")] + public List? Errors { get; set; } + + /// + /// Raw HTTP response; suitable for custom response parsing + /// + [JsonProperty("-")] + public HttpResponseMessage? RawResponse { get; set; } + } + + /// + /// Bad Request - A parameter was not specified, or was specified incorrectly. + /// + public class PostUsersSignInDataBadRequest : PlexAPIError + { + /// + /// The original data that was passed to this exception. + /// + public PostUsersSignInDataBadRequestPayload Payload { get; } + + [Obsolete("This field will be removed in a future release, please migrate away from it as soon as possible. Use PostUsersSignInDataBadRequest.Payload.Errors instead.")] + public List? Errors { get; set; } + + public PostUsersSignInDataBadRequest( + PostUsersSignInDataBadRequestPayload payload, + HttpResponseMessage rawResponse, + string body + ): base("API error occurred", rawResponse, body) + { + Payload = payload; + + #pragma warning disable CS0618 + Errors = payload.Errors; + #pragma warning restore CS0618 + } + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Errors/PostUsersSignInDataErrors.cs b/LukeHagar/PlexAPI/SDK/Models/Errors/PostUsersSignInDataErrors.cs new file mode 100644 index 0000000..bd23aa8 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Errors/PostUsersSignInDataErrors.cs @@ -0,0 +1,27 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Errors +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class PostUsersSignInDataErrors + { + + [JsonProperty("code")] + public int? Code { get; set; } + + [JsonProperty("message")] + public string? Message { get; set; } + + [JsonProperty("status")] + public int? Status { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Errors/PostUsersSignInDataUnauthorized.cs b/LukeHagar/PlexAPI/SDK/Models/Errors/PostUsersSignInDataUnauthorized.cs new file mode 100644 index 0000000..3936706 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Errors/PostUsersSignInDataUnauthorized.cs @@ -0,0 +1,58 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Errors +{ + using LukeHagar.PlexAPI.SDK.Models.Errors; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + using System.Collections.Generic; + using System.Net.Http; + + public class PostUsersSignInDataUnauthorizedPayload + { + [JsonProperty("errors")] + public List? Errors { get; set; } + + /// + /// Raw HTTP response; suitable for custom response parsing + /// + [JsonProperty("-")] + public HttpResponseMessage? RawResponse { get; set; } + } + + /// + /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + /// + public class PostUsersSignInDataUnauthorized : PlexAPIError + { + /// + /// The original data that was passed to this exception. + /// + public PostUsersSignInDataUnauthorizedPayload Payload { get; } + + [Obsolete("This field will be removed in a future release, please migrate away from it as soon as possible. Use PostUsersSignInDataUnauthorized.Payload.Errors instead.")] + public List? Errors { get; set; } + + public PostUsersSignInDataUnauthorized( + PostUsersSignInDataUnauthorizedPayload payload, + HttpResponseMessage rawResponse, + string body + ): base("API error occurred", rawResponse, body) + { + Payload = payload; + + #pragma warning disable CS0618 + Errors = payload.Errors; + #pragma warning restore CS0618 + } + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/AddDownloadQueueItemsRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/AddDownloadQueueItemsRequest.cs index 4693656..825c6d8 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/AddDownloadQueueItemsRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/AddDownloadQueueItemsRequest.cs @@ -120,43 +120,43 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Indicates the client supports ABR. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=autoAdjustQuality")] - public BoolInt? AutoAdjustQuality { get; set; } + public BoolInt? AutoAdjustQuality { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Indicates if the server should adjust subtitles based on Voice Activity Data. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=autoAdjustSubtitle")] - public BoolInt? AutoAdjustSubtitle { get; set; } + public BoolInt? AutoAdjustSubtitle { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Indicates the client supports direct playing the indicated content. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=directPlay")] - public BoolInt? DirectPlay { get; set; } + public BoolInt? DirectPlay { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Indicates the client supports direct streaming the video of the indicated content. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=directStream")] - public BoolInt? DirectStream { get; set; } + public BoolInt? DirectStream { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Indicates the client supports direct streaming the audio of the indicated content. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=directStreamAudio")] - public BoolInt? DirectStreamAudio { get; set; } + public BoolInt? DirectStreamAudio { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Indicates if resolution should be adjusted for orientation. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=disableResolutionRotation")] - public BoolInt? DisableResolutionRotation { get; set; } + public BoolInt? DisableResolutionRotation { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Ignore client profiles when determining if direct play is possible. Only has an effect when directPlay=1 and both mediaIndex and partIndex are specified and neither are -1 /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=hasMDE")] - public BoolInt? HasMDE { get; set; } + public BoolInt? HasMDE { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Network type of the client, can be used to help determine target bitrate. diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/AddSectionRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/AddSectionRequest.cs index c5ae1df..e141600 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/AddSectionRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/AddSectionRequest.cs @@ -135,12 +135,12 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// If set, paths are relative to `Media Upload` path /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=relative")] - public BoolInt? Relative { get; set; } + public BoolInt? Relative { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// If set, import media from iTunes. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=importFromiTunes")] - public BoolInt? ImportFromiTunes { get; set; } + public BoolInt? ImportFromiTunes { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/AddSubtitlesRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/AddSubtitlesRequest.cs index 02ccb40..71e3b32 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/AddSubtitlesRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/AddSubtitlesRequest.cs @@ -103,9 +103,9 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public string? Format { get; set; } [SpeakeasyMetadata("queryParam:style=form,explode=true,name=forced")] - public BoolInt? Forced { get; set; } + public BoolInt? Forced { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; [SpeakeasyMetadata("queryParam:style=form,explode=true,name=hearingImpaired")] - public BoolInt? HearingImpaired { get; set; } + public BoolInt? HearingImpaired { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/AddToPlayQueueRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/AddToPlayQueueRequest.cs index 14ba8f5..2de23cf 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/AddToPlayQueueRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/AddToPlayQueueRequest.cs @@ -103,6 +103,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Play this item next (defaults to 0 - queueing at the end of manually queued items). /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=next")] - public BoolInt? Next { get; set; } + public BoolInt? Next { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/AllLibraries.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/AllLibraries.cs new file mode 100644 index 0000000..18fe783 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/AllLibraries.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// Indicates if the user has access to all libraries. + /// + public enum AllLibraries + { + Disable = 0, + Enable = 1, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/AllowCameraUpload.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/AllowCameraUpload.cs new file mode 100644 index 0000000..0731c82 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/AllowCameraUpload.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// Indicates if the user is allowed to upload from a camera. + /// + public enum AllowCameraUpload + { + Disable = 0, + Enable = 1, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/AllowChannels.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/AllowChannels.cs new file mode 100644 index 0000000..3f0ac59 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/AllowChannels.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// Indicates if the user has access to channels. + /// + public enum AllowChannels + { + Disable = 0, + Enable = 1, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/AllowSubtitleAdmin.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/AllowSubtitleAdmin.cs new file mode 100644 index 0000000..ee3c00e --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/AllowSubtitleAdmin.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// Indicates if the user can manage subtitles. + /// + public enum AllowSubtitleAdmin + { + Disable = 0, + Enable = 1, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/AllowSync.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/AllowSync.cs new file mode 100644 index 0000000..b30166f --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/AllowSync.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// Indicates if the user is allowed to sync media. + /// + public enum AllowSync + { + Disable = 0, + Enable = 1, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/AllowTuners.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/AllowTuners.cs new file mode 100644 index 0000000..49a1a9d --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/AllowTuners.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// Indicates if the user is allowed to use tuners. + /// + public enum AllowTuners + { + Disable = 0, + Enable = 1, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/ApplyUpdatesRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/ApplyUpdatesRequest.cs index cc4bd0f..173d5d0 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/ApplyUpdatesRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/ApplyUpdatesRequest.cs @@ -85,12 +85,12 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Indicate that you want the update to run during the next Butler execution. Omitting this or setting it to false indicates that the update should install immediately. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=tonight")] - public BoolInt? Tonight { get; set; } + public BoolInt? Tonight { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Indicate that the latest version should be marked as skipped. The <Release> entry for this version will have the `state` set to `skipped`. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=skip")] - public BoolInt? Skip { get; set; } + public BoolInt? Skip { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/AutocompleteRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/AutocompleteRequest.cs index bad35a6..ae9c081 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/AutocompleteRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/AutocompleteRequest.cs @@ -100,7 +100,26 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public string? FieldQuery { get; set; } /// - /// This is a complex query built of several parameters. See API Info section for information on building media queries + /// A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic.
+ /// + /// + ///
+ /// The query supports:
+ /// - Fields: integer, boolean, tag, string, date, language
+ /// - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type)
+ /// - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR)
+ /// - Sorting: sort parameter with :desc, :nullsLast modifiers
+ /// - Grouping: group parameter
+ /// - Limits: limit parameter
+ ///
+ /// Examples:
+ /// - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24`
+ /// - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24"
+ /// - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10
+ ///
+ /// See API Info section for detailed information on building media queries.
+ /// + ///
///
[SpeakeasyMetadata("queryParam:style=form,explode=true,name=mediaQuery")] public MediaQuery? MediaQuery { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/Billing.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/Billing.cs new file mode 100644 index 0000000..65d9745 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/Billing.cs @@ -0,0 +1,25 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class Billing + { + + [JsonProperty("internalPaymentMethod")] + public InternalPaymentMethod InternalPaymentMethod { get; set; } = default!; + + [JsonProperty("paymentMethodId", NullValueHandling = NullValueHandling.Include)] + public long? PaymentMethodId { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/ButlerTask.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/ButlerTask.cs index 74cb4e0..a92e813 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/ButlerTask.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/ButlerTask.cs @@ -11,44 +11,90 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests { using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; + using System; - public class ButlerTask + /// + /// The task name + /// + public enum ButlerTask { - - /// - /// A user-friendly description of the task - /// - [JsonProperty("description")] - public string? Description { get; set; } - - /// - /// Whether this task is enabled or not - /// - [JsonProperty("enabled")] - public bool? Enabled { get; set; } - - /// - /// The interval (in days) of when this task is run. A value of 1 is run every day, 7 is every week, etc. - /// - [JsonProperty("interval")] - public long? Interval { get; set; } - - /// - /// The name of the task - /// - [JsonProperty("name")] - public string? Name { get; set; } - - /// - /// Indicates whether the timing of the task is randomized within the butler interval - /// - [JsonProperty("scheduleRandomized")] - public bool? ScheduleRandomized { get; set; } - - /// - /// A user-friendly title of the task - /// - [JsonProperty("title")] - public string? Title { get; set; } + [JsonProperty("AutomaticUpdates")] + AutomaticUpdates, + [JsonProperty("BackupDatabase")] + BackupDatabase, + [JsonProperty("ButlerTaskGenerateAdMarkers")] + ButlerTaskGenerateAdMarkers, + [JsonProperty("ButlerTaskGenerateCreditsMarkers")] + ButlerTaskGenerateCreditsMarkers, + [JsonProperty("ButlerTaskGenerateIntroMarkers")] + ButlerTaskGenerateIntroMarkers, + [JsonProperty("ButlerTaskGenerateVoiceActivity")] + ButlerTaskGenerateVoiceActivity, + [JsonProperty("CleanOldBundles")] + CleanOldBundles, + [JsonProperty("CleanOldCacheFiles")] + CleanOldCacheFiles, + [JsonProperty("DeepMediaAnalysis")] + DeepMediaAnalysis, + [JsonProperty("GarbageCollectBlobs")] + GarbageCollectBlobs, + [JsonProperty("GarbageCollectLibraryMedia")] + GarbageCollectLibraryMedia, + [JsonProperty("GenerateBlurHashes")] + GenerateBlurHashes, + [JsonProperty("GenerateChapterThumbs")] + GenerateChapterThumbs, + [JsonProperty("GenerateMediaIndexFiles")] + GenerateMediaIndexFiles, + [JsonProperty("LoudnessAnalysis")] + LoudnessAnalysis, + [JsonProperty("MusicAnalysis")] + MusicAnalysis, + [JsonProperty("OptimizeDatabase")] + OptimizeDatabase, + [JsonProperty("RefreshEpgGuides")] + RefreshEpgGuides, + [JsonProperty("RefreshLibraries")] + RefreshLibraries, + [JsonProperty("RefreshLocalMedia")] + RefreshLocalMedia, + [JsonProperty("RefreshPeriodicMetadata")] + RefreshPeriodicMetadata, + [JsonProperty("UpgradeMediaAnalysis")] + UpgradeMediaAnalysis, } + + public static class ButlerTaskExtension + { + public static string Value(this ButlerTask value) + { + return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString(); + } + + public static ButlerTask ToEnum(this string value) + { + foreach(var field in typeof(ButlerTask).GetFields()) + { + var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false); + if (attributes.Length == 0) + { + continue; + } + + var attribute = attributes[0] as JsonPropertyAttribute; + if (attribute != null && attribute.PropertyName == value) + { + var enumVal = field.GetValue(null); + + if (enumVal is ButlerTask) + { + return (ButlerTask)enumVal; + } + } + } + + throw new Exception($"Unknown value {value} for enum ButlerTask"); + } + } + } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/ButlerTasks.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/ButlerTasks.cs index a93db2d..0f84f62 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/ButlerTasks.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/ButlerTasks.cs @@ -18,6 +18,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests { [JsonProperty("ButlerTask")] - public List? ButlerTask { get; set; } + public List? ButlerTask { get; set; } } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/CheckUpdatesRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/CheckUpdatesRequest.cs index 6e8be36..5ecd65f 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/CheckUpdatesRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/CheckUpdatesRequest.cs @@ -85,6 +85,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Indicate that you want to start download any updates found. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=download")] - public BoolInt? Download { get; set; } + public BoolInt? Download { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/CreateCollectionRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/CreateCollectionRequest.cs index c4592cc..8d5577e 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/CreateCollectionRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/CreateCollectionRequest.cs @@ -106,9 +106,25 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public string? Uri { get; set; } /// - /// The metadata type to filter by + /// The type of media to retrieve or filter by.
+ /// + /// + ///
+ /// 1 = movie
+ /// 2 = show
+ /// 3 = season
+ /// 4 = episode
+ /// 5 = artist
+ /// 6 = album
+ /// 7 = track
+ /// 8 = photo_album
+ /// 9 = photo
+ ///
+ /// E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries
+ /// + ///
///
[SpeakeasyMetadata("queryParam:style=form,explode=true,name=type")] - public long? Type { get; set; } + public MediaType? Type { get; set; } } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/CreateCustomHubRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/CreateCustomHubRequest.cs index ed68b52..75f9882 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/CreateCustomHubRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/CreateCustomHubRequest.cs @@ -97,18 +97,18 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Whether this hub should be displayed in recommended /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=promotedToRecommended")] - public BoolInt? PromotedToRecommended { get; set; } + public BoolInt? PromotedToRecommended { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Whether this hub should be displayed in admin's home /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=promotedToOwnHome")] - public BoolInt? PromotedToOwnHome { get; set; } + public BoolInt? PromotedToOwnHome { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Whether this hub should be displayed in shared user's home /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=promotedToSharedHome")] - public BoolInt? PromotedToSharedHome { get; set; } + public BoolInt? PromotedToSharedHome { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/CreateDownloadQueueStatus.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/CreateDownloadQueueStatus.cs new file mode 100644 index 0000000..26b4320 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/CreateDownloadQueueStatus.cs @@ -0,0 +1,75 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + + /// + /// The state of this queue
+ /// + /// + /// - deciding: At least one item is still being decided
+ /// - waiting: At least one item is waiting for transcode and none are currently transcoding
+ /// - processing: At least one item is being transcoded
+ /// - done: All items are available (or potentially expired)
+ /// - error: At least one item has encountered an error
+ /// + ///
+ ///
+ public enum CreateDownloadQueueStatus + { + [JsonProperty("deciding")] + Deciding, + [JsonProperty("waiting")] + Waiting, + [JsonProperty("processing")] + Processing, + [JsonProperty("done")] + Done, + [JsonProperty("error")] + Error, + } + + public static class CreateDownloadQueueStatusExtension + { + public static string Value(this CreateDownloadQueueStatus value) + { + return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString(); + } + + public static CreateDownloadQueueStatus ToEnum(this string value) + { + foreach(var field in typeof(CreateDownloadQueueStatus).GetFields()) + { + var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false); + if (attributes.Length == 0) + { + continue; + } + + var attribute = attributes[0] as JsonPropertyAttribute; + if (attribute != null && attribute.PropertyName == value) + { + var enumVal = field.GetValue(null); + + if (enumVal is CreateDownloadQueueStatus) + { + return (CreateDownloadQueueStatus)enumVal; + } + } + } + + throw new Exception($"Unknown value {value} for enum CreateDownloadQueueStatus"); + } + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/CreatePlayQueueRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/CreatePlayQueueRequest.cs index 66d4484..25cd701 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/CreatePlayQueueRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/CreatePlayQueueRequest.cs @@ -110,19 +110,19 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Whether to shuffle the playlist, defaults to 0. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=shuffle")] - public BoolInt? Shuffle { get; set; } + public BoolInt? Shuffle { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// If the PQ is bigger than the window, fill any empty space with wraparound items, defaults to 0. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=repeat")] - public BoolInt? Repeat { get; set; } + public BoolInt? Repeat { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Whether to create a continuous play queue (e.g. from an episode), defaults to 0. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=continuous")] - public BoolInt? Continuous { get; set; } + public BoolInt? Continuous { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Number of trailers to prepend a movie with not including the pre-roll. If omitted the pre-roll will not be returned in the play queue. When resuming a movie `extrasPrefixCount` should be omitted as a parameter instead of passing 0. @@ -134,12 +134,12 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Only applies to queues of type photo, whether to retrieve all descendent photos from an album or section, defaults to 1. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=recursive")] - public BoolInt? Recursive { get; set; } + public BoolInt? Recursive { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Only applies to queues of type show or seasons, whether to return a queue that is started on the On Deck episode if one exists. Otherwise begins the play queue on the beginning of the show or season. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=onDeck")] - public BoolInt? OnDeck { get; set; } + public BoolInt? OnDeck { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/DeleteLibrarySectionRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/DeleteLibrarySectionRequest.cs index 57f667c..d3b5cfa 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/DeleteLibrarySectionRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/DeleteLibrarySectionRequest.cs @@ -91,6 +91,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// If set, response will return an activity with the actual deletion process. Otherwise request will return when deletion is complete /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=async")] - public BoolInt? Async { get; set; } + public BoolInt? Async { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/DeleteMediaItemRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/DeleteMediaItemRequest.cs index 476e2af..a640d04 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/DeleteMediaItemRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/DeleteMediaItemRequest.cs @@ -91,6 +91,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Whether proxy items, such as media optimized versions, should also be deleted. Defaults to false. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=proxy")] - public BoolInt? Proxy { get; set; } + public BoolInt? Proxy { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/DeleteMetadataItemRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/DeleteMetadataItemRequest.cs index 6026f5a..df74a99 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/DeleteMetadataItemRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/DeleteMetadataItemRequest.cs @@ -88,6 +88,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Whether proxy items, such as media optimized versions, should also be deleted. Defaults to false. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=proxy")] - public BoolInt? Proxy { get; set; } + public BoolInt? Proxy { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/DetectCreditsRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/DetectCreditsRequest.cs index 75582e5..fe70acf 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/DetectCreditsRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/DetectCreditsRequest.cs @@ -85,9 +85,9 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public string Ids { get; set; } = default!; [SpeakeasyMetadata("queryParam:style=form,explode=true,name=force")] - public BoolInt? Force { get; set; } + public BoolInt? Force { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; [SpeakeasyMetadata("queryParam:style=form,explode=true,name=manual")] - public BoolInt? Manual { get; set; } + public BoolInt? Manual { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/DetectIntrosRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/DetectIntrosRequest.cs index a5e4724..9f901ff 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/DetectIntrosRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/DetectIntrosRequest.cs @@ -88,7 +88,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Indicate whether detection should be re-run /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=force")] - public BoolInt? Force { get; set; } + public BoolInt? Force { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// The threshold for determining if content is an intro or not diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/DetectVoiceActivityRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/DetectVoiceActivityRequest.cs index ff94973..d923dd5 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/DetectVoiceActivityRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/DetectVoiceActivityRequest.cs @@ -88,12 +88,12 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Indicate whether detection should be re-run /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=force")] - public BoolInt? Force { get; set; } + public BoolInt? Force { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Indicate whether detection is manually run /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=manual")] - public BoolInt? Manual { get; set; } + public BoolInt? Manual { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/DownloadQueue.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/DownloadQueue.cs index b59dff1..153b39f 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/DownloadQueue.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/DownloadQueue.cs @@ -35,6 +35,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// /// [JsonProperty("status")] - public Models.Requests.Status? Status { get; set; } + public CreateDownloadQueueStatus? Status { get; set; } } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GenerateThumbsRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GenerateThumbsRequest.cs index 6dfecce..67b8447 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GenerateThumbsRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GenerateThumbsRequest.cs @@ -85,6 +85,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public string Ids { get; set; } = default!; [SpeakeasyMetadata("queryParam:style=form,explode=true,name=force")] - public BoolInt? Force { get; set; } + public BoolInt? Force { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllHubsRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllHubsRequest.cs index dc5916b..60b0bc2 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllHubsRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllHubsRequest.cs @@ -92,7 +92,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Only return hubs which are "transient", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added) /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=onlyTransient")] - public BoolInt? OnlyTransient { get; set; } + public BoolInt? OnlyTransient { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// If provided, limit to only specified hubs diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllSubscriptionsRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllSubscriptionsRequest.cs index 7bdc261..68fd433 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllSubscriptionsRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllSubscriptionsRequest.cs @@ -85,12 +85,12 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Indicates whether the active grabs should be included as well /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeGrabs")] - public BoolInt? IncludeGrabs { get; set; } + public BoolInt? IncludeGrabs { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Compute the storage of recorded items desired by this subscription /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeStorage")] - public BoolInt? IncludeStorage { get; set; } + public BoolInt? IncludeStorage { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAugmentationStatusRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAugmentationStatusRequest.cs index bcd6724..068f829 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAugmentationStatusRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAugmentationStatusRequest.cs @@ -91,6 +91,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Wait for augmentation completion before returning /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=wait")] - public BoolInt? Wait { get; set; } + public BoolInt? Wait { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetCollectionsRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetCollectionsRequest.cs index d101eb0..5dfd798 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetCollectionsRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetCollectionsRequest.cs @@ -88,7 +88,26 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public long SectionId { get; set; } = default!; /// - /// This is a complex query built of several parameters. See API Info section for information on building media queries + /// A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic.
+ /// + /// + ///
+ /// The query supports:
+ /// - Fields: integer, boolean, tag, string, date, language
+ /// - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type)
+ /// - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR)
+ /// - Sorting: sort parameter with :desc, :nullsLast modifiers
+ /// - Grouping: group parameter
+ /// - Limits: limit parameter
+ ///
+ /// Examples:
+ /// - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24`
+ /// - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24"
+ /// - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10
+ ///
+ /// See API Info section for detailed information on building media queries.
+ /// + ///
///
[SpeakeasyMetadata("queryParam:style=form,explode=true,name=mediaQuery")] public MediaQuery? MediaQuery { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetCommonRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetCommonRequest.cs index 8eeb804..5c9e7d6 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetCommonRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetCommonRequest.cs @@ -94,7 +94,26 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public long? Type { get; set; } /// - /// This is a complex query built of several parameters. See API Info section for information on building media queries + /// A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic.
+ /// + /// + ///
+ /// The query supports:
+ /// - Fields: integer, boolean, tag, string, date, language
+ /// - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type)
+ /// - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR)
+ /// - Sorting: sort parameter with :desc, :nullsLast modifiers
+ /// - Grouping: group parameter
+ /// - Limits: limit parameter
+ ///
+ /// Examples:
+ /// - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24`
+ /// - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24"
+ /// - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10
+ ///
+ /// See API Info section for detailed information on building media queries.
+ /// + ///
///
[SpeakeasyMetadata("queryParam:style=form,explode=true,name=mediaQuery")] public MediaQuery? MediaQuery { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetFirstCharactersRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetFirstCharactersRequest.cs index 34e3072..26d9b07 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetFirstCharactersRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetFirstCharactersRequest.cs @@ -100,7 +100,26 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public long? Sort { get; set; } /// - /// This is a complex query built of several parameters. See API Info section for information on building media queries + /// A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic.
+ /// + /// + ///
+ /// The query supports:
+ /// - Fields: integer, boolean, tag, string, date, language
+ /// - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type)
+ /// - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR)
+ /// - Sorting: sort parameter with :desc, :nullsLast modifiers
+ /// - Grouping: group parameter
+ /// - Limits: limit parameter
+ ///
+ /// Examples:
+ /// - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24`
+ /// - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24"
+ /// - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10
+ ///
+ /// See API Info section for detailed information on building media queries.
+ /// + ///
///
[SpeakeasyMetadata("queryParam:style=form,explode=true,name=mediaQuery")] public MediaQuery? MediaQuery { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetImageRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetImageRequest.cs index 0f7a017..d58a308 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetImageRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetImageRequest.cs @@ -121,6 +121,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Whether to add noise to the ouput image. Noise can reduce color banding with the gradients. Image sizes with noise will be larger. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=noise")] - public BoolInt? Noise { get; set; } + public BoolInt? Noise { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryDetailsRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryDetailsRequest.cs index 1b1916b..e76ca9e 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryDetailsRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryDetailsRequest.cs @@ -91,6 +91,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Whether or not to include details for a section (types, filters, and sorts). Only exists for backwards compatibility, media providers other than the server libraries have it on always. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeDetails")] - public BoolInt? IncludeDetails { get; set; } + public BoolInt? IncludeDetails { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsRequest.cs index 86c5557..6fdc592 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsRequest.cs @@ -82,7 +82,26 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public string? Marketplace { get; set; } /// - /// This is a complex query built of several parameters. See API Info section for information on building media queries + /// A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic.
+ /// + /// + ///
+ /// The query supports:
+ /// - Fields: integer, boolean, tag, string, date, language
+ /// - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type)
+ /// - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR)
+ /// - Sorting: sort parameter with :desc, :nullsLast modifiers
+ /// - Grouping: group parameter
+ /// - Limits: limit parameter
+ ///
+ /// Examples:
+ /// - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24`
+ /// - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24"
+ /// - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10
+ ///
+ /// See API Info section for detailed information on building media queries.
+ /// + ///
///
[SpeakeasyMetadata("queryParam:style=form,explode=true,name=mediaQuery")] public MediaQuery? MediaQuery { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryMatchesRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryMatchesRequest.cs index b5c4b09..8a1c69e 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryMatchesRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryMatchesRequest.cs @@ -82,19 +82,35 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public string? Marketplace { get; set; } /// - /// The metadata type to filter by + /// The type of media to retrieve or filter by.
+ /// + /// + ///
+ /// 1 = movie
+ /// 2 = show
+ /// 3 = season
+ /// 4 = episode
+ /// 5 = artist
+ /// 6 = album
+ /// 7 = track
+ /// 8 = photo_album
+ /// 9 = photo
+ ///
+ /// E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries
+ /// + ///
///
[SpeakeasyMetadata("queryParam:style=form,explode=true,name=type")] - public long? Type { get; set; } + public MediaType? Type { get; set; } [SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeFullMetadata")] - public BoolInt? IncludeFullMetadata { get; set; } + public BoolInt? IncludeFullMetadata { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; [SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeAncestorMetadata")] - public BoolInt? IncludeAncestorMetadata { get; set; } + public BoolInt? IncludeAncestorMetadata { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; [SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeAlternateMetadataSources")] - public BoolInt? IncludeAlternateMetadataSources { get; set; } + public BoolInt? IncludeAlternateMetadataSources { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Used for movies, shows, artists, albums, and tracks. Allowed for various URI schemes, to be defined. diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaPartRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaPartRequest.cs index 99098b4..64da22b 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaPartRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaPartRequest.cs @@ -103,6 +103,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Whether this is a file download /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=download")] - public BoolInt? Download { get; set; } + public BoolInt? Download { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMetadataHubsRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMetadataHubsRequest.cs index 9b80bca..04d05f6 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMetadataHubsRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMetadataHubsRequest.cs @@ -97,6 +97,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Only return hubs which are "transient", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added) /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=onlyTransient")] - public BoolInt? OnlyTransient { get; set; } + public BoolInt? OnlyTransient { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMetadataItemRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMetadataItemRequest.cs index e053b8d..9eaf00d 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMetadataItemRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMetadataItemRequest.cs @@ -89,48 +89,48 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Determines if file check should be performed asynchronously. An activity is created to indicate progress. Default is false. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=asyncCheckFiles")] - public BoolInt? AsyncCheckFiles { get; set; } + public BoolInt? AsyncCheckFiles { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Determines if local media agent refresh should be performed asynchronously. An activity is created to indicate progress. Default is false. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=asyncRefreshLocalMediaAgent")] - public BoolInt? AsyncRefreshLocalMediaAgent { get; set; } + public BoolInt? AsyncRefreshLocalMediaAgent { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Determines if analysis refresh should be performed asynchronously. An activity is created to indicate progress. Default is false. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=asyncRefreshAnalysis")] - public BoolInt? AsyncRefreshAnalysis { get; set; } + public BoolInt? AsyncRefreshAnalysis { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Determines if file check should be performed synchronously. Specifying `asyncCheckFiles` will cause this option to be ignored. Default is false. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=checkFiles")] - public BoolInt? CheckFiles { get; set; } + public BoolInt? CheckFiles { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Determines if synchronous local media agent and analysis refresh should be skipped. Specifying async versions will cause synchronous versions to be skipped. Default is false. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=skipRefresh")] - public BoolInt? SkipRefresh { get; set; } + public BoolInt? SkipRefresh { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Determines if file existence check should be performed synchronously. Specifying `checkFiles` will imply this option. Default is false. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=checkFileAvailability")] - public BoolInt? CheckFileAvailability { get; set; } + public BoolInt? CheckFileAvailability { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Add metadata augmentations. An activity is created to indicate progress. Option will be ignored if specified by non-admin or if multiple metadata items are requested. Default is false. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=asyncAugmentMetadata")] - public BoolInt? AsyncAugmentMetadata { get; set; } + public BoolInt? AsyncAugmentMetadata { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Number of augmentations to add. Requires `asyncAugmentMetadata` to be specified. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=augmentCount")] - public BoolInt? AugmentCount { get; set; } + public BoolInt? AugmentCount { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetPlayQueueRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetPlayQueueRequest.cs index 08b493d..a464b70 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetPlayQueueRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetPlayQueueRequest.cs @@ -91,7 +91,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// If the server should transfer ownership to the requesting client (used in remote control scenarios). /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=own")] - public BoolInt? Own { get; set; } + public BoolInt? Own { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// The play queue item ID for the center of the window - this doesn't change the current selected item. @@ -109,12 +109,12 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Whether to include the items before the center (if 0, center is not included either), defaults to 1. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeBefore")] - public BoolInt? IncludeBefore { get; set; } + public BoolInt? IncludeBefore { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Whether to include the items after the center (if 0, center is not included either), defaults to 1. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeAfter")] - public BoolInt? IncludeAfter { get; set; } + public BoolInt? IncludeAfter { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetPlaylistGeneratorItemsGuids.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetPlaylistGeneratorItemsGuids.cs new file mode 100644 index 0000000..ffcbc58 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetPlaylistGeneratorItemsGuids.cs @@ -0,0 +1,28 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class GetPlaylistGeneratorItemsGuids + { + + /// + /// The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb://
+ /// + /// + /// + /// + ///
+ [JsonProperty("id")] + public string Id { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetPlaylistGeneratorItemsMetadata.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetPlaylistGeneratorItemsMetadata.cs index e71d37d..cae90fc 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetPlaylistGeneratorItemsMetadata.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetPlaylistGeneratorItemsMetadata.cs @@ -13,6 +13,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using LukeHagar.PlexAPI.SDK.Models.Requests; using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; + using NodaTime; using System.Collections.Generic; /// @@ -33,43 +34,43 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// The title of the item (e.g. “300” or “The Simpsons”) /// [JsonProperty("title")] - public object? Title { get; set; } + public string Title { get; set; } = default!; /// /// The type of the video item, such as `movie`, `episode`, or `clip`. /// [JsonProperty("type")] - public object? Type { get; set; } + public string Type { get; set; } = default!; /// /// When present, contains the disc number for a track on multi-disc albums. /// [JsonProperty("absoluteIndex")] - public long? AbsoluteIndex { get; set; } + public int? AbsoluteIndex { get; set; } /// /// In units of seconds since the epoch, returns the time at which the item was added to the library. /// [JsonProperty("addedAt")] - public long? AddedAt { get; set; } + public long AddedAt { get; set; } = default!; /// /// When present, the URL for the background artwork for the item. /// [JsonProperty("art")] - public object? Art { get; set; } + public string? Art { get; set; } /// /// Some rating systems separate reviewer ratings from audience ratings /// [JsonProperty("audienceRating")] - public double? AudienceRating { get; set; } + public float? AudienceRating { get; set; } /// /// A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). /// [JsonProperty("audienceRatingImage")] - public object? AudienceRatingImage { get; set; } + public string? AudienceRatingImage { get; set; } [JsonProperty("Autotag")] public List? Autotag { get; set; } @@ -78,25 +79,31 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// When present, the URL for a banner graphic for the item. /// [JsonProperty("banner")] - public object? Banner { get; set; } + public string? Banner { get; set; } /// /// When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). /// [JsonProperty("chapterSource")] - public object? ChapterSource { get; set; } + public string? ChapterSource { get; set; } + + /// + /// The number of child items associated with this media item. + /// + [JsonProperty("childCount")] + public int? ChildCount { get; set; } /// /// When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). /// [JsonProperty("composite")] - public object? Composite { get; set; } + public string? Composite { get; set; } /// /// If known, the content rating (e.g. MPAA) for an item. /// [JsonProperty("contentRating")] - public object? ContentRating { get; set; } + public string? ContentRating { get; set; } [JsonProperty("Country")] public List? Country { get; set; } @@ -108,7 +115,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// When present, the duration for the item, in units of milliseconds. /// [JsonProperty("duration")] - public long? Duration { get; set; } + public int? Duration { get; set; } /// /// Typically only seen in metadata at a library's top level @@ -125,6 +132,12 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests [JsonProperty("grandparentArt")] public string? GrandparentArt { get; set; } + /// + /// The GUID of the grandparent media item. + /// + [JsonProperty("grandparentGuid")] + public string? GrandparentGuid { get; set; } + /// /// The `hero` of the grandparent /// @@ -161,14 +174,20 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests [JsonProperty("grandparentTitle")] public string? GrandparentTitle { get; set; } + /// + /// The globally unique identifier for the media item. + /// + [JsonProperty("guid")] + public string? Guid { get; set; } + [JsonProperty("Guid")] - public List? Guid { get; set; } + public List? Guids { get; set; } /// /// When present, the URL for a hero image for the item. /// [JsonProperty("hero")] - public object? Hero { get; set; } + public string? Hero { get; set; } [JsonProperty("Image")] public List? Image { get; set; } @@ -177,17 +196,14 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. /// [JsonProperty("index")] - public long? Index { get; set; } + public int? Index { get; set; } /// /// The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. /// [JsonProperty("key")] - public object? Key { get; set; } + public string Key { get; set; } = default!; - /// - /// When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - /// [JsonProperty("lastViewedAt")] public long? LastViewedAt { get; set; } @@ -195,7 +211,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// For shows and seasons, contains the number of total episodes. /// [JsonProperty("leafCount")] - public long? LeafCount { get; set; } + public int? LeafCount { get; set; } [JsonProperty("Media")] public List? Media { get; set; } @@ -204,13 +220,19 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. /// [JsonProperty("originallyAvailableAt")] - public object? OriginallyAvailableAt { get; set; } + public LocalDate? OriginallyAvailableAt { get; set; } /// /// When present, used to indicate an item's original title, e.g. a movie's foreign title. /// [JsonProperty("originalTitle")] - public object? OriginalTitle { get; set; } + public string? OriginalTitle { get; set; } + + /// + /// The GUID of the parent media item. + /// + [JsonProperty("parentGuid")] + public string? ParentGuid { get; set; } /// /// The `hero` of the parent @@ -222,7 +244,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// The `index` of the parent /// [JsonProperty("parentIndex")] - public long? ParentIndex { get; set; } + public int? ParentIndex { get; set; } /// /// The `key` of the parent @@ -252,7 +274,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. /// [JsonProperty("primaryExtraKey")] - public object? PrimaryExtraKey { get; set; } + public string? PrimaryExtraKey { get; set; } /// /// Prompt to give the user for this directory (such as `Search Movies`) @@ -264,7 +286,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. /// [JsonProperty("rating")] - public double? Rating { get; set; } + public float? Rating { get; set; } [JsonProperty("Rating")] public List? RatingArray { get; set; } @@ -273,19 +295,19 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Number of ratings under this metadata /// [JsonProperty("ratingCount")] - public long? RatingCount { get; set; } + public int? RatingCount { get; set; } /// /// When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. /// [JsonProperty("ratingImage")] - public object? RatingImage { get; set; } + public string? RatingImage { get; set; } /// /// This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. /// [JsonProperty("ratingKey")] - public object? RatingKey { get; set; } + public string? RatingKey { get; set; } [JsonProperty("Role")] public List? Role { get; set; } @@ -324,43 +346,43 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). /// [JsonProperty("studio")] - public object? Studio { get; set; } + public string? Studio { get; set; } /// /// The subtype of the video item, such as `photo` when the video item is in a photo library /// [JsonProperty("subtype")] - public object? Subtype { get; set; } + public string? Subtype { get; set; } /// /// When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). /// [JsonProperty("summary")] - public object? Summary { get; set; } + public string? Summary { get; set; } /// /// When present, a pithy one-liner about the item (usually only seen for movies). /// [JsonProperty("tagline")] - public object? Tagline { get; set; } + public string? Tagline { get; set; } /// /// When present, the URL for theme music for the item (usually only for TV shows). /// [JsonProperty("theme")] - public object? Theme { get; set; } + public string? Theme { get; set; } /// /// When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. /// [JsonProperty("thumb")] - public object? Thumb { get; set; } + public string? Thumb { get; set; } /// /// Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). /// [JsonProperty("titleSort")] - public object? TitleSort { get; set; } + public string? TitleSort { get; set; } /// /// In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). @@ -372,25 +394,25 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// When the user has rated an item, this contains the user rating /// [JsonProperty("userRating")] - public double? UserRating { get; set; } + public float? UserRating { get; set; } /// /// When a users has completed watched or listened to an item, this attribute contains the number of consumptions. /// [JsonProperty("viewCount")] - public long? ViewCount { get; set; } + public int? ViewCount { get; set; } /// /// For shows and seasons, contains the number of viewed episodes. /// [JsonProperty("viewedLeafCount")] - public long? ViewedLeafCount { get; set; } + public int? ViewedLeafCount { get; set; } /// /// When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. /// [JsonProperty("viewOffset")] - public long? ViewOffset { get; set; } + public int? ViewOffset { get; set; } [JsonProperty("Writer")] public List? Writer { get; set; } @@ -399,7 +421,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// When present, the year associated with the item's release (e.g. release year for a movie). /// [JsonProperty("year")] - public long? Year { get; set; } + public int? Year { get; set; } /// /// The state of processing if this generator is part of an optimizer playlist diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetPostplayHubsRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetPostplayHubsRequest.cs index e102daa..522705c 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetPostplayHubsRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetPostplayHubsRequest.cs @@ -97,6 +97,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Only return hubs which are "transient", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added) /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=onlyTransient")] - public BoolInt? OnlyTransient { get; set; } + public BoolInt? OnlyTransient { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetRelatedHubsRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetRelatedHubsRequest.cs index 4379a9f..b157bee 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetRelatedHubsRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetRelatedHubsRequest.cs @@ -97,6 +97,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Only return hubs which are "transient", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added) /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=onlyTransient")] - public BoolInt? OnlyTransient { get; set; } + public BoolInt? OnlyTransient { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetSectionHubsRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetSectionHubsRequest.cs index cb4c8ee..3eb55f1 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetSectionHubsRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetSectionHubsRequest.cs @@ -97,6 +97,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Only return hubs which are "transient", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added) /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=onlyTransient")] - public BoolInt? OnlyTransient { get; set; } + public BoolInt? OnlyTransient { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetSectionImageRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetSectionImageRequest.cs index 4433883..010c02d 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetSectionImageRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetSectionImageRequest.cs @@ -94,7 +94,26 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public long UpdatedAt { get; set; } = default!; /// - /// This is a complex query built of several parameters. See API Info section for information on building media queries + /// A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic.
+ /// + /// + ///
+ /// The query supports:
+ /// - Fields: integer, boolean, tag, string, date, language
+ /// - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type)
+ /// - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR)
+ /// - Sorting: sort parameter with :desc, :nullsLast modifiers
+ /// - Grouping: group parameter
+ /// - Limits: limit parameter
+ ///
+ /// Examples:
+ /// - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24`
+ /// - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24"
+ /// - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10
+ ///
+ /// See API Info section for detailed information on building media queries.
+ /// + ///
///
[SpeakeasyMetadata("queryParam:style=form,explode=true,name=mediaQuery")] public MediaQuery? MediaQuery { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetServerResourcesRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetServerResourcesRequest.cs new file mode 100644 index 0000000..845d2db --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetServerResourcesRequest.cs @@ -0,0 +1,54 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Components; + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + + public class GetServerResourcesRequest + { + + /// + /// Indicates the client accepts the indicated media types + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=accepts")] + public Accepts? Accepts { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.Accepts.ApplicationXml; + + /// + /// An opaque identifier unique to the client + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Client-Identifier")] + public string? ClientIdentifier { get; set; } + + /// + /// Include Https entries in the results + /// + [SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeHttps")] + public IncludeHttps? IncludeHttps { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.IncludeHttps.False; + + /// + /// Include Relay addresses in the results
+ /// + /// + /// E.g: https://10-0-0-25.bbf8e10c7fa20447cacee74cd9914cde.plex.direct:32400
+ /// + ///
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeRelay")] + public IncludeRelay? IncludeRelay { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.IncludeRelay.False; + + /// + /// Include IPv6 entries in the results + /// + [SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeIPv6")] + public IncludeIPv6? IncludeIPv6 { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.IncludeIPv6.False; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetServerResourcesResponse.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetServerResourcesResponse.cs new file mode 100644 index 0000000..1113174 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetServerResourcesResponse.cs @@ -0,0 +1,41 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Components; + using LukeHagar.PlexAPI.SDK.Utils; + using System; + using System.Collections.Generic; + using System.Net.Http; + + public class GetServerResourcesResponse + { + + /// + /// HTTP response content type for this operation + /// + public string? ContentType { get; set; } = default!; + + /// + /// HTTP response status code for this operation + /// + public int StatusCode { get; set; } = default!; + + /// + /// Raw HTTP response; suitable for custom response parsing + /// + public HttpResponseMessage RawResponse { get; set; } = default!; + + /// + /// List of Plex Devices. This includes Plex hosted servers and clients + /// + public List? PlexDevices { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetSourceConnectionInformationRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetSourceConnectionInformationRequest.cs index 7f0239f..f3c8ec6 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetSourceConnectionInformationRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetSourceConnectionInformationRequest.cs @@ -91,6 +91,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Force refresh /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=refresh")] - public BoolInt? Refresh { get; set; } + public BoolInt? Refresh { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetStreamRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetStreamRequest.cs index 0b4c60d..3d3d8a6 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetStreamRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetStreamRequest.cs @@ -109,6 +109,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Whether the server should attempt to automatically adjust the subtitle timestamps to match the media /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=autoAdjustSubtitle")] - public BoolInt? AutoAdjustSubtitle { get; set; } + public BoolInt? AutoAdjustSubtitle { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetSubscriptionRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetSubscriptionRequest.cs index 1cdffba..68ef91c 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetSubscriptionRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetSubscriptionRequest.cs @@ -88,12 +88,12 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Indicates whether the active grabs should be included as well /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeGrabs")] - public BoolInt? IncludeGrabs { get; set; } + public BoolInt? IncludeGrabs { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Compute the storage of recorded items desired by this subscription /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeStorage")] - public BoolInt? IncludeStorage { get; set; } + public BoolInt? IncludeStorage { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetTagsRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetTagsRequest.cs index 71758cf..30f209b 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetTagsRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetTagsRequest.cs @@ -82,9 +82,25 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public string? Marketplace { get; set; } /// - /// The metadata type to filter by + /// The type of media to retrieve or filter by.
+ /// + /// + ///
+ /// 1 = movie
+ /// 2 = show
+ /// 3 = season
+ /// 4 = episode
+ /// 5 = artist
+ /// 6 = album
+ /// 7 = track
+ /// 8 = photo_album
+ /// 9 = photo
+ ///
+ /// E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries
+ /// + ///
///
[SpeakeasyMetadata("queryParam:style=form,explode=true,name=type")] - public long? Type { get; set; } + public MediaType? Type { get; set; } } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetTasksButlerTask.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetTasksButlerTask.cs new file mode 100644 index 0000000..e07f447 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetTasksButlerTask.cs @@ -0,0 +1,54 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class GetTasksButlerTask + { + + /// + /// A user-friendly description of the task + /// + [JsonProperty("description")] + public string? Description { get; set; } + + /// + /// Whether this task is enabled or not + /// + [JsonProperty("enabled")] + public bool? Enabled { get; set; } + + /// + /// The interval (in days) of when this task is run. A value of 1 is run every day, 7 is every week, etc. + /// + [JsonProperty("interval")] + public long? Interval { get; set; } + + /// + /// The name of the task + /// + [JsonProperty("name")] + public string? Name { get; set; } + + /// + /// Indicates whether the timing of the task is randomized within the butler interval + /// + [JsonProperty("scheduleRandomized")] + public bool? ScheduleRandomized { get; set; } + + /// + /// A user-friendly title of the task + /// + [JsonProperty("title")] + public string? Title { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetTokenDetailsRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetTokenDetailsRequest.cs new file mode 100644 index 0000000..6eb195b --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetTokenDetailsRequest.cs @@ -0,0 +1,84 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Components; + using LukeHagar.PlexAPI.SDK.Utils; + + public class GetTokenDetailsRequest + { + + /// + /// Indicates the client accepts the indicated media types + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=accepts")] + public Accepts? Accepts { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.Accepts.ApplicationXml; + + /// + /// An opaque identifier unique to the client + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Client-Identifier")] + public string? ClientIdentifier { get; set; } + + /// + /// The name of the client product + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Product")] + public string? Product { get; set; } + + /// + /// The version of the client application + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Version")] + public string? Version { get; set; } + + /// + /// The platform of the client + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Platform")] + public string? Platform { get; set; } + + /// + /// The version of the platform + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Platform-Version")] + public string? PlatformVersion { get; set; } + + /// + /// A relatively friendly name for the client device + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Device")] + public string? Device { get; set; } + + /// + /// A potentially less friendly identifier for the device model + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Model")] + public string? Model { get; set; } + + /// + /// The device vendor + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Device-Vendor")] + public string? DeviceVendor { get; set; } + + /// + /// A friendly name for the client + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Device-Name")] + public string? DeviceName { get; set; } + + /// + /// The marketplace on which the client application is distributed + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Marketplace")] + public string? Marketplace { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetTokenDetailsResponse.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetTokenDetailsResponse.cs new file mode 100644 index 0000000..3d264ae --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetTokenDetailsResponse.cs @@ -0,0 +1,40 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Components; + using LukeHagar.PlexAPI.SDK.Utils; + using System; + using System.Net.Http; + + public class GetTokenDetailsResponse + { + + /// + /// HTTP response content type for this operation + /// + public string? ContentType { get; set; } = default!; + + /// + /// HTTP response status code for this operation + /// + public int StatusCode { get; set; } = default!; + + /// + /// Raw HTTP response; suitable for custom response parsing + /// + public HttpResponseMessage RawResponse { get; set; } = default!; + + /// + /// Logged in user details + /// + public UserPlexAccount? UserPlexAccount { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetUsersMediaContainer.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetUsersMediaContainer.cs new file mode 100644 index 0000000..c504275 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetUsersMediaContainer.cs @@ -0,0 +1,56 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System.Collections.Generic; + + /// + /// Container holding user and server details. + /// + public class GetUsersMediaContainer + { + + /// + /// The friendly name of the Plex instance. + /// + [JsonProperty("friendlyName")] + public string FriendlyName { get; set; } = default!; + + [JsonProperty("identifier")] + public string Identifier { get; set; } = default!; + + /// + /// Unique Machine identifier of the Plex server. + /// + [JsonProperty("machineIdentifier")] + public string MachineIdentifier { get; set; } = default!; + + /// + /// Total number of users. + /// + [JsonProperty("totalSize")] + public long TotalSize { get; set; } = default!; + + /// + /// Number of users in the current response. + /// + [JsonProperty("size")] + public long Size { get; set; } = default!; + + /// + /// List of users with access to the Plex server. + /// + [JsonProperty("User")] + public List User { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetUsersRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetUsersRequest.cs new file mode 100644 index 0000000..913407b --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetUsersRequest.cs @@ -0,0 +1,84 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Components; + using LukeHagar.PlexAPI.SDK.Utils; + + public class GetUsersRequest + { + + /// + /// Indicates the client accepts the indicated media types + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=accepts")] + public Accepts? Accepts { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.Accepts.ApplicationXml; + + /// + /// An opaque identifier unique to the client + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Client-Identifier")] + public string? ClientIdentifier { get; set; } + + /// + /// The name of the client product + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Product")] + public string? Product { get; set; } + + /// + /// The version of the client application + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Version")] + public string? Version { get; set; } + + /// + /// The platform of the client + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Platform")] + public string? Platform { get; set; } + + /// + /// The version of the platform + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Platform-Version")] + public string? PlatformVersion { get; set; } + + /// + /// A relatively friendly name for the client device + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Device")] + public string? Device { get; set; } + + /// + /// A potentially less friendly identifier for the device model + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Model")] + public string? Model { get; set; } + + /// + /// The device vendor + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Device-Vendor")] + public string? DeviceVendor { get; set; } + + /// + /// A friendly name for the client + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Device-Name")] + public string? DeviceName { get; set; } + + /// + /// The marketplace on which the client application is distributed + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Marketplace")] + public string? Marketplace { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetUsersResponse.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetUsersResponse.cs new file mode 100644 index 0000000..7895326 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetUsersResponse.cs @@ -0,0 +1,40 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using System; + using System.Net.Http; + + public class GetUsersResponse + { + + /// + /// HTTP response content type for this operation + /// + public string? ContentType { get; set; } = default!; + + /// + /// HTTP response status code for this operation + /// + public int StatusCode { get; set; } = default!; + + /// + /// Raw HTTP response; suitable for custom response parsing + /// + public HttpResponseMessage RawResponse { get; set; } = default!; + + /// + /// Successful response with media container data in JSON + /// + public GetUsersResponseBody? Object { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetUsersResponseBody.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetUsersResponseBody.cs new file mode 100644 index 0000000..71523fe --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetUsersResponseBody.cs @@ -0,0 +1,28 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + /// + /// Successful response with media container data in JSON + /// + public class GetUsersResponseBody + { + + /// + /// Container holding user and server details. + /// + [JsonProperty("MediaContainer")] + public GetUsersMediaContainer? MediaContainer { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/Guids.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/Guids.cs new file mode 100644 index 0000000..e552887 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/Guids.cs @@ -0,0 +1,28 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class Guids + { + + /// + /// The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb://
+ /// + /// + /// + /// + ///
+ [JsonProperty("id")] + public string Id { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/Home.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/Home.cs new file mode 100644 index 0000000..0791ed8 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/Home.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// Indicates if the user is part of a home group. + /// + public enum Home + { + Disable = 0, + Enable = 1, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/IncludeHttps.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/IncludeHttps.cs new file mode 100644 index 0000000..d20a172 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/IncludeHttps.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// Include Https entries in the results + /// + public enum IncludeHttps + { + False = 0, + True = 1, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/IncludeIPv6.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/IncludeIPv6.cs new file mode 100644 index 0000000..3d45f30 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/IncludeIPv6.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// Include IPv6 entries in the results + /// + public enum IncludeIPv6 + { + False = 0, + True = 1, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/IncludeRelay.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/IncludeRelay.cs new file mode 100644 index 0000000..81516a3 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/IncludeRelay.cs @@ -0,0 +1,28 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// Include Relay addresses in the results
+ /// + /// + /// E.g: https://10-0-0-25.bbf8e10c7fa20447cacee74cd9914cde.plex.direct:32400
+ /// + ///
+ ///
+ public enum IncludeRelay + { + False = 0, + True = 1, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/IngestTransientItemRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/IngestTransientItemRequest.cs index 49edb37..0ec83a8 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/IngestTransientItemRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/IngestTransientItemRequest.cs @@ -97,12 +97,12 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Whether or not to compute Plex and OpenSubtitle hashes for the file. Defaults to 0. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=computeHashes")] - public BoolInt? ComputeHashes { get; set; } + public BoolInt? ComputeHashes { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Whether or not non matching media should be stored. Defaults to 0. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=ingestNonMatches")] - public BoolInt? IngestNonMatches { get; set; } + public BoolInt? IngestNonMatches { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/InternalPaymentMethod.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/InternalPaymentMethod.cs new file mode 100644 index 0000000..802a2a5 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/InternalPaymentMethod.cs @@ -0,0 +1,17 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + public class InternalPaymentMethod + { + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/ListContentRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/ListContentRequest.cs index 4c41291..10a0498 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/ListContentRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/ListContentRequest.cs @@ -82,11 +82,74 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public string? Marketplace { get; set; } /// - /// This is a complex query built of several parameters. See API Info section for information on building media queries + /// The index of the first item to return. If not specified, the first item will be returned.
+ /// + /// + /// If the number of items exceeds the limit, the response will be paginated.
+ /// By default this is 0
+ /// + ///
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=X-Plex-Container-Start")] + public int? XPlexContainerStart { get; set; } = 0; + + /// + /// The number of items to return. If not specified, all items will be returned.
+ /// + /// + /// If the number of items exceeds the limit, the response will be paginated.
+ /// By default this is 50
+ /// + ///
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=X-Plex-Container-Size")] + public int? XPlexContainerSize { get; set; } = 50; + + /// + /// A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic.
+ /// + /// + ///
+ /// The query supports:
+ /// - Fields: integer, boolean, tag, string, date, language
+ /// - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type)
+ /// - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR)
+ /// - Sorting: sort parameter with :desc, :nullsLast modifiers
+ /// - Grouping: group parameter
+ /// - Limits: limit parameter
+ ///
+ /// Examples:
+ /// - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24`
+ /// - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24"
+ /// - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10
+ ///
+ /// See API Info section for detailed information on building media queries.
+ /// + ///
///
[SpeakeasyMetadata("queryParam:style=form,explode=true,name=mediaQuery")] public MediaQuery? MediaQuery { get; set; } + /// + /// Adds the Meta object to the response
+ /// + /// + /// + /// + ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeMeta")] + public BoolInt? IncludeMeta { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; + + /// + /// Adds the Guid object to the response
+ /// + /// + /// + /// + ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeGuids")] + public BoolInt? IncludeGuids { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; + /// /// The id of the section /// diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/ListMatchesRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/ListMatchesRequest.cs index 6d3b50e..c33d535 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/ListMatchesRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/ListMatchesRequest.cs @@ -100,6 +100,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public long? Year { get; set; } [SpeakeasyMetadata("queryParam:style=form,explode=true,name=manual")] - public BoolInt? Manual { get; set; } + public BoolInt? Manual { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/MailingListStatus.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/MailingListStatus.cs new file mode 100644 index 0000000..435db9a --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/MailingListStatus.cs @@ -0,0 +1,62 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + + /// + /// Your current mailing list status + /// + public enum MailingListStatus + { + [JsonProperty("active")] + Active, + [JsonProperty("unsubscribed")] + Unsubscribed, + [JsonProperty("removed")] + Removed, + } + + public static class MailingListStatusExtension + { + public static string Value(this MailingListStatus value) + { + return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString(); + } + + public static MailingListStatus ToEnum(this string value) + { + foreach(var field in typeof(MailingListStatus).GetFields()) + { + var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false); + if (attributes.Length == 0) + { + continue; + } + + var attribute = attributes[0] as JsonPropertyAttribute; + if (attribute != null && attribute.PropertyName == value) + { + var enumVal = field.GetValue(null); + + if (enumVal is MailingListStatus) + { + return (MailingListStatus)enumVal; + } + } + } + + throw new Exception($"Unknown value {value} for enum MailingListStatus"); + } + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/MakeDecisionRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/MakeDecisionRequest.cs index 665639a..9113bd2 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/MakeDecisionRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/MakeDecisionRequest.cs @@ -120,43 +120,43 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Indicates the client supports ABR. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=autoAdjustQuality")] - public BoolInt? AutoAdjustQuality { get; set; } + public BoolInt? AutoAdjustQuality { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Indicates if the server should adjust subtitles based on Voice Activity Data. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=autoAdjustSubtitle")] - public BoolInt? AutoAdjustSubtitle { get; set; } + public BoolInt? AutoAdjustSubtitle { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Indicates the client supports direct playing the indicated content. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=directPlay")] - public BoolInt? DirectPlay { get; set; } + public BoolInt? DirectPlay { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Indicates the client supports direct streaming the video of the indicated content. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=directStream")] - public BoolInt? DirectStream { get; set; } + public BoolInt? DirectStream { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Indicates the client supports direct streaming the audio of the indicated content. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=directStreamAudio")] - public BoolInt? DirectStreamAudio { get; set; } + public BoolInt? DirectStreamAudio { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Indicates if resolution should be adjusted for orientation. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=disableResolutionRotation")] - public BoolInt? DisableResolutionRotation { get; set; } + public BoolInt? DisableResolutionRotation { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Ignore client profiles when determining if direct play is possible. Only has an effect when directPlay=1 and both mediaIndex and partIndex are specified and neither are -1 /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=hasMDE")] - public BoolInt? HasMDE { get; set; } + public BoolInt? HasMDE { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Network type of the client, can be used to help determine target bitrate. diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/Metadata.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/Metadata.cs index c1944c9..d4deaf1 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/Metadata.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/Metadata.cs @@ -10,8 +10,10 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests { using LukeHagar.PlexAPI.SDK.Models.Components; + using LukeHagar.PlexAPI.SDK.Models.Requests; using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; + using NodaTime; using System.Collections.Generic; /// @@ -44,49 +46,49 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// The user playing the content /// [JsonProperty("User")] - public User? User { get; set; } + public Models.Components.User? User { get; set; } /// /// The title of the item (e.g. “300” or “The Simpsons”) /// [JsonProperty("title")] - public object? Title { get; set; } + public string Title { get; set; } = default!; /// /// The type of the video item, such as `movie`, `episode`, or `clip`. /// [JsonProperty("type")] - public object? Type { get; set; } + public string Type { get; set; } = default!; /// /// When present, contains the disc number for a track on multi-disc albums. /// [JsonProperty("absoluteIndex")] - public long? AbsoluteIndex { get; set; } + public int? AbsoluteIndex { get; set; } /// /// In units of seconds since the epoch, returns the time at which the item was added to the library. /// [JsonProperty("addedAt")] - public long? AddedAt { get; set; } + public long AddedAt { get; set; } = default!; /// /// When present, the URL for the background artwork for the item. /// [JsonProperty("art")] - public object? Art { get; set; } + public string? Art { get; set; } /// /// Some rating systems separate reviewer ratings from audience ratings /// [JsonProperty("audienceRating")] - public double? AudienceRating { get; set; } + public float? AudienceRating { get; set; } /// /// A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). /// [JsonProperty("audienceRatingImage")] - public object? AudienceRatingImage { get; set; } + public string? AudienceRatingImage { get; set; } [JsonProperty("Autotag")] public List? Autotag { get; set; } @@ -95,25 +97,31 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// When present, the URL for a banner graphic for the item. /// [JsonProperty("banner")] - public object? Banner { get; set; } + public string? Banner { get; set; } /// /// When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). /// [JsonProperty("chapterSource")] - public object? ChapterSource { get; set; } + public string? ChapterSource { get; set; } + + /// + /// The number of child items associated with this media item. + /// + [JsonProperty("childCount")] + public int? ChildCount { get; set; } /// /// When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). /// [JsonProperty("composite")] - public object? Composite { get; set; } + public string? Composite { get; set; } /// /// If known, the content rating (e.g. MPAA) for an item. /// [JsonProperty("contentRating")] - public object? ContentRating { get; set; } + public string? ContentRating { get; set; } [JsonProperty("Country")] public List? Country { get; set; } @@ -125,7 +133,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// When present, the duration for the item, in units of milliseconds. /// [JsonProperty("duration")] - public long? Duration { get; set; } + public int? Duration { get; set; } /// /// Typically only seen in metadata at a library's top level @@ -142,6 +150,12 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests [JsonProperty("grandparentArt")] public string? GrandparentArt { get; set; } + /// + /// The GUID of the grandparent media item. + /// + [JsonProperty("grandparentGuid")] + public string? GrandparentGuid { get; set; } + /// /// The `hero` of the grandparent /// @@ -178,14 +192,20 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests [JsonProperty("grandparentTitle")] public string? GrandparentTitle { get; set; } + /// + /// The globally unique identifier for the media item. + /// + [JsonProperty("guid")] + public string? Guid { get; set; } + [JsonProperty("Guid")] - public List? Guid { get; set; } + public List? Guids { get; set; } /// /// When present, the URL for a hero image for the item. /// [JsonProperty("hero")] - public object? Hero { get; set; } + public string? Hero { get; set; } [JsonProperty("Image")] public List? Image { get; set; } @@ -194,17 +214,14 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. /// [JsonProperty("index")] - public long? Index { get; set; } + public int? Index { get; set; } /// /// The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. /// [JsonProperty("key")] - public object? Key { get; set; } + public string Key { get; set; } = default!; - /// - /// When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - /// [JsonProperty("lastViewedAt")] public long? LastViewedAt { get; set; } @@ -212,7 +229,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// For shows and seasons, contains the number of total episodes. /// [JsonProperty("leafCount")] - public long? LeafCount { get; set; } + public int? LeafCount { get; set; } [JsonProperty("Media")] public List? Media { get; set; } @@ -221,13 +238,19 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. /// [JsonProperty("originallyAvailableAt")] - public object? OriginallyAvailableAt { get; set; } + public LocalDate? OriginallyAvailableAt { get; set; } /// /// When present, used to indicate an item's original title, e.g. a movie's foreign title. /// [JsonProperty("originalTitle")] - public object? OriginalTitle { get; set; } + public string? OriginalTitle { get; set; } + + /// + /// The GUID of the parent media item. + /// + [JsonProperty("parentGuid")] + public string? ParentGuid { get; set; } /// /// The `hero` of the parent @@ -239,7 +262,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// The `index` of the parent /// [JsonProperty("parentIndex")] - public long? ParentIndex { get; set; } + public int? ParentIndex { get; set; } /// /// The `key` of the parent @@ -269,7 +292,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. /// [JsonProperty("primaryExtraKey")] - public object? PrimaryExtraKey { get; set; } + public string? PrimaryExtraKey { get; set; } /// /// Prompt to give the user for this directory (such as `Search Movies`) @@ -281,7 +304,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. /// [JsonProperty("rating")] - public double? Rating { get; set; } + public float? Rating { get; set; } [JsonProperty("Rating")] public List? RatingArray { get; set; } @@ -290,19 +313,19 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Number of ratings under this metadata /// [JsonProperty("ratingCount")] - public long? RatingCount { get; set; } + public int? RatingCount { get; set; } /// /// When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. /// [JsonProperty("ratingImage")] - public object? RatingImage { get; set; } + public string? RatingImage { get; set; } /// /// This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. /// [JsonProperty("ratingKey")] - public object? RatingKey { get; set; } + public string? RatingKey { get; set; } [JsonProperty("Role")] public List? Role { get; set; } @@ -341,43 +364,43 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). /// [JsonProperty("studio")] - public object? Studio { get; set; } + public string? Studio { get; set; } /// /// The subtype of the video item, such as `photo` when the video item is in a photo library /// [JsonProperty("subtype")] - public object? Subtype { get; set; } + public string? Subtype { get; set; } /// /// When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). /// [JsonProperty("summary")] - public object? Summary { get; set; } + public string? Summary { get; set; } /// /// When present, a pithy one-liner about the item (usually only seen for movies). /// [JsonProperty("tagline")] - public object? Tagline { get; set; } + public string? Tagline { get; set; } /// /// When present, the URL for theme music for the item (usually only for TV shows). /// [JsonProperty("theme")] - public object? Theme { get; set; } + public string? Theme { get; set; } /// /// When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. /// [JsonProperty("thumb")] - public object? Thumb { get; set; } + public string? Thumb { get; set; } /// /// Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). /// [JsonProperty("titleSort")] - public object? TitleSort { get; set; } + public string? TitleSort { get; set; } /// /// In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). @@ -389,25 +412,25 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// When the user has rated an item, this contains the user rating /// [JsonProperty("userRating")] - public double? UserRating { get; set; } + public float? UserRating { get; set; } /// /// When a users has completed watched or listened to an item, this attribute contains the number of consumptions. /// [JsonProperty("viewCount")] - public long? ViewCount { get; set; } + public int? ViewCount { get; set; } /// /// For shows and seasons, contains the number of viewed episodes. /// [JsonProperty("viewedLeafCount")] - public long? ViewedLeafCount { get; set; } + public int? ViewedLeafCount { get; set; } /// /// When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. /// [JsonProperty("viewOffset")] - public long? ViewOffset { get; set; } + public int? ViewOffset { get; set; } [JsonProperty("Writer")] public List? Writer { get; set; } @@ -416,7 +439,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// When present, the year associated with the item's release (e.g. release year for a movie). /// [JsonProperty("year")] - public long? Year { get; set; } + public int? Year { get; set; } [JsonProperty("additionalProperties")] public Dictionary? AdditionalProperties { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/ModifyDeviceRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/ModifyDeviceRequest.cs index 3327adf..643f274 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/ModifyDeviceRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/ModifyDeviceRequest.cs @@ -91,6 +91,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Whether to enable the device /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=enabled")] - public BoolInt? Enabled { get; set; } + public BoolInt? Enabled { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/OptimizeDatabaseRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/OptimizeDatabaseRequest.cs index 57cc97e..703132b 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/OptimizeDatabaseRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/OptimizeDatabaseRequest.cs @@ -85,6 +85,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// If set, don't wait for completion but return an activity /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=async")] - public BoolInt? Async { get; set; } + public BoolInt? Async { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/Owned.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/Owned.cs new file mode 100644 index 0000000..6b08368 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/Owned.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// Indicates if the user owns the server. + /// + public enum Owned + { + Disable = 0, + Enable = 1, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/PastSubscription.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/PastSubscription.cs new file mode 100644 index 0000000..11c30e5 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/PastSubscription.cs @@ -0,0 +1,68 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + using System.Collections.Concurrent; + using System.Collections.Generic; + using System.Linq; + + public class PastSubscription + { + + [JsonProperty("id", NullValueHandling = NullValueHandling.Include)] + public string? Id { get; set; } + + [JsonProperty("mode", NullValueHandling = NullValueHandling.Include)] + public string? Mode { get; set; } + + [JsonProperty("renewsAt", NullValueHandling = NullValueHandling.Include)] + public long? RenewsAt { get; set; } + + [JsonProperty("endsAt", NullValueHandling = NullValueHandling.Include)] + public long? EndsAt { get; set; } + + [JsonProperty("canceled")] + public bool? Canceled { get; set; } = false; + + [JsonProperty("gracePeriod")] + public bool? GracePeriod { get; set; } = false; + + [JsonProperty("onHold")] + public bool? OnHold { get; set; } = false; + + [JsonProperty("canReactivate")] + public bool? CanReactivate { get; set; } = false; + + [JsonProperty("canUpgrade")] + public bool? CanUpgrade { get; set; } = false; + + [JsonProperty("canDowngrade")] + public bool? CanDowngrade { get; set; } = false; + + [JsonProperty("canConvert")] + public bool? CanConvert { get; set; } = false; + + [JsonProperty("type")] + public string Type { get; set; } = default!; + + [JsonProperty("transfer", NullValueHandling = NullValueHandling.Include)] + public string? Transfer { get; set; } + + [JsonProperty("state")] + public PostUsersSignInDataState State { get; set; } = default!; + + [JsonProperty("billing")] + public Billing Billing { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/PathParamTask.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/PathParamButlerTask.cs similarity index 87% rename from LukeHagar/PlexAPI/SDK/Models/Requests/PathParamTask.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/PathParamButlerTask.cs index f991a5b..2027216 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/PathParamTask.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/PathParamButlerTask.cs @@ -16,7 +16,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// /// The task name /// - public enum PathParamTask + public enum PathParamButlerTask { [JsonProperty("AutomaticUpdates")] AutomaticUpdates, @@ -64,16 +64,16 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests UpgradeMediaAnalysis, } - public static class PathParamTaskExtension + public static class PathParamButlerTaskExtension { - public static string Value(this PathParamTask value) + public static string Value(this PathParamButlerTask value) { return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString(); } - public static PathParamTask ToEnum(this string value) + public static PathParamButlerTask ToEnum(this string value) { - foreach(var field in typeof(PathParamTask).GetFields()) + foreach(var field in typeof(PathParamButlerTask).GetFields()) { var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false); if (attributes.Length == 0) @@ -86,14 +86,14 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests { var enumVal = field.GetValue(null); - if (enumVal is PathParamTask) + if (enumVal is PathParamButlerTask) { - return (PathParamTask)enumVal; + return (PathParamButlerTask)enumVal; } } } - throw new Exception($"Unknown value {value} for enum PathParamTask"); + throw new Exception($"Unknown value {value} for enum PathParamButlerTask"); } } diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/Pending.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/Pending.cs new file mode 100644 index 0000000..494ee94 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/Pending.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// Indicates if the server is pending approval. + /// + public enum Pending + { + Disable = 0, + Enable = 1, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataAuthenticationStatus.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataAuthenticationStatus.cs new file mode 100644 index 0000000..759c94b --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataAuthenticationStatus.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + using System.Collections.Concurrent; + using System.Collections.Generic; + using System.Linq; + + /// + /// String representation of subscriptionActive + /// + [JsonConverter(typeof(OpenEnumConverter))] + public class PostUsersSignInDataAuthenticationStatus : IEquatable + { + public static readonly PostUsersSignInDataAuthenticationStatus Inactive = new PostUsersSignInDataAuthenticationStatus("Inactive"); + public static readonly PostUsersSignInDataAuthenticationStatus Active = new PostUsersSignInDataAuthenticationStatus("Active"); + + private static readonly Dictionary _knownValues = + new Dictionary () + { + ["Inactive"] = Inactive, + ["Active"] = Active + }; + + private static readonly ConcurrentDictionary _values = + new ConcurrentDictionary(_knownValues); + + private PostUsersSignInDataAuthenticationStatus(string value) + { + if (value == null) throw new ArgumentNullException(nameof(value)); + Value = value; + } + + public string Value { get; } + + public static PostUsersSignInDataAuthenticationStatus Of(string value) + { + return _values.GetOrAdd(value, _ => new PostUsersSignInDataAuthenticationStatus(value)); + } + + public static implicit operator PostUsersSignInDataAuthenticationStatus(string value) => Of(value); + public static implicit operator string(PostUsersSignInDataAuthenticationStatus postuserssignindataauthenticationstatus) => postuserssignindataauthenticationstatus.Value; + + public static PostUsersSignInDataAuthenticationStatus[] Values() + { + return _values.Values.ToArray(); + } + + public override string ToString() => Value.ToString(); + + public bool IsKnown() + { + return _knownValues.ContainsKey(Value); + } + + public override bool Equals(object? obj) => Equals(obj as PostUsersSignInDataAuthenticationStatus); + + public bool Equals(PostUsersSignInDataAuthenticationStatus? other) + { + if (ReferenceEquals(this, other)) return true; + if (other is null) return false; + return string.Equals(Value, other.Value); + } + + public override int GetHashCode() => Value.GetHashCode(); + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataRequest.cs new file mode 100644 index 0000000..4b396f6 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataRequest.cs @@ -0,0 +1,91 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Components; + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + + public class PostUsersSignInDataRequest + { + + /// + /// Indicates the client accepts the indicated media types + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=accepts")] + public Accepts? Accepts { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.Accepts.ApplicationXml; + + /// + /// An opaque identifier unique to the client + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Client-Identifier")] + public string? ClientIdentifier { get; set; } + + /// + /// The name of the client product + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Product")] + public string? Product { get; set; } + + /// + /// The version of the client application + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Version")] + public string? Version { get; set; } + + /// + /// The platform of the client + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Platform")] + public string? Platform { get; set; } + + /// + /// The version of the platform + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Platform-Version")] + public string? PlatformVersion { get; set; } + + /// + /// A relatively friendly name for the client device + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Device")] + public string? Device { get; set; } + + /// + /// A potentially less friendly identifier for the device model + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Model")] + public string? Model { get; set; } + + /// + /// The device vendor + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Device-Vendor")] + public string? DeviceVendor { get; set; } + + /// + /// A friendly name for the client + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Device-Name")] + public string? DeviceName { get; set; } + + /// + /// The marketplace on which the client application is distributed + /// + [SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Marketplace")] + public string? Marketplace { get; set; } + + /// + /// Login credentials + /// + [SpeakeasyMetadata("request:mediaType=application/x-www-form-urlencoded")] + public PostUsersSignInDataRequestBody? RequestBody { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataRequestBody.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataRequestBody.cs new file mode 100644 index 0000000..5532b21 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataRequestBody.cs @@ -0,0 +1,32 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// Login credentials + /// + public class PostUsersSignInDataRequestBody + { + + [SpeakeasyMetadata("form:name=login")] + public string Login { get; set; } = default!; + + [SpeakeasyMetadata("form:name=password")] + public string Password { get; set; } = default!; + + [SpeakeasyMetadata("form:name=rememberMe")] + public bool? RememberMe { get; set; } = false; + + [SpeakeasyMetadata("form:name=verificationCode")] + public string? VerificationCode { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataResponse.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataResponse.cs new file mode 100644 index 0000000..44c676f --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataResponse.cs @@ -0,0 +1,40 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using System; + using System.Net.Http; + + public class PostUsersSignInDataResponse + { + + /// + /// HTTP response content type for this operation + /// + public string? ContentType { get; set; } = default!; + + /// + /// HTTP response status code for this operation + /// + public int StatusCode { get; set; } = default!; + + /// + /// Raw HTTP response; suitable for custom response parsing + /// + public HttpResponseMessage RawResponse { get; set; } = default!; + + /// + /// Returns the user account data with a valid auth token + /// + public PostUsersSignInDataUserPlexAccount? UserPlexAccount { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataState.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataState.cs new file mode 100644 index 0000000..082104e --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataState.cs @@ -0,0 +1,73 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + using System.Collections.Concurrent; + using System.Collections.Generic; + using System.Linq; + + [JsonConverter(typeof(OpenEnumConverter))] + public class PostUsersSignInDataState : IEquatable + { + public static readonly PostUsersSignInDataState Ended = new PostUsersSignInDataState("ended"); + + private static readonly Dictionary _knownValues = + new Dictionary () + { + ["ended"] = Ended + }; + + private static readonly ConcurrentDictionary _values = + new ConcurrentDictionary(_knownValues); + + private PostUsersSignInDataState(string value) + { + if (value == null) throw new ArgumentNullException(nameof(value)); + Value = value; + } + + public string Value { get; } + + public static PostUsersSignInDataState Of(string value) + { + return _values.GetOrAdd(value, _ => new PostUsersSignInDataState(value)); + } + + public static implicit operator PostUsersSignInDataState(string value) => Of(value); + public static implicit operator string(PostUsersSignInDataState postuserssignindatastate) => postuserssignindatastate.Value; + + public static PostUsersSignInDataState[] Values() + { + return _values.Values.ToArray(); + } + + public override string ToString() => Value.ToString(); + + public bool IsKnown() + { + return _knownValues.ContainsKey(Value); + } + + public override bool Equals(object? obj) => Equals(obj as PostUsersSignInDataState); + + public bool Equals(PostUsersSignInDataState? other) + { + if (ReferenceEquals(this, other)) return true; + if (other is null) return false; + return string.Equals(Value, other.Value); + } + + public override int GetHashCode() => Value.GetHashCode(); + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataStatus.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataStatus.cs new file mode 100644 index 0000000..a435459 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataStatus.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + using System.Collections.Concurrent; + using System.Collections.Generic; + using System.Linq; + + /// + /// String representation of subscriptionActive + /// + [JsonConverter(typeof(OpenEnumConverter))] + public class PostUsersSignInDataStatus : IEquatable + { + public static readonly PostUsersSignInDataStatus Inactive = new PostUsersSignInDataStatus("Inactive"); + public static readonly PostUsersSignInDataStatus Active = new PostUsersSignInDataStatus("Active"); + + private static readonly Dictionary _knownValues = + new Dictionary () + { + ["Inactive"] = Inactive, + ["Active"] = Active + }; + + private static readonly ConcurrentDictionary _values = + new ConcurrentDictionary(_knownValues); + + private PostUsersSignInDataStatus(string value) + { + if (value == null) throw new ArgumentNullException(nameof(value)); + Value = value; + } + + public string Value { get; } + + public static PostUsersSignInDataStatus Of(string value) + { + return _values.GetOrAdd(value, _ => new PostUsersSignInDataStatus(value)); + } + + public static implicit operator PostUsersSignInDataStatus(string value) => Of(value); + public static implicit operator string(PostUsersSignInDataStatus postuserssignindatastatus) => postuserssignindatastatus.Value; + + public static PostUsersSignInDataStatus[] Values() + { + return _values.Values.ToArray(); + } + + public override string ToString() => Value.ToString(); + + public bool IsKnown() + { + return _knownValues.ContainsKey(Value); + } + + public override bool Equals(object? obj) => Equals(obj as PostUsersSignInDataStatus); + + public bool Equals(PostUsersSignInDataStatus? other) + { + if (ReferenceEquals(this, other)) return true; + if (other is null) return false; + return string.Equals(Value, other.Value); + } + + public override int GetHashCode() => Value.GetHashCode(); + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataSubscription.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataSubscription.cs new file mode 100644 index 0000000..123e39a --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataSubscription.cs @@ -0,0 +1,59 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + using System.Collections.Concurrent; + using System.Collections.Generic; + using System.Linq; + + public class PostUsersSignInDataSubscription + { + + /// + /// List of features allowed on your Plex Pass subscription + /// + [JsonProperty("features")] + public List? Features { get; set; } + + /// + /// If the account's Plex Pass subscription is active + /// + [JsonProperty("active")] + public bool? Active { get; set; } + + /// + /// Date the account subscribed to Plex Pass + /// + [JsonProperty("subscribedAt")] + public string? SubscribedAt { get; set; } = null; + + /// + /// String representation of subscriptionActive + /// + [JsonProperty("status")] + public PostUsersSignInDataAuthenticationStatus? Status { get; set; } + + /// + /// Payment service used for your Plex Pass subscription + /// + [JsonProperty("paymentService")] + public string? PaymentService { get; set; } = null; + + /// + /// Name of Plex Pass subscription plan + /// + [JsonProperty("plan")] + public string? Plan { get; set; } = null; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataUserPlexAccount.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataUserPlexAccount.cs new file mode 100644 index 0000000..b7b3a4d --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/PostUsersSignInDataUserPlexAccount.cs @@ -0,0 +1,260 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Components; + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + using System.Collections.Generic; + + /// + /// Returns the user account data with a valid auth token + /// + public class PostUsersSignInDataUserPlexAccount + { + + /// + /// Unknown + /// + [JsonProperty("adsConsent")] + public bool? AdsConsent { get; set; } = null; + + [JsonProperty("adsConsentReminderAt")] + public long? AdsConsentReminderAt { get; set; } = null; + + [JsonProperty("adsConsentSetAt")] + public long? AdsConsentSetAt { get; set; } = null; + + /// + /// Unknown + /// + [JsonProperty("anonymous")] + public bool? Anonymous { get; set; } = false; + + /// + /// The account token + /// + [JsonProperty("authToken")] + public string AuthToken { get; set; } = default!; + + /// + /// If the two-factor authentication backup codes have been created + /// + [JsonProperty("backupCodesCreated")] + public bool? BackupCodesCreated { get; set; } = false; + + /// + /// If the account has been confirmed + /// + [JsonProperty("confirmed")] + public bool? Confirmed { get; set; } = false; + + /// + /// The account country + /// + [JsonProperty("country")] + public string? Country { get; set; } + + /// + /// The account email address + /// + [JsonProperty("email")] + public string Email { get; set; } = default!; + + /// + /// If login with email only is enabled + /// + [JsonProperty("emailOnlyAuth")] + public bool? EmailOnlyAuth { get; set; } = false; + + /// + /// If experimental features are enabled + /// + [JsonProperty("experimentalFeatures")] + public bool? ExperimentalFeatures { get; set; } = false; + + /// + /// Your account full name + /// + [JsonProperty("friendlyName")] + public string FriendlyName { get; set; } = default!; + + /// + /// List of devices your allowed to use with this account + /// + [JsonProperty("entitlements")] + public List? Entitlements { get; set; } + + /// + /// If the account is a Plex Home guest user + /// + [JsonProperty("guest")] + public bool? Guest { get; set; } = false; + + /// + /// If the account has a password + /// + [JsonProperty("hasPassword")] + public bool? HasPassword { get; set; } = true; + + /// + /// If the account is a Plex Home user + /// + [JsonProperty("home")] + public bool? Home { get; set; } = false; + + /// + /// If the account is the Plex Home admin + /// + [JsonProperty("homeAdmin")] + public bool? HomeAdmin { get; set; } = false; + + /// + /// The number of accounts in the Plex Home + /// + [JsonProperty("homeSize")] + public int? HomeSize { get; set; } + + /// + /// The Plex account ID + /// + [JsonProperty("id")] + public int Id { get; set; } = default!; + + /// + /// Unix epoch datetime in seconds + /// + [JsonProperty("joinedAt")] + public long JoinedAt { get; set; } = default!; + + /// + /// The account locale + /// + [JsonProperty("locale")] + public string? Locale { get; set; } = null; + + /// + /// If you are subscribed to the Plex newsletter + /// + [JsonProperty("mailingListActive")] + public bool? MailingListActive { get; set; } = false; + + /// + /// Your current mailing list status + /// + [JsonProperty("mailingListStatus")] + public Models.Requests.MailingListStatus? MailingListStatus { get; set; } + + /// + /// The maximum number of accounts allowed in the Plex Home + /// + [JsonProperty("maxHomeSize")] + public int? MaxHomeSize { get; set; } + + /// + /// [Might be removed] The hashed Plex Home PIN + /// + [Obsolete("This field will be removed in a future release, please migrate away from it as soon as possible")] + [JsonProperty("pin")] + public string? Pin { get; set; } + + [JsonProperty("profile")] + public UserProfile? Profile { get; set; } + + /// + /// If the account has a Plex Home PIN enabled + /// + [JsonProperty("protected")] + public bool? Protected { get; set; } = false; + + /// + /// Unix epoch datetime in seconds + /// + [JsonProperty("rememberExpiresAt")] + public long? RememberExpiresAt { get; set; } + + /// + /// If the account is a Plex Home managed user + /// + [JsonProperty("restricted")] + public bool? Restricted { get; set; } = false; + + /// + /// [Might be removed] List of account roles. Plexpass membership listed here + /// + [JsonProperty("roles")] + public List? Roles { get; set; } + + /// + /// Unknown + /// + [JsonProperty("scrobbleTypes")] + public string? ScrobbleTypes { get; set; } + + [JsonProperty("services")] + public List? Services { get; set; } + + /// + /// If the account's Plex Pass subscription is active + /// + [JsonProperty("subscription")] + public Models.Requests.Subscription? Subscription { get; set; } + + /// + /// Description of the Plex Pass subscription + /// + [JsonProperty("subscriptionDescription")] + public string? SubscriptionDescription { get; set; } = null; + + [JsonProperty("subscriptions")] + public List? Subscriptions { get; set; } + + /// + /// URL of the account thumbnail + /// + [JsonProperty("thumb")] + public string? Thumb { get; set; } + + /// + /// The title of the account (username or friendly name) + /// + [JsonProperty("title")] + public string Title { get; set; } = default!; + + /// + /// If two-factor authentication is enabled + /// + [JsonProperty("twoFactorEnabled")] + public bool? TwoFactorEnabled { get; set; } = false; + + /// + /// The account username + /// + [JsonProperty("username")] + public string Username { get; set; } = default!; + + /// + /// The account UUID + /// + [JsonProperty("uuid")] + public string Uuid { get; set; } = default!; + + [JsonProperty("attributionPartner")] + public string? AttributionPartner { get; set; } = null; + + [JsonProperty("pastSubscriptions")] + public List PastSubscriptions { get; set; } = default!; + + [JsonProperty("trials")] + public List Trials { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/Protected.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/Protected.cs new file mode 100644 index 0000000..a8e3e7a --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/Protected.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// Indicates whether the account is protected. + /// + public enum Protected + { + Disable = 0, + Enable = 1, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/RefreshItemsMetadataRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/RefreshItemsMetadataRequest.cs index 6500324..164767c 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/RefreshItemsMetadataRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/RefreshItemsMetadataRequest.cs @@ -88,6 +88,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public string? Agent { get; set; } [SpeakeasyMetadata("queryParam:style=form,explode=true,name=markUpdated")] - public BoolInt? MarkUpdated { get; set; } + public BoolInt? MarkUpdated { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/RefreshSectionRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/RefreshSectionRequest.cs index 29e01b4..32c4e0f 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/RefreshSectionRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/RefreshSectionRequest.cs @@ -91,7 +91,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Whether the update of metadata and items should be performed even if modification dates indicate the items have not change /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=force")] - public BoolInt? Force { get; set; } + public BoolInt? Force { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Restrict refresh to the specified path diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/ReportRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/ReportRequest.cs index c57c635..3433469 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/ReportRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/ReportRequest.cs @@ -122,7 +122,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// When state is `stopped`, a flag indicating whether or not the client is going to continue playing anothe item. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=continuing")] - public BoolInt? Continuing { get; set; } + public BoolInt? Continuing { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Used when a sync client comes online and is syncing media timelines, holds the time at which the playback state was last updated. @@ -134,7 +134,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Also used by sync clients, used to indicate that a timeline is being synced from being offline, as opposed to being "live". /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=offline")] - public BoolInt? Offline { get; set; } + public BoolInt? Offline { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Time in seconds till first frame is displayed. Sent only on the first playing timeline request. diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/Restricted.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/Restricted.cs new file mode 100644 index 0000000..5f2e5dd --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/Restricted.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// Indicates if the user has restricted access. + /// + public enum Restricted + { + Disable = 0, + Enable = 1, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/Server.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/Server.cs new file mode 100644 index 0000000..376649d --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/Server.cs @@ -0,0 +1,64 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class Server + { + + /// + /// Unique ID of the server of the connected user + /// + [JsonProperty("id")] + public long Id { get; set; } = default!; + + /// + /// ID of the actual Plex server. + /// + [JsonProperty("serverId")] + public long ServerId { get; set; } = default!; + + /// + /// Machine identifier of the Plex server. + /// + [JsonProperty("machineIdentifier")] + public string MachineIdentifier { get; set; } = default!; + + /// + /// Name of the Plex server of the connected user. + /// + [JsonProperty("name")] + public string Name { get; set; } = default!; + + /// + /// Unix epoch datetime in seconds + /// + [JsonProperty("lastSeenAt")] + public long LastSeenAt { get; set; } = default!; + + /// + /// Number of libraries in the server this user has access to. + /// + [JsonProperty("numLibraries")] + public long NumLibraries { get; set; } = default!; + + [JsonProperty("allLibraries")] + public AllLibraries? AllLibraries { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.AllLibraries.Disable; + + [JsonProperty("owned")] + public Owned? Owned { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.Owned.Disable; + + [JsonProperty("pending")] + public Pending? Pending { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.Pending.Disable; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/Services.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/Services.cs new file mode 100644 index 0000000..f915ce0 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/Services.cs @@ -0,0 +1,38 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + using System.Collections.Concurrent; + using System.Collections.Generic; + using System.Linq; + + public class Services + { + + [JsonProperty("identifier")] + public string Identifier { get; set; } = default!; + + [JsonProperty("endpoint")] + public string Endpoint { get; set; } = default!; + + [JsonProperty("token", NullValueHandling = NullValueHandling.Include)] + public string? Token { get; set; } + + [JsonProperty("secret", NullValueHandling = NullValueHandling.Include)] + public string? Secret { get; set; } + + [JsonProperty("status")] + public Models.Requests.Status Status { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/SetStreamSelectionRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/SetStreamSelectionRequest.cs index b2488d0..7e98139 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/SetStreamSelectionRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/SetStreamSelectionRequest.cs @@ -103,6 +103,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Perform the same for all parts of this media selecting similar streams in each /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=allParts")] - public BoolInt? AllParts { get; set; } + public BoolInt? AllParts { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/StartBifGenerationRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/StartBifGenerationRequest.cs index 516f376..ffea589 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/StartBifGenerationRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/StartBifGenerationRequest.cs @@ -85,6 +85,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public string Ids { get; set; } = default!; [SpeakeasyMetadata("queryParam:style=form,explode=true,name=force")] - public BoolInt? Force { get; set; } + public BoolInt? Force { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/StartTaskRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/StartTaskRequest.cs index 3b576e4..3c5f647 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/StartTaskRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/StartTaskRequest.cs @@ -85,7 +85,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// /// The task name /// - [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=task")] - public PathParamTask Task { get; set; } = default!; + [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=butlerTask")] + public PathParamButlerTask ButlerTask { get; set; } = default!; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/StartTranscodeSessionRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/StartTranscodeSessionRequest.cs index db86ff3..069843e 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/StartTranscodeSessionRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/StartTranscodeSessionRequest.cs @@ -130,43 +130,43 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Indicates the client supports ABR. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=autoAdjustQuality")] - public BoolInt? AutoAdjustQuality { get; set; } + public BoolInt? AutoAdjustQuality { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Indicates if the server should adjust subtitles based on Voice Activity Data. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=autoAdjustSubtitle")] - public BoolInt? AutoAdjustSubtitle { get; set; } + public BoolInt? AutoAdjustSubtitle { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Indicates the client supports direct playing the indicated content. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=directPlay")] - public BoolInt? DirectPlay { get; set; } + public BoolInt? DirectPlay { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Indicates the client supports direct streaming the video of the indicated content. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=directStream")] - public BoolInt? DirectStream { get; set; } + public BoolInt? DirectStream { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Indicates the client supports direct streaming the audio of the indicated content. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=directStreamAudio")] - public BoolInt? DirectStreamAudio { get; set; } + public BoolInt? DirectStreamAudio { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Indicates if resolution should be adjusted for orientation. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=disableResolutionRotation")] - public BoolInt? DisableResolutionRotation { get; set; } + public BoolInt? DisableResolutionRotation { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Ignore client profiles when determining if direct play is possible. Only has an effect when directPlay=1 and both mediaIndex and partIndex are specified and neither are -1 /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=hasMDE")] - public BoolInt? HasMDE { get; set; } + public BoolInt? HasMDE { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Network type of the client, can be used to help determine target bitrate. diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/Status.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/Status.cs index f61a38e..5655165 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/Status.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/Status.cs @@ -12,64 +12,64 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; using System; + using System.Collections.Concurrent; + using System.Collections.Generic; + using System.Linq; - /// - /// The state of this queue
- /// - /// - /// - deciding: At least one item is still being decided
- /// - waiting: At least one item is waiting for transcode and none are currently transcoding
- /// - processing: At least one item is being transcoded
- /// - done: All items are available (or potentially expired)
- /// - error: At least one item has encountered an error
- /// - ///
- ///
- public enum Status + [JsonConverter(typeof(OpenEnumConverter))] + public class Status : IEquatable { - [JsonProperty("deciding")] - Deciding, - [JsonProperty("waiting")] - Waiting, - [JsonProperty("processing")] - Processing, - [JsonProperty("done")] - Done, - [JsonProperty("error")] - Error, - } + public static readonly Status Online = new Status("online"); + public static readonly Status Offline = new Status("offline"); - public static class StatusExtension - { - public static string Value(this Status value) - { - return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString(); - } - - public static Status ToEnum(this string value) - { - foreach(var field in typeof(Status).GetFields()) + private static readonly Dictionary _knownValues = + new Dictionary () { - var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false); - if (attributes.Length == 0) - { - continue; - } + ["online"] = Online, + ["offline"] = Offline + }; - var attribute = attributes[0] as JsonPropertyAttribute; - if (attribute != null && attribute.PropertyName == value) - { - var enumVal = field.GetValue(null); + private static readonly ConcurrentDictionary _values = + new ConcurrentDictionary(_knownValues); - if (enumVal is Status) - { - return (Status)enumVal; - } - } - } - - throw new Exception($"Unknown value {value} for enum Status"); + private Status(string value) + { + if (value == null) throw new ArgumentNullException(nameof(value)); + Value = value; } + + public string Value { get; } + + public static Status Of(string value) + { + return _values.GetOrAdd(value, _ => new Status(value)); + } + + public static implicit operator Status(string value) => Of(value); + public static implicit operator string(Status status) => status.Value; + + public static Status[] Values() + { + return _values.Values.ToArray(); + } + + public override string ToString() => Value.ToString(); + + public bool IsKnown() + { + return _knownValues.ContainsKey(Value); + } + + public override bool Equals(object? obj) => Equals(obj as Status); + + public bool Equals(Status? other) + { + if (ReferenceEquals(this, other)) return true; + if (other is null) return false; + return string.Equals(Value, other.Value); + } + + public override int GetHashCode() => Value.GetHashCode(); } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/StopTaskRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/StopTaskRequest.cs index b81e894..df5c5fc 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/StopTaskRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/StopTaskRequest.cs @@ -85,7 +85,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// /// The task name /// - [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=task")] - public Task Task { get; set; } = default!; + [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=butlerTask")] + public ButlerTask ButlerTask { get; set; } = default!; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/Subscription.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/Subscription.cs new file mode 100644 index 0000000..43f20c7 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/Subscription.cs @@ -0,0 +1,62 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + using System.Collections.Concurrent; + using System.Collections.Generic; + using System.Linq; + + /// + /// If the account's Plex Pass subscription is active + /// + public class Subscription + { + + /// + /// List of features allowed on your Plex Pass subscription + /// + [JsonProperty("features")] + public List? Features { get; set; } + + /// + /// If the account's Plex Pass subscription is active + /// + [JsonProperty("active")] + public bool? Active { get; set; } + + /// + /// Date the account subscribed to Plex Pass + /// + [JsonProperty("subscribedAt")] + public string? SubscribedAt { get; set; } = null; + + /// + /// String representation of subscriptionActive + /// + [JsonProperty("status")] + public PostUsersSignInDataStatus? Status { get; set; } + + /// + /// Payment service used for your Plex Pass subscription + /// + [JsonProperty("paymentService")] + public string? PaymentService { get; set; } = null; + + /// + /// Name of Plex Pass subscription plan + /// + [JsonProperty("plan")] + public string? Plan { get; set; } = null; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/Task.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/Task.cs deleted file mode 100644 index 51bf0bb..0000000 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/Task.cs +++ /dev/null @@ -1,100 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. -// -// Changes to this file may cause incorrect behavior and will be lost when -// the code is regenerated. -// -//------------------------------------------------------------------------------ -#nullable enable -namespace LukeHagar.PlexAPI.SDK.Models.Requests -{ - using LukeHagar.PlexAPI.SDK.Utils; - using Newtonsoft.Json; - using System; - - /// - /// The task name - /// - public enum Task - { - [JsonProperty("AutomaticUpdates")] - AutomaticUpdates, - [JsonProperty("BackupDatabase")] - BackupDatabase, - [JsonProperty("ButlerTaskGenerateAdMarkers")] - ButlerTaskGenerateAdMarkers, - [JsonProperty("ButlerTaskGenerateCreditsMarkers")] - ButlerTaskGenerateCreditsMarkers, - [JsonProperty("ButlerTaskGenerateIntroMarkers")] - ButlerTaskGenerateIntroMarkers, - [JsonProperty("ButlerTaskGenerateVoiceActivity")] - ButlerTaskGenerateVoiceActivity, - [JsonProperty("CleanOldBundles")] - CleanOldBundles, - [JsonProperty("CleanOldCacheFiles")] - CleanOldCacheFiles, - [JsonProperty("DeepMediaAnalysis")] - DeepMediaAnalysis, - [JsonProperty("GarbageCollectBlobs")] - GarbageCollectBlobs, - [JsonProperty("GarbageCollectLibraryMedia")] - GarbageCollectLibraryMedia, - [JsonProperty("GenerateBlurHashes")] - GenerateBlurHashes, - [JsonProperty("GenerateChapterThumbs")] - GenerateChapterThumbs, - [JsonProperty("GenerateMediaIndexFiles")] - GenerateMediaIndexFiles, - [JsonProperty("LoudnessAnalysis")] - LoudnessAnalysis, - [JsonProperty("MusicAnalysis")] - MusicAnalysis, - [JsonProperty("OptimizeDatabase")] - OptimizeDatabase, - [JsonProperty("RefreshEpgGuides")] - RefreshEpgGuides, - [JsonProperty("RefreshLibraries")] - RefreshLibraries, - [JsonProperty("RefreshLocalMedia")] - RefreshLocalMedia, - [JsonProperty("RefreshPeriodicMetadata")] - RefreshPeriodicMetadata, - [JsonProperty("UpgradeMediaAnalysis")] - UpgradeMediaAnalysis, - } - - public static class TaskExtension - { - public static string Value(this Task value) - { - return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString(); - } - - public static Task ToEnum(this string value) - { - foreach(var field in typeof(Task).GetFields()) - { - var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false); - if (attributes.Length == 0) - { - continue; - } - - var attribute = attributes[0] as JsonPropertyAttribute; - if (attribute != null && attribute.PropertyName == value) - { - var enumVal = field.GetValue(null); - - if (enumVal is Task) - { - return (Task)enumVal; - } - } - } - - throw new Exception($"Unknown value {value} for enum Task"); - } - } - -} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/TranscodeImageRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/TranscodeImageRequest.cs index 8d2dcf3..c8c0208 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/TranscodeImageRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/TranscodeImageRequest.cs @@ -122,19 +122,19 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Indicates if image should be upscaled to the desired width/height. Defaults to false ///
[SpeakeasyMetadata("queryParam:style=form,explode=true,name=upscale")] - public BoolInt? Upscale { get; set; } + public BoolInt? Upscale { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Indicates if image should be scaled to fit the smaller dimension. By default (false) the image is scaled to fit within the width/height specified but if this parameter is true, it will allow overflowing one dimension to fit the other. Essentially it is making the width/height minimum sizes of the image or sizing the image to fill the entire width/height even if it overflows one dimension. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=minSize")] - public BoolInt? MinSize { get; set; } + public BoolInt? MinSize { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Obey the rotation values specified in EXIF data. Defaults to true. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=rotate")] - public BoolInt? Rotate { get; set; } + public BoolInt? Rotate { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Apply a blur to the image, Defaults to 0 (none) diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/TranscodeSubtitlesRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/TranscodeSubtitlesRequest.cs index 6578552..eec11e3 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/TranscodeSubtitlesRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/TranscodeSubtitlesRequest.cs @@ -120,43 +120,43 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Indicates the client supports ABR. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=autoAdjustQuality")] - public BoolInt? AutoAdjustQuality { get; set; } + public BoolInt? AutoAdjustQuality { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Indicates if the server should adjust subtitles based on Voice Activity Data. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=autoAdjustSubtitle")] - public BoolInt? AutoAdjustSubtitle { get; set; } + public BoolInt? AutoAdjustSubtitle { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Indicates the client supports direct playing the indicated content. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=directPlay")] - public BoolInt? DirectPlay { get; set; } + public BoolInt? DirectPlay { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Indicates the client supports direct streaming the video of the indicated content. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=directStream")] - public BoolInt? DirectStream { get; set; } + public BoolInt? DirectStream { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Indicates the client supports direct streaming the audio of the indicated content. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=directStreamAudio")] - public BoolInt? DirectStreamAudio { get; set; } + public BoolInt? DirectStreamAudio { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Indicates if resolution should be adjusted for orientation. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=disableResolutionRotation")] - public BoolInt? DisableResolutionRotation { get; set; } + public BoolInt? DisableResolutionRotation { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Ignore client profiles when determining if direct play is possible. Only has an effect when directPlay=1 and both mediaIndex and partIndex are specified and neither are -1 /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=hasMDE")] - public BoolInt? HasMDE { get; set; } + public BoolInt? HasMDE { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Network type of the client, can be used to help determine target bitrate. diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/Trials.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/Trials.cs new file mode 100644 index 0000000..46a4314 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/Trials.cs @@ -0,0 +1,17 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + public class Trials + { + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/UpdateHubVisibilityRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/UpdateHubVisibilityRequest.cs index fcc7378..16330d3 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/UpdateHubVisibilityRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/UpdateHubVisibilityRequest.cs @@ -97,18 +97,18 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Whether this hub should be displayed in recommended /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=promotedToRecommended")] - public BoolInt? PromotedToRecommended { get; set; } + public BoolInt? PromotedToRecommended { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Whether this hub should be displayed in admin's home /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=promotedToOwnHome")] - public BoolInt? PromotedToOwnHome { get; set; } + public BoolInt? PromotedToOwnHome { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// Whether this hub should be displayed in shared user's home /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=promotedToSharedHome")] - public BoolInt? PromotedToSharedHome { get; set; } + public BoolInt? PromotedToSharedHome { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/UpdateItemsRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/UpdateItemsRequest.cs index 4ffafbb..fd4fd3f 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/UpdateItemsRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/UpdateItemsRequest.cs @@ -106,7 +106,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Set the specified field to locked (or unlocked if set to 0) /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=field.locked")] - public BoolInt? FieldLocked { get; set; } + public BoolInt? FieldLocked { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; /// /// This field is treated specially by albums or artists and may be used for implicit reparenting. diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/UploadPlaylistRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/UploadPlaylistRequest.cs index 88abaae..98df2f4 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/UploadPlaylistRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/UploadPlaylistRequest.cs @@ -91,6 +91,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Force overwriting of duplicate playlists. By default, a playlist file uploaded with the same path will overwrite the existing playlist. The `force` argument is used to disable overwriting. If the `force` argument is set to 0, a new playlist will be created suffixed with the date and time that the duplicate was uploaded. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=force")] - public BoolInt? Force { get; set; } + public BoolInt? Force { get; set; } = LukeHagar.PlexAPI.SDK.Models.Components.BoolInt.False; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/User.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/User.cs new file mode 100644 index 0000000..b675e02 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/User.cs @@ -0,0 +1,116 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System.Collections.Generic; + + public class User + { + + /// + /// User's unique ID. + /// + [JsonProperty("id")] + public long Id { get; set; } = default!; + + /// + /// User's display name. + /// + [JsonProperty("title")] + public string Title { get; set; } = default!; + + /// + /// User's username. + /// + [JsonProperty("username")] + public string Username { get; set; } = default!; + + /// + /// User's email address. + /// + [JsonProperty("email")] + public string Email { get; set; } = default!; + + /// + /// ID of the user's recommendation playlist. + /// + [JsonProperty("recommendationsPlaylistId")] + public string? RecommendationsPlaylistId { get; set; } = null; + + /// + /// URL to the user's avatar image. + /// + [JsonProperty("thumb")] + public string Thumb { get; set; } = default!; + + [JsonProperty("protected")] + public Protected? Protected { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.Protected.Disable; + + [JsonProperty("home")] + public Home? Home { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.Home.Disable; + + [JsonProperty("allowTuners")] + public AllowTuners? AllowTuners { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.AllowTuners.Disable; + + [JsonProperty("allowSync")] + public AllowSync? AllowSync { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.AllowSync.Disable; + + [JsonProperty("allowCameraUpload")] + public AllowCameraUpload? AllowCameraUpload { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.AllowCameraUpload.Disable; + + [JsonProperty("allowChannels")] + public AllowChannels? AllowChannels { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.AllowChannels.Disable; + + [JsonProperty("allowSubtitleAdmin")] + public AllowSubtitleAdmin? AllowSubtitleAdmin { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.AllowSubtitleAdmin.Disable; + + /// + /// Filters applied for all content. + /// + [JsonProperty("filterAll")] + public string? FilterAll { get; set; } = null; + + /// + /// Filters applied for movies. + /// + [JsonProperty("filterMovies")] + public string? FilterMovies { get; set; } = null; + + /// + /// Filters applied for music. + /// + [JsonProperty("filterMusic")] + public string? FilterMusic { get; set; } = null; + + /// + /// Filters applied for photos. + /// + [JsonProperty("filterPhotos")] + public string? FilterPhotos { get; set; } = null; + + /// + /// Filters applied for television. + /// + [JsonProperty("filterTelevision")] + public string? FilterTelevision { get; set; } + + [JsonProperty("restricted")] + public Restricted? Restricted { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.Restricted.Disable; + + /// + /// List of servers owned by the user. + /// + [JsonProperty("Server")] + public List Server { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/VoiceSearchHubsRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/VoiceSearchHubsRequest.cs index 7f4ed1a..b76196b 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/VoiceSearchHubsRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/VoiceSearchHubsRequest.cs @@ -88,10 +88,26 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public string Query { get; set; } = default!; /// - /// The metadata type to filter by + /// The type of media to retrieve or filter by.
+ /// + /// + ///
+ /// 1 = movie
+ /// 2 = show
+ /// 3 = season
+ /// 4 = episode
+ /// 5 = artist
+ /// 6 = album
+ /// 7 = track
+ /// 8 = photo_album
+ /// 9 = photo
+ ///
+ /// E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries
+ /// + ///
///
[SpeakeasyMetadata("queryParam:style=form,explode=true,name=type")] - public long? Type { get; set; } + public MediaType? Type { get; set; } /// /// The number of items to return per hub. 3 if not specified diff --git a/LukeHagar/PlexAPI/SDK/PlayQueue.cs b/LukeHagar/PlexAPI/SDK/PlayQueue.cs index 36db1c4..00f454d 100644 --- a/LukeHagar/PlexAPI/SDK/PlayQueue.cs +++ b/LukeHagar/PlexAPI/SDK/PlayQueue.cs @@ -133,10 +133,11 @@ namespace LukeHagar.PlexAPI.SDK public class PlayQueue: IPlayQueue { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public PlayQueue(SDKConfig config) { @@ -162,7 +163,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/playQueues", request); + var urlString = URLBuilder.Build(baseUrl, "/playQueues", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -267,7 +268,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/playQueues/{playQueueId}", request); + var urlString = URLBuilder.Build(baseUrl, "/playQueues/{playQueueId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -372,7 +373,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/playQueues/{playQueueId}", request); + var urlString = URLBuilder.Build(baseUrl, "/playQueues/{playQueueId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -477,7 +478,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/playQueues/{playQueueId}/items", request); + var urlString = URLBuilder.Build(baseUrl, "/playQueues/{playQueueId}/items", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -582,7 +583,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/playQueues/{playQueueId}/reset", request); + var urlString = URLBuilder.Build(baseUrl, "/playQueues/{playQueueId}/reset", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -687,7 +688,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/playQueues/{playQueueId}/shuffle", request); + var urlString = URLBuilder.Build(baseUrl, "/playQueues/{playQueueId}/shuffle", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -792,7 +793,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/playQueues/{playQueueId}/unshuffle", request); + var urlString = URLBuilder.Build(baseUrl, "/playQueues/{playQueueId}/unshuffle", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -897,7 +898,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/playQueues/{playQueueId}/items/{playQueueItemId}", request); + var urlString = URLBuilder.Build(baseUrl, "/playQueues/{playQueueId}/items/{playQueueItemId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1002,7 +1003,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/playQueues/{playQueueId}/items/{playQueueItemId}/move", request); + var urlString = URLBuilder.Build(baseUrl, "/playQueues/{playQueueId}/items/{playQueueItemId}/move", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/Playlist.cs b/LukeHagar/PlexAPI/SDK/Playlist.cs index 0343b4b..05d08e7 100644 --- a/LukeHagar/PlexAPI/SDK/Playlist.cs +++ b/LukeHagar/PlexAPI/SDK/Playlist.cs @@ -63,10 +63,11 @@ namespace LukeHagar.PlexAPI.SDK public class Playlist: IPlaylist { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public Playlist(SDKConfig config) { @@ -88,7 +89,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/playlists", request); + var urlString = URLBuilder.Build(baseUrl, "/playlists", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -193,7 +194,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistId}", request); + var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -298,7 +299,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistId}/items", request); + var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistId}/items", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/Plex.cs b/LukeHagar/PlexAPI/SDK/Plex.cs new file mode 100644 index 0000000..f7d445d --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Plex.cs @@ -0,0 +1,176 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK +{ + using LukeHagar.PlexAPI.SDK.Hooks; + using LukeHagar.PlexAPI.SDK.Models.Components; + using LukeHagar.PlexAPI.SDK.Models.Errors; + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using LukeHagar.PlexAPI.SDK.Utils.Retries; + using Newtonsoft.Json; + using System; + using System.Collections.Generic; + using System.Net.Http; + using System.Net.Http.Headers; + using System.Threading.Tasks; + + public interface IPlex + { + + /// + /// Get Server Resources + /// + /// + /// Get Plex server access tokens and server connections + /// + /// + Task GetServerResourcesAsync(GetServerResourcesRequest? request = null, string? serverUrl = null); + } + + public class Plex: IPlex + { + /// + /// List of server URLs available for the get-server-resources operation. + /// + public static readonly string[] GetServerResourcesServerList = { + "https://plex.tv/api/v2", + }; + public SDKConfig SDKConfiguration { get; private set; } + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; + + public Plex(SDKConfig config) + { + SDKConfiguration = config; + } + + public async Task GetServerResourcesAsync(GetServerResourcesRequest? request = null, string? serverUrl = null) + { + request.Accepts ??= SDKConfiguration.Accepts; + request.ClientIdentifier ??= SDKConfiguration.ClientIdentifier; + + string baseUrl = Utilities.TemplateUrl(GetServerResourcesServerList[0], new Dictionary(){ + }); + if (serverUrl != null) + { + baseUrl = serverUrl; + } + var urlString = URLBuilder.Build(baseUrl, "/resources", request, null); + + var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); + HeaderSerializer.PopulateHeaders(ref httpRequest, request); + + if (SDKConfiguration.SecuritySource != null) + { + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); + } + + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "get-server-resources", null, SDKConfiguration.SecuritySource); + + httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); + + HttpResponseMessage httpResponse; + try + { + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); + int _statusCode = (int)httpResponse.StatusCode; + + if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) + { + var _httpResponse = await this.SDKConfiguration.Hooks.AfterErrorAsync(new AfterErrorContext(hookCtx), httpResponse, null); + if (_httpResponse != null) + { + httpResponse = _httpResponse; + } + } + } + catch (Exception error) + { + var _httpResponse = await this.SDKConfiguration.Hooks.AfterErrorAsync(new AfterErrorContext(hookCtx), null, error); + if (_httpResponse != null) + { + httpResponse = _httpResponse; + } + else + { + throw; + } + } + + httpResponse = await this.SDKConfiguration.Hooks.AfterSuccessAsync(new AfterSuccessContext(hookCtx), httpResponse); + + var contentType = httpResponse.Content.Headers.ContentType?.MediaType; + int responseStatusCode = (int)httpResponse.StatusCode; + if(responseStatusCode == 200) + { + if(Utilities.IsContentTypeMatch("application/json", contentType)) + { + var httpResponseBody = await httpResponse.Content.ReadAsStringAsync(); + List obj; + try + { + obj = ResponseBodyDeserializer.DeserializeNotNull>(httpResponseBody, NullValueHandling.Include); + } + catch (Exception ex) + { + throw new ResponseValidationException("Failed to deserialize response body into List.", httpResponse, httpResponseBody, ex); + } + + var response = new GetServerResourcesResponse() + { + StatusCode = responseStatusCode, + ContentType = contentType, + RawResponse = httpResponse + }; + response.PlexDevices = obj; + return response; + } + + throw new Models.Errors.SDKException("Unknown content type received", httpResponse, await httpResponse.Content.ReadAsStringAsync()); + } + else if(responseStatusCode == 401) + { + if(Utilities.IsContentTypeMatch("application/json", contentType)) + { + var httpResponseBody = await httpResponse.Content.ReadAsStringAsync(); + GetServerResourcesUnauthorizedPayload payload; + try + { + payload = ResponseBodyDeserializer.DeserializeNotNull(httpResponseBody, NullValueHandling.Include); + } + catch (Exception ex) + { + throw new ResponseValidationException("Failed to deserialize response body into GetServerResourcesUnauthorizedPayload.", httpResponse, httpResponseBody, ex); + } + + payload.RawResponse = httpResponse; + throw new GetServerResourcesUnauthorized(payload, httpResponse, httpResponseBody); + } + + throw new Models.Errors.SDKException("Unknown content type received", httpResponse, await httpResponse.Content.ReadAsStringAsync()); + } + else if(responseStatusCode == 400 || responseStatusCode >= 400 && responseStatusCode < 500) + { + throw new Models.Errors.SDKException("API error occurred", httpResponse, await httpResponse.Content.ReadAsStringAsync()); + } + else if(responseStatusCode >= 500 && responseStatusCode < 600) + { + throw new Models.Errors.SDKException("API error occurred", httpResponse, await httpResponse.Content.ReadAsStringAsync()); + } + + throw new Models.Errors.SDKException("Unknown status code received", httpResponse, await httpResponse.Content.ReadAsStringAsync()); + } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/PlexAPI.cs b/LukeHagar/PlexAPI/SDK/PlexAPI.cs index c36b561..56944c8 100644 --- a/LukeHagar/PlexAPI/SDK/PlexAPI.cs +++ b/LukeHagar/PlexAPI/SDK/PlexAPI.cs @@ -233,6 +233,9 @@ namespace LukeHagar.PlexAPI.SDK /// /// public IUpdater Updater { get; } + public IAuthentication Authentication { get; } + public IUsers Users { get; } + public IPlex Plex { get; } /// /// The actual content of the media provider @@ -250,10 +253,10 @@ namespace LukeHagar.PlexAPI.SDK { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public IGeneral General { get; private set; } public IEvents Events { get; private set; } public IPreferences Preferences { get; private set; } @@ -280,6 +283,9 @@ namespace LukeHagar.PlexAPI.SDK public IUltraBlur UltraBlur { get; private set; } public IStatus Status { get; private set; } public IUpdater Updater { get; private set; } + public IAuthentication Authentication { get; private set; } + public IUsers Users { get; private set; } + public IPlex Plex { get; private set; } public IContent Content { get; private set; } public ILibraryCollections LibraryCollections { get; private set; } @@ -340,6 +346,12 @@ namespace LukeHagar.PlexAPI.SDK Updater = new Updater(SDKConfiguration); + Authentication = new Authentication(SDKConfiguration); + + Users = new Users(SDKConfiguration); + + Plex = new Plex(SDKConfiguration); + Content = new Content(SDKConfiguration); LibraryCollections = new LibraryCollections(SDKConfiguration); @@ -504,6 +516,12 @@ namespace LukeHagar.PlexAPI.SDK Updater = new Updater(SDKConfiguration); + Authentication = new Authentication(SDKConfiguration); + + Users = new Users(SDKConfiguration); + + Plex = new Plex(SDKConfiguration); + Content = new Content(SDKConfiguration); LibraryCollections = new LibraryCollections(SDKConfiguration); diff --git a/LukeHagar/PlexAPI/SDK/Preferences.cs b/LukeHagar/PlexAPI/SDK/Preferences.cs index f3cc14c..ec95a2f 100644 --- a/LukeHagar/PlexAPI/SDK/Preferences.cs +++ b/LukeHagar/PlexAPI/SDK/Preferences.cs @@ -62,10 +62,11 @@ namespace LukeHagar.PlexAPI.SDK public class Preferences: IPreferences { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public Preferences(SDKConfig config) { @@ -180,7 +181,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/:/prefs", request); + var urlString = URLBuilder.Build(baseUrl, "/:/prefs", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -263,7 +264,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/:/prefs/get", request); + var urlString = URLBuilder.Build(baseUrl, "/:/prefs/get", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/Provider.cs b/LukeHagar/PlexAPI/SDK/Provider.cs index f59aac3..b41a878 100644 --- a/LukeHagar/PlexAPI/SDK/Provider.cs +++ b/LukeHagar/PlexAPI/SDK/Provider.cs @@ -71,10 +71,11 @@ namespace LukeHagar.PlexAPI.SDK public class Provider: IProvider { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public Provider(SDKConfig config) { @@ -189,7 +190,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/media/providers", request); + var urlString = URLBuilder.Build(baseUrl, "/media/providers", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -347,7 +348,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/media/providers/{provider}", request); + var urlString = URLBuilder.Build(baseUrl, "/media/providers/{provider}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/Rate.cs b/LukeHagar/PlexAPI/SDK/Rate.cs index 0ec2489..11cc1b7 100644 --- a/LukeHagar/PlexAPI/SDK/Rate.cs +++ b/LukeHagar/PlexAPI/SDK/Rate.cs @@ -44,10 +44,11 @@ namespace LukeHagar.PlexAPI.SDK public class Rate: IRate { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public Rate(SDKConfig config) { @@ -73,7 +74,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/:/rate", request); + var urlString = URLBuilder.Build(baseUrl, "/:/rate", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/SDKConfig.cs b/LukeHagar/PlexAPI/SDK/SDKConfig.cs index 1894957..a7365eb 100644 --- a/LukeHagar/PlexAPI/SDK/SDKConfig.cs +++ b/LukeHagar/PlexAPI/SDK/SDKConfig.cs @@ -86,7 +86,7 @@ namespace LukeHagar.PlexAPI.SDK DeviceVendor = null; DeviceName = null; Marketplace = null; - UserAgent = "speakeasy-sdk/csharp 0.19.1 2.753.1 1.1.1 LukeHagar.PlexAPI.SDK"; + UserAgent = "speakeasy-sdk/csharp 0.20.0 2.767.2 1.1.1 LukeHagar.PlexAPI.SDK"; SecuritySource = null; Hooks = new SDKHooks(); RetryConfig = null; diff --git a/LukeHagar/PlexAPI/SDK/Search.cs b/LukeHagar/PlexAPI/SDK/Search.cs index 6604c4e..90b8741 100644 --- a/LukeHagar/PlexAPI/SDK/Search.cs +++ b/LukeHagar/PlexAPI/SDK/Search.cs @@ -72,10 +72,11 @@ namespace LukeHagar.PlexAPI.SDK public class Search: ISearch { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public Search(SDKConfig config) { @@ -101,7 +102,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/hubs/search", request); + var urlString = URLBuilder.Build(baseUrl, "/hubs/search", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -206,7 +207,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/hubs/search/voice", request); + var urlString = URLBuilder.Build(baseUrl, "/hubs/search/voice", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/Status.cs b/LukeHagar/PlexAPI/SDK/Status.cs index 7d9c77b..a4bf661 100644 --- a/LukeHagar/PlexAPI/SDK/Status.cs +++ b/LukeHagar/PlexAPI/SDK/Status.cs @@ -90,10 +90,11 @@ namespace LukeHagar.PlexAPI.SDK public class Status: IStatus { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public Status(SDKConfig config) { @@ -293,7 +294,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/status/sessions/history/all", request); + var urlString = URLBuilder.Build(baseUrl, "/status/sessions/history/all", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -398,7 +399,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/status/sessions/terminate", request); + var urlString = URLBuilder.Build(baseUrl, "/status/sessions/terminate", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -485,7 +486,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/status/sessions/history/{historyId}", request); + var urlString = URLBuilder.Build(baseUrl, "/status/sessions/history/{historyId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -590,7 +591,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/status/sessions/history/{historyId}", request); + var urlString = URLBuilder.Build(baseUrl, "/status/sessions/history/{historyId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/Subscriptions.cs b/LukeHagar/PlexAPI/SDK/Subscriptions.cs index 40903e6..0235d6a 100644 --- a/LukeHagar/PlexAPI/SDK/Subscriptions.cs +++ b/LukeHagar/PlexAPI/SDK/Subscriptions.cs @@ -134,10 +134,11 @@ namespace LukeHagar.PlexAPI.SDK public class Subscriptions: ISubscriptions { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public Subscriptions(SDKConfig config) { @@ -159,7 +160,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/media/subscriptions", request); + var urlString = URLBuilder.Build(baseUrl, "/media/subscriptions", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -260,7 +261,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/media/subscriptions", request); + var urlString = URLBuilder.Build(baseUrl, "/media/subscriptions", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -521,7 +522,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/media/subscriptions/template", request); + var urlString = URLBuilder.Build(baseUrl, "/media/subscriptions/template", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -626,7 +627,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/media/grabbers/operations/{operationId}", request); + var urlString = URLBuilder.Build(baseUrl, "/media/grabbers/operations/{operationId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -713,7 +714,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/media/subscriptions/{subscriptionId}", request); + var urlString = URLBuilder.Build(baseUrl, "/media/subscriptions/{subscriptionId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -800,7 +801,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/media/subscriptions/{subscriptionId}", request); + var urlString = URLBuilder.Build(baseUrl, "/media/subscriptions/{subscriptionId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -905,7 +906,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/media/subscriptions/{subscriptionId}", request); + var urlString = URLBuilder.Build(baseUrl, "/media/subscriptions/{subscriptionId}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -1010,7 +1011,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/media/subscriptions/{subscriptionId}/move", request); + var urlString = URLBuilder.Build(baseUrl, "/media/subscriptions/{subscriptionId}/move", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/Timeline.cs b/LukeHagar/PlexAPI/SDK/Timeline.cs index c5a51c1..fe4ef52 100644 --- a/LukeHagar/PlexAPI/SDK/Timeline.cs +++ b/LukeHagar/PlexAPI/SDK/Timeline.cs @@ -65,10 +65,11 @@ namespace LukeHagar.PlexAPI.SDK public class Timeline: ITimeline { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public Timeline(SDKConfig config) { @@ -94,7 +95,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/:/scrobble", request); + var urlString = URLBuilder.Build(baseUrl, "/:/scrobble", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -177,7 +178,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/:/timeline", request); + var urlString = URLBuilder.Build(baseUrl, "/:/timeline", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -282,7 +283,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/:/unscrobble", request); + var urlString = URLBuilder.Build(baseUrl, "/:/unscrobble", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/Transcoder.cs b/LukeHagar/PlexAPI/SDK/Transcoder.cs index 7987803..13e26fb 100644 --- a/LukeHagar/PlexAPI/SDK/Transcoder.cs +++ b/LukeHagar/PlexAPI/SDK/Transcoder.cs @@ -80,10 +80,11 @@ namespace LukeHagar.PlexAPI.SDK public class Transcoder: ITranscoder { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public Transcoder(SDKConfig config) { @@ -105,7 +106,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/photo/:/transcode", request); + var urlString = URLBuilder.Build(baseUrl, "/photo/:/transcode", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -221,7 +222,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/{transcodeType}/:/transcode/universal/decision", request); + var urlString = URLBuilder.Build(baseUrl, "/{transcodeType}/:/transcode/universal/decision", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -326,7 +327,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/{transcodeType}/:/transcode/universal/fallback", request); + var urlString = URLBuilder.Build(baseUrl, "/{transcodeType}/:/transcode/universal/fallback", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -413,7 +414,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/{transcodeType}/:/transcode/universal/subtitles", request); + var urlString = URLBuilder.Build(baseUrl, "/{transcodeType}/:/transcode/universal/subtitles", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -500,7 +501,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/{transcodeType}/:/transcode/universal/start.{extension}", request); + var urlString = URLBuilder.Build(baseUrl, "/{transcodeType}/:/transcode/universal/start.{extension}", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/UltraBlur.cs b/LukeHagar/PlexAPI/SDK/UltraBlur.cs index ddc8656..bd4f722 100644 --- a/LukeHagar/PlexAPI/SDK/UltraBlur.cs +++ b/LukeHagar/PlexAPI/SDK/UltraBlur.cs @@ -53,10 +53,11 @@ namespace LukeHagar.PlexAPI.SDK public class UltraBlur: IUltraBlur { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public UltraBlur(SDKConfig config) { @@ -78,7 +79,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/services/ultrablur/colors", request); + var urlString = URLBuilder.Build(baseUrl, "/services/ultrablur/colors", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -179,7 +180,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/services/ultrablur/image", request); + var urlString = URLBuilder.Build(baseUrl, "/services/ultrablur/image", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/Updater.cs b/LukeHagar/PlexAPI/SDK/Updater.cs index c425dc9..6e92248 100644 --- a/LukeHagar/PlexAPI/SDK/Updater.cs +++ b/LukeHagar/PlexAPI/SDK/Updater.cs @@ -72,10 +72,11 @@ namespace LukeHagar.PlexAPI.SDK public class Updater: IUpdater { public SDKConfig SDKConfiguration { get; private set; } - private const string _language = "csharp"; - private const string _sdkVersion = "0.19.1"; - private const string _sdkGenVersion = "2.753.1"; - private const string _openapiDocVersion = "1.1.1"; + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; public Updater(SDKConfig config) { @@ -97,7 +98,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/updater/apply", request); + var urlString = URLBuilder.Build(baseUrl, "/updater/apply", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); @@ -180,7 +181,7 @@ namespace LukeHagar.PlexAPI.SDK request.Marketplace ??= SDKConfiguration.Marketplace; string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); - var urlString = URLBuilder.Build(baseUrl, "/updater/check", request); + var urlString = URLBuilder.Build(baseUrl, "/updater/check", request, null); var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString); httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); diff --git a/LukeHagar/PlexAPI/SDK/Users.cs b/LukeHagar/PlexAPI/SDK/Users.cs new file mode 100644 index 0000000..62d6ee6 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Users.cs @@ -0,0 +1,207 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK +{ + using LukeHagar.PlexAPI.SDK.Hooks; + using LukeHagar.PlexAPI.SDK.Models.Components; + using LukeHagar.PlexAPI.SDK.Models.Errors; + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using LukeHagar.PlexAPI.SDK.Utils.Retries; + using Newtonsoft.Json; + using System; + using System.Collections.Generic; + using System.Net.Http; + using System.Net.Http.Headers; + using System.Threading.Tasks; + + public interface IUsers + { + + /// + /// Get list of all connected users + /// + /// + /// Get list of all users that are friends and have library access with the provided Plex authentication token + /// + /// + Task GetUsersAsync(GetUsersRequest? request = null, string? serverUrl = null); + } + + public class Users: IUsers + { + /// + /// List of server URLs available for the get-users operation. + /// + public static readonly string[] GetUsersServerList = { + "https://plex.tv/api", + }; + public SDKConfig SDKConfiguration { get; private set; } + + private const string _language = Constants.Language; + private const string _sdkVersion = Constants.SdkVersion; + private const string _sdkGenVersion = Constants.SdkGenVersion; + private const string _openapiDocVersion = Constants.OpenApiDocVersion; + + public Users(SDKConfig config) + { + SDKConfiguration = config; + } + + public async Task GetUsersAsync(GetUsersRequest? request = null, string? serverUrl = null) + { + request.Accepts ??= SDKConfiguration.Accepts; + request.ClientIdentifier ??= SDKConfiguration.ClientIdentifier; + request.Product ??= SDKConfiguration.Product; + request.Version ??= SDKConfiguration.Version; + request.Platform ??= SDKConfiguration.Platform; + request.PlatformVersion ??= SDKConfiguration.PlatformVersion; + request.Device ??= SDKConfiguration.Device; + request.Model ??= SDKConfiguration.Model; + request.DeviceVendor ??= SDKConfiguration.DeviceVendor; + request.DeviceName ??= SDKConfiguration.DeviceName; + request.Marketplace ??= SDKConfiguration.Marketplace; + + string baseUrl = Utilities.TemplateUrl(GetUsersServerList[0], new Dictionary(){ + }); + if (serverUrl != null) + { + baseUrl = serverUrl; + } + + var urlString = baseUrl + "/users"; + + var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); + httpRequest.Headers.Add("user-agent", SDKConfiguration.UserAgent); + HeaderSerializer.PopulateHeaders(ref httpRequest, request); + + if (SDKConfiguration.SecuritySource != null) + { + httpRequest = new SecurityMetadata(SDKConfiguration.SecuritySource).Apply(httpRequest); + } + + var hookCtx = new HookContext(SDKConfiguration, baseUrl, "get-users", null, SDKConfiguration.SecuritySource); + + httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); + + HttpResponseMessage httpResponse; + try + { + httpResponse = await SDKConfiguration.Client.SendAsync(httpRequest); + int _statusCode = (int)httpResponse.StatusCode; + + if (_statusCode == 400 || _statusCode == 401 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) + { + var _httpResponse = await this.SDKConfiguration.Hooks.AfterErrorAsync(new AfterErrorContext(hookCtx), httpResponse, null); + if (_httpResponse != null) + { + httpResponse = _httpResponse; + } + } + } + catch (Exception error) + { + var _httpResponse = await this.SDKConfiguration.Hooks.AfterErrorAsync(new AfterErrorContext(hookCtx), null, error); + if (_httpResponse != null) + { + httpResponse = _httpResponse; + } + else + { + throw; + } + } + + httpResponse = await this.SDKConfiguration.Hooks.AfterSuccessAsync(new AfterSuccessContext(hookCtx), httpResponse); + + var contentType = httpResponse.Content.Headers.ContentType?.MediaType; + int responseStatusCode = (int)httpResponse.StatusCode; + if(responseStatusCode == 200) + { + if(Utilities.IsContentTypeMatch("application/json", contentType)) + { + var httpResponseBody = await httpResponse.Content.ReadAsStringAsync(); + GetUsersResponseBody obj; + try + { + obj = ResponseBodyDeserializer.DeserializeNotNull(httpResponseBody, NullValueHandling.Include); + } + catch (Exception ex) + { + throw new ResponseValidationException("Failed to deserialize response body into GetUsersResponseBody.", httpResponse, httpResponseBody, ex); + } + + var response = new GetUsersResponse() + { + StatusCode = responseStatusCode, + ContentType = contentType, + RawResponse = httpResponse + }; + response.Object = obj; + return response; + } + + throw new Models.Errors.SDKException("Unknown content type received", httpResponse, await httpResponse.Content.ReadAsStringAsync()); + } + else if(responseStatusCode == 400) + { + if(Utilities.IsContentTypeMatch("application/json", contentType)) + { + var httpResponseBody = await httpResponse.Content.ReadAsStringAsync(); + GetUsersBadRequestPayload payload; + try + { + payload = ResponseBodyDeserializer.DeserializeNotNull(httpResponseBody, NullValueHandling.Include); + } + catch (Exception ex) + { + throw new ResponseValidationException("Failed to deserialize response body into GetUsersBadRequestPayload.", httpResponse, httpResponseBody, ex); + } + + payload.RawResponse = httpResponse; + throw new GetUsersBadRequest(payload, httpResponse, httpResponseBody); + } + + throw new Models.Errors.SDKException("Unknown content type received", httpResponse, await httpResponse.Content.ReadAsStringAsync()); + } + else if(responseStatusCode == 401) + { + if(Utilities.IsContentTypeMatch("application/json", contentType)) + { + var httpResponseBody = await httpResponse.Content.ReadAsStringAsync(); + GetUsersUnauthorizedPayload payload; + try + { + payload = ResponseBodyDeserializer.DeserializeNotNull(httpResponseBody, NullValueHandling.Include); + } + catch (Exception ex) + { + throw new ResponseValidationException("Failed to deserialize response body into GetUsersUnauthorizedPayload.", httpResponse, httpResponseBody, ex); + } + + payload.RawResponse = httpResponse; + throw new GetUsersUnauthorized(payload, httpResponse, httpResponseBody); + } + + throw new Models.Errors.SDKException("Unknown content type received", httpResponse, await httpResponse.Content.ReadAsStringAsync()); + } + else if(responseStatusCode >= 400 && responseStatusCode < 500) + { + throw new Models.Errors.SDKException("API error occurred", httpResponse, await httpResponse.Content.ReadAsStringAsync()); + } + else if(responseStatusCode >= 500 && responseStatusCode < 600) + { + throw new Models.Errors.SDKException("API error occurred", httpResponse, await httpResponse.Content.ReadAsStringAsync()); + } + + throw new Models.Errors.SDKException("Unknown status code received", httpResponse, await httpResponse.Content.ReadAsStringAsync()); + } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Utils/Constants.cs b/LukeHagar/PlexAPI/SDK/Utils/Constants.cs new file mode 100644 index 0000000..6e46d42 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Utils/Constants.cs @@ -0,0 +1,38 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Utils +{ + /// + /// SDK constants for version information and language identification. + /// + public static class Constants + { + /// + /// The language identifier for this SDK. + /// + public const string Language = "csharp"; + + /// + /// The version of the SDK. + /// + public const string SdkVersion = "0.20.0"; + + /// + /// The version of the SDK generator used to create this SDK. + /// + public const string SdkGenVersion = "2.767.2"; + + /// + /// The version of the OpenAPI document used to generate this SDK. + /// + public const string OpenApiDocVersion = "1.1.1"; + } +} + diff --git a/LukeHagar/PlexAPI/SDK/Utils/URLBuilder.cs b/LukeHagar/PlexAPI/SDK/Utils/URLBuilder.cs index a797bd7..870e675 100644 --- a/LukeHagar/PlexAPI/SDK/Utils/URLBuilder.cs +++ b/LukeHagar/PlexAPI/SDK/Utils/URLBuilder.cs @@ -17,7 +17,7 @@ namespace LukeHagar.PlexAPI.SDK.Utils internal static class URLBuilder { - public static string Build(string baseUrl, string relativeUrl, object? request) + public static string Build(string baseUrl, string relativeUrl, object? request, List? allowEmptyValue = null) { var url = baseUrl; @@ -37,7 +37,7 @@ namespace LukeHagar.PlexAPI.SDK.Utils var parameters = GetPathParameters(request); url = ReplaceParameters(url, parameters); - var queryParams = SerializeQueryParams(TrySerializeQueryParams(request)); + var queryParams = SerializeQueryParams(TrySerializeQueryParams(request, allowEmptyValue)); if (queryParams != "") { url += $"?{queryParams}"; @@ -90,10 +90,6 @@ namespace LukeHagar.PlexAPI.SDK.Utils { var val = prop.GetValue(request); - if (val == null) - { - continue; - } if (prop.GetCustomAttribute()?.GetRequestMetadata() != null) { @@ -107,6 +103,13 @@ namespace LukeHagar.PlexAPI.SDK.Utils continue; } + // Handle null values and empty arrays as empty query parameters + if (val == null || (Utilities.IsList(val) && ((IList)val).Count == 0)) + { + parameters.Add(metadata.Name ?? prop.Name, ""); + continue; + } + if (metadata.Serialization != null) { switch (metadata.Serialization) @@ -147,7 +150,7 @@ namespace LukeHagar.PlexAPI.SDK.Utils return parameters; } - private static Dictionary> TrySerializeQueryParams(object? request) + private static Dictionary> TrySerializeQueryParams(object? request, List? allowEmptyValue = null) { var parameters = new Dictionary>(); @@ -161,9 +164,20 @@ namespace LukeHagar.PlexAPI.SDK.Utils foreach (var prop in props) { var val = prop.GetValue(request); - + var metadata = prop.GetCustomAttribute()?.GetQueryParamMetadata(); + if (val == null) { + // If this parameter is in allowEmptyValue and val is null, include it as empty + if (metadata != null && allowEmptyValue?.Contains(metadata.Name ?? prop.Name) == true) + { + var paramName = metadata.Name ?? prop.Name; + if (!parameters.ContainsKey(paramName)) + { + parameters.Add(paramName, new List()); + } + parameters[paramName].Add(""); + } continue; } @@ -172,7 +186,6 @@ namespace LukeHagar.PlexAPI.SDK.Utils continue; } - var metadata = prop.GetCustomAttribute()?.GetQueryParamMetadata(); if (metadata == null) { continue; @@ -207,7 +220,8 @@ namespace LukeHagar.PlexAPI.SDK.Utils metadata.Name ?? prop.Name, val, metadata.Explode, - "," + ",", + allowEmptyValue ); foreach (var key in formParams.Keys) { @@ -245,7 +259,8 @@ namespace LukeHagar.PlexAPI.SDK.Utils metadata.Name ?? prop.Name, val, metadata.Explode, - "|" + "|", + allowEmptyValue ); foreach (var key in pipeParams.Keys) { @@ -358,7 +373,8 @@ namespace LukeHagar.PlexAPI.SDK.Utils string parentName, object value, bool explode, - string delimiter + string delimiter, + List? allowEmptyValue = null ) { var parameters = new Dictionary>(); @@ -458,32 +474,45 @@ namespace LukeHagar.PlexAPI.SDK.Utils { var values = new List(); var items = new List(); + var list = (IList)value; - foreach (var item in (IList)value) - { - if (explode) - { - values.Add(Utilities.ValueToString(item)); - } - else - { - items.Add(Utilities.ValueToString(item)); - } - } - - if (items.Count > 0) - { - values.Add(string.Join(delimiter, items)); - } - - foreach (var val in values) + // Handle empty arrays - add empty parameter if allowEmptyValue includes this parameter + if (list.Count == 0 && allowEmptyValue?.Contains(parentName) == true) { if (!parameters.ContainsKey(parentName)) { parameters.Add(parentName, new List()); } + parameters[parentName].Add(""); + } + else + { + foreach (var item in list) + { + if (explode) + { + values.Add(Utilities.ValueToString(item)); + } + else + { + items.Add(Utilities.ValueToString(item)); + } + } - parameters[parentName].Add(val); + if (items.Count > 0) + { + values.Add(string.Join(delimiter, items)); + } + + foreach (var val in values) + { + if (!parameters.ContainsKey(parentName)) + { + parameters.Add(parentName, new List()); + } + + parameters[parentName].Add(val); + } } } else @@ -493,7 +522,16 @@ namespace LukeHagar.PlexAPI.SDK.Utils parameters.Add(parentName, new List()); } - parameters[parentName].Add(Utilities.ValueToString(value)); + // Handle null values and empty strings for allowEmptyValue parameters + var stringValue = Utilities.ValueToString(value); + if ((value == null || stringValue == "") && allowEmptyValue?.Contains(parentName) == true) + { + parameters[parentName].Add(""); + } + else + { + parameters[parentName].Add(stringValue); + } } return parameters; diff --git a/NUGET.md b/NUGET.md index cecd90e..2d9aad3 100644 --- a/NUGET.md +++ b/NUGET.md @@ -32,13 +32,13 @@ StartTranscodeSessionRequest req = new StartTranscodeSessionRequest() { AdvancedSubtitles = LukeHagar.PlexAPI.SDK.Models.Components.AdvancedSubtitles.Burn, AudioBoost = 50, AudioChannelCount = 5, - AutoAdjustQuality = BoolInt.One, - AutoAdjustSubtitle = BoolInt.One, - DirectPlay = BoolInt.One, - DirectStream = BoolInt.One, - DirectStreamAudio = BoolInt.One, - DisableResolutionRotation = BoolInt.One, - HasMDE = BoolInt.One, + AutoAdjustQuality = BoolInt.True, + AutoAdjustSubtitle = BoolInt.True, + DirectPlay = BoolInt.True, + DirectStream = BoolInt.True, + DirectStreamAudio = BoolInt.True, + DisableResolutionRotation = BoolInt.True, + HasMDE = BoolInt.True, Location = StartTranscodeSessionQueryParamLocation.Wan, MediaBufferSize = 102400, MediaIndex = 0, @@ -118,6 +118,8 @@ var res = await sdk.General.GetServerInfoAsync(req); | `RawResponse` | *HttpResponseMessage* | HTTP response object | | `Body` | *string* | HTTP response body | +Some exceptions in this SDK include an additional `Payload` field, which will contain deserialized custom error data when present. Possible exceptions are listed in the [Error Classes](#error-classes) section. + ### Example ```csharp @@ -125,6 +127,7 @@ using LukeHagar.PlexAPI.SDK; using LukeHagar.PlexAPI.SDK.Models.Components; using LukeHagar.PlexAPI.SDK.Models.Errors; using LukeHagar.PlexAPI.SDK.Models.Requests; +using System.Collections.Generic; var sdk = new PlexAPI( accepts: LukeHagar.PlexAPI.SDK.Models.Components.Accepts.ApplicationXml, @@ -143,9 +146,9 @@ var sdk = new PlexAPI( try { - GetServerInfoRequest req = new GetServerInfoRequest() {}; + GetTokenDetailsRequest req = new GetTokenDetailsRequest() {}; - var res = await sdk.General.GetServerInfoAsync(req); + var res = await sdk.Authentication.GetTokenDetailsAsync(req); // handle response } @@ -160,6 +163,20 @@ catch (PlexAPIError ex) // all SDK exceptions inherit from PlexAPIError int statusCode = ex.StatusCode; string? contentType = ex.ContentType; var responseBody = ex.Body; + + if (ex is GetTokenDetailsBadRequest) // different exceptions may be thrown depending on the method + { + // Check error data fields + GetTokenDetailsBadRequestPayload payload = ex.Payload; + List Errors = payload.Errors; + HttpResponseMessage RawResponse = payload.RawResponse; + } + + // An underlying cause may be provided + if (ex.InnerException != null) + { + Exception cause = ex.InnerException; + } } catch (System.Net.Http.HttpRequestException ex) { @@ -172,13 +189,22 @@ catch (System.Net.Http.HttpRequestException ex) **Primary exception:** * [`PlexAPIError`](./LukeHagar/PlexAPI/SDK/Models/Errors/PlexAPIError.cs): The base class for HTTP error responses. -
Less common exceptions (2) +
Less common exceptions (9) * [`System.Net.Http.HttpRequestException`](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httprequestexception): Network connectivity error. For more details about the underlying cause, inspect the `ex.InnerException`. * Inheriting from [`PlexAPIError`](./LukeHagar/PlexAPI/SDK/Models/Errors/PlexAPIError.cs): + * [`GetTokenDetailsBadRequest`](./LukeHagar/PlexAPI/SDK/Models/Errors/GetTokenDetailsBadRequest.cs): Bad Request - A parameter was not specified, or was specified incorrectly. Status code `400`. Applicable to 1 of 240 methods.* + * [`PostUsersSignInDataBadRequest`](./LukeHagar/PlexAPI/SDK/Models/Errors/PostUsersSignInDataBadRequest.cs): Bad Request - A parameter was not specified, or was specified incorrectly. Status code `400`. Applicable to 1 of 240 methods.* + * [`GetUsersBadRequest`](./LukeHagar/PlexAPI/SDK/Models/Errors/GetUsersBadRequest.cs): Bad Request - A parameter was not specified, or was specified incorrectly. Status code `400`. Applicable to 1 of 240 methods.* + * [`GetTokenDetailsUnauthorized`](./LukeHagar/PlexAPI/SDK/Models/Errors/GetTokenDetailsUnauthorized.cs): Unauthorized - Returned if the X-Plex-Token is missing from the header or query. Status code `401`. Applicable to 1 of 240 methods.* + * [`PostUsersSignInDataUnauthorized`](./LukeHagar/PlexAPI/SDK/Models/Errors/PostUsersSignInDataUnauthorized.cs): Unauthorized - Returned if the X-Plex-Token is missing from the header or query. Status code `401`. Applicable to 1 of 240 methods.* + * [`GetUsersUnauthorized`](./LukeHagar/PlexAPI/SDK/Models/Errors/GetUsersUnauthorized.cs): Unauthorized - Returned if the X-Plex-Token is missing from the header or query. Status code `401`. Applicable to 1 of 240 methods.* + * [`GetServerResourcesUnauthorized`](./LukeHagar/PlexAPI/SDK/Models/Errors/GetServerResourcesUnauthorized.cs): Unauthorized - Returned if the X-Plex-Token is missing from the header or query. Status code `401`. Applicable to 1 of 240 methods.* * [`ResponseValidationError`](./LukeHagar/PlexAPI/SDK/Models/Errors/ResponseValidationError.cs): Thrown when the response data could not be deserialized into the expected type.
+ +\* Refer to the [relevant documentation](#available-resources-and-operations) to determine whether an exception applies to a specific operation. @@ -266,6 +292,39 @@ GetServerInfoRequest req = new GetServerInfoRequest() {}; var res = await sdk.General.GetServerInfoAsync(req); +// handle response +``` + +### Override Server URL Per-Operation + +The server URL can also be overridden on a per-operation basis, provided a server list was specified for the operation. For example: +```csharp +using LukeHagar.PlexAPI.SDK; +using LukeHagar.PlexAPI.SDK.Models.Components; +using LukeHagar.PlexAPI.SDK.Models.Requests; + +var sdk = new PlexAPI( + accepts: LukeHagar.PlexAPI.SDK.Models.Components.Accepts.ApplicationXml, + clientIdentifier: "abc123", + product: "Plex for Roku", + version: "2.4.1", + platform: "Roku", + platformVersion: "4.3 build 1057", + device: "Roku 3", + model: "4200X", + deviceVendor: "Roku", + deviceName: "Living Room TV", + marketplace: "googlePlay", + token: "" +); + +GetTokenDetailsRequest req = new GetTokenDetailsRequest() {}; + +var res = await sdk.Authentication.GetTokenDetailsAsync( + request: req, + serverUrl: "https://plex.tv/api/v2" +); + // handle response ``` diff --git a/README.md b/README.md index 1d7432f..0acb77c 100644 --- a/README.md +++ b/README.md @@ -56,13 +56,13 @@ StartTranscodeSessionRequest req = new StartTranscodeSessionRequest() { AdvancedSubtitles = LukeHagar.PlexAPI.SDK.Models.Components.AdvancedSubtitles.Burn, AudioBoost = 50, AudioChannelCount = 5, - AutoAdjustQuality = BoolInt.One, - AutoAdjustSubtitle = BoolInt.One, - DirectPlay = BoolInt.One, - DirectStream = BoolInt.One, - DirectStreamAudio = BoolInt.One, - DisableResolutionRotation = BoolInt.One, - HasMDE = BoolInt.One, + AutoAdjustQuality = BoolInt.True, + AutoAdjustSubtitle = BoolInt.True, + DirectPlay = BoolInt.True, + DirectStream = BoolInt.True, + DirectStreamAudio = BoolInt.True, + DisableResolutionRotation = BoolInt.True, + HasMDE = BoolInt.True, Location = StartTranscodeSessionQueryParamLocation.Wan, MediaBufferSize = 102400, MediaIndex = 0, @@ -99,6 +99,11 @@ var res = await sdk.Transcoder.StartTranscodeSessionAsync(req); * [ListActivities](docs/sdks/activities/README.md#listactivities) - Get all activities * [CancelActivity](docs/sdks/activities/README.md#cancelactivity) - Cancel a running activity +### [Authentication](docs/sdks/authentication/README.md) + +* [GetTokenDetails](docs/sdks/authentication/README.md#gettokendetails) - Get Token Details +* [PostUsersSignInData](docs/sdks/authentication/README.md#postuserssignindata) - Get User Sign In Data + ### [Butler](docs/sdks/butler/README.md) * [StopTasks](docs/sdks/butler/README.md#stoptasks) - Stop all Butler tasks @@ -345,6 +350,10 @@ var res = await sdk.Transcoder.StartTranscodeSessionAsync(req); * [DeletePlayQueueItem](docs/sdks/playqueue/README.md#deleteplayqueueitem) - Delete an item from a play queue * [MovePlayQueueItem](docs/sdks/playqueue/README.md#moveplayqueueitem) - Move an item in a play queue +### [Plex](docs/sdks/plex/README.md) + +* [GetServerResources](docs/sdks/plex/README.md#getserverresources) - Get Server Resources + ### [Preferences](docs/sdks/preferences/README.md) * [GetAllPreferences](docs/sdks/preferences/README.md#getallpreferences) - Get all preferences @@ -414,6 +423,10 @@ var res = await sdk.Transcoder.StartTranscodeSessionAsync(req); * [CheckUpdates](docs/sdks/updater/README.md#checkupdates) - Checking for updates * [GetUpdatesStatus](docs/sdks/updater/README.md#getupdatesstatus) - Querying status of updates +### [Users](docs/sdks/users/README.md) + +* [GetUsers](docs/sdks/users/README.md#getusers) - Get list of all connected users +
@@ -502,6 +515,39 @@ GetServerInfoRequest req = new GetServerInfoRequest() {}; var res = await sdk.General.GetServerInfoAsync(req); +// handle response +``` + +### Override Server URL Per-Operation + +The server URL can also be overridden on a per-operation basis, provided a server list was specified for the operation. For example: +```csharp +using LukeHagar.PlexAPI.SDK; +using LukeHagar.PlexAPI.SDK.Models.Components; +using LukeHagar.PlexAPI.SDK.Models.Requests; + +var sdk = new PlexAPI( + accepts: LukeHagar.PlexAPI.SDK.Models.Components.Accepts.ApplicationXml, + clientIdentifier: "abc123", + product: "Plex for Roku", + version: "2.4.1", + platform: "Roku", + platformVersion: "4.3 build 1057", + device: "Roku 3", + model: "4200X", + deviceVendor: "Roku", + deviceName: "Living Room TV", + marketplace: "googlePlay", + token: "" +); + +GetTokenDetailsRequest req = new GetTokenDetailsRequest() {}; + +var res = await sdk.Authentication.GetTokenDetailsAsync( + request: req, + serverUrl: "https://plex.tv/api/v2" +); + // handle response ``` @@ -560,6 +606,8 @@ var res = await sdk.General.GetServerInfoAsync(req); | `RawResponse` | *HttpResponseMessage* | HTTP response object | | `Body` | *string* | HTTP response body | +Some exceptions in this SDK include an additional `Payload` field, which will contain deserialized custom error data when present. Possible exceptions are listed in the [Error Classes](#error-classes) section. + ### Example ```csharp @@ -567,6 +615,7 @@ using LukeHagar.PlexAPI.SDK; using LukeHagar.PlexAPI.SDK.Models.Components; using LukeHagar.PlexAPI.SDK.Models.Errors; using LukeHagar.PlexAPI.SDK.Models.Requests; +using System.Collections.Generic; var sdk = new PlexAPI( accepts: LukeHagar.PlexAPI.SDK.Models.Components.Accepts.ApplicationXml, @@ -585,9 +634,9 @@ var sdk = new PlexAPI( try { - GetServerInfoRequest req = new GetServerInfoRequest() {}; + GetTokenDetailsRequest req = new GetTokenDetailsRequest() {}; - var res = await sdk.General.GetServerInfoAsync(req); + var res = await sdk.Authentication.GetTokenDetailsAsync(req); // handle response } @@ -602,6 +651,20 @@ catch (PlexAPIError ex) // all SDK exceptions inherit from PlexAPIError int statusCode = ex.StatusCode; string? contentType = ex.ContentType; var responseBody = ex.Body; + + if (ex is GetTokenDetailsBadRequest) // different exceptions may be thrown depending on the method + { + // Check error data fields + GetTokenDetailsBadRequestPayload payload = ex.Payload; + List Errors = payload.Errors; + HttpResponseMessage RawResponse = payload.RawResponse; + } + + // An underlying cause may be provided + if (ex.InnerException != null) + { + Exception cause = ex.InnerException; + } } catch (System.Net.Http.HttpRequestException ex) { @@ -614,13 +677,22 @@ catch (System.Net.Http.HttpRequestException ex) **Primary exception:** * [`PlexAPIError`](./LukeHagar/PlexAPI/SDK/Models/Errors/PlexAPIError.cs): The base class for HTTP error responses. -
Less common exceptions (2) +
Less common exceptions (9) * [`System.Net.Http.HttpRequestException`](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httprequestexception): Network connectivity error. For more details about the underlying cause, inspect the `ex.InnerException`. * Inheriting from [`PlexAPIError`](./LukeHagar/PlexAPI/SDK/Models/Errors/PlexAPIError.cs): + * [`GetTokenDetailsBadRequest`](./LukeHagar/PlexAPI/SDK/Models/Errors/GetTokenDetailsBadRequest.cs): Bad Request - A parameter was not specified, or was specified incorrectly. Status code `400`. Applicable to 1 of 240 methods.* + * [`PostUsersSignInDataBadRequest`](./LukeHagar/PlexAPI/SDK/Models/Errors/PostUsersSignInDataBadRequest.cs): Bad Request - A parameter was not specified, or was specified incorrectly. Status code `400`. Applicable to 1 of 240 methods.* + * [`GetUsersBadRequest`](./LukeHagar/PlexAPI/SDK/Models/Errors/GetUsersBadRequest.cs): Bad Request - A parameter was not specified, or was specified incorrectly. Status code `400`. Applicable to 1 of 240 methods.* + * [`GetTokenDetailsUnauthorized`](./LukeHagar/PlexAPI/SDK/Models/Errors/GetTokenDetailsUnauthorized.cs): Unauthorized - Returned if the X-Plex-Token is missing from the header or query. Status code `401`. Applicable to 1 of 240 methods.* + * [`PostUsersSignInDataUnauthorized`](./LukeHagar/PlexAPI/SDK/Models/Errors/PostUsersSignInDataUnauthorized.cs): Unauthorized - Returned if the X-Plex-Token is missing from the header or query. Status code `401`. Applicable to 1 of 240 methods.* + * [`GetUsersUnauthorized`](./LukeHagar/PlexAPI/SDK/Models/Errors/GetUsersUnauthorized.cs): Unauthorized - Returned if the X-Plex-Token is missing from the header or query. Status code `401`. Applicable to 1 of 240 methods.* + * [`GetServerResourcesUnauthorized`](./LukeHagar/PlexAPI/SDK/Models/Errors/GetServerResourcesUnauthorized.cs): Unauthorized - Returned if the X-Plex-Token is missing from the header or query. Status code `401`. Applicable to 1 of 240 methods.* * [`ResponseValidationError`](./LukeHagar/PlexAPI/SDK/Models/Errors/ResponseValidationError.cs): Thrown when the response data could not be deserialized into the expected type.
+ +\* Refer to the [relevant documentation](#available-resources-and-operations) to determine whether an exception applies to a specific operation. diff --git a/RELEASES.md b/RELEASES.md index 20892c5..1af562b 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -664,4 +664,14 @@ Based on: ### Generated - [csharp v0.19.1] . ### Releases -- [NuGet v0.19.1] https://www.nuget.org/packages/LukeHagar.PlexAPI.SDK/0.19.1 - . \ No newline at end of file +- [NuGet v0.19.1] https://www.nuget.org/packages/LukeHagar.PlexAPI.SDK/0.19.1 - . + +## 2025-12-01 00:30:57 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.665.0 (2.767.2) https://github.com/speakeasy-api/speakeasy +### Generated +- [csharp v0.20.0] . +### Releases +- [NuGet v0.20.0] https://www.nuget.org/packages/LukeHagar.PlexAPI.SDK/0.20.0 - . \ No newline at end of file diff --git a/USAGE.md b/USAGE.md index 8e17b82..0c8b32d 100644 --- a/USAGE.md +++ b/USAGE.md @@ -25,13 +25,13 @@ StartTranscodeSessionRequest req = new StartTranscodeSessionRequest() { AdvancedSubtitles = LukeHagar.PlexAPI.SDK.Models.Components.AdvancedSubtitles.Burn, AudioBoost = 50, AudioChannelCount = 5, - AutoAdjustQuality = BoolInt.One, - AutoAdjustSubtitle = BoolInt.One, - DirectPlay = BoolInt.One, - DirectStream = BoolInt.One, - DirectStreamAudio = BoolInt.One, - DisableResolutionRotation = BoolInt.One, - HasMDE = BoolInt.One, + AutoAdjustQuality = BoolInt.True, + AutoAdjustSubtitle = BoolInt.True, + DirectPlay = BoolInt.True, + DirectStream = BoolInt.True, + DirectStreamAudio = BoolInt.True, + DisableResolutionRotation = BoolInt.True, + HasMDE = BoolInt.True, Location = StartTranscodeSessionQueryParamLocation.Wan, MediaBufferSize = 102400, MediaIndex = 0, diff --git a/codeSamples.yaml b/codeSamples.yaml index 512571e..20343d3 100644 --- a/codeSamples.yaml +++ b/codeSamples.yaml @@ -237,9 +237,9 @@ actions: PlayQueueItemID = "123", Time = 0, Duration = 10000, - Continuing = BoolInt.One, + Continuing = BoolInt.True, Updated = 14200000, - Offline = BoolInt.One, + Offline = BoolInt.True, TimeToFirstFrame = 1000, TimeStalled = 1000, Bandwidth = 100, @@ -400,7 +400,7 @@ actions: var res = await sdk.Butler.StartTasksAsync(); // handle response - - target: $["paths"]["/butler/{task}"]["delete"] + - target: $["paths"]["/butler/{butlerTask}"]["delete"] update: x-codeSamples: - lang: csharp @@ -426,13 +426,13 @@ actions: ); StopTaskRequest req = new StopTaskRequest() { - Task = Task.CleanOldBundles, + ButlerTask = ButlerTask.CleanOldBundles, }; var res = await sdk.Butler.StopTaskAsync(req); // handle response - - target: $["paths"]["/butler/{task}"]["post"] + - target: $["paths"]["/butler/{butlerTask}"]["post"] update: x-codeSamples: - lang: csharp @@ -458,7 +458,7 @@ actions: ); StartTaskRequest req = new StartTaskRequest() { - Task = PathParamTask.RefreshLocalMedia, + ButlerTask = PathParamButlerTask.RefreshLocalMedia, }; var res = await sdk.Butler.StartTaskAsync(req); @@ -545,13 +545,13 @@ actions: AdvancedSubtitles = LukeHagar.PlexAPI.SDK.Models.Components.AdvancedSubtitles.Burn, AudioBoost = 50, AudioChannelCount = 5, - AutoAdjustQuality = BoolInt.One, - AutoAdjustSubtitle = BoolInt.One, - DirectPlay = BoolInt.One, - DirectStream = BoolInt.One, - DirectStreamAudio = BoolInt.One, - DisableResolutionRotation = BoolInt.One, - HasMDE = BoolInt.One, + AutoAdjustQuality = BoolInt.True, + AutoAdjustSubtitle = BoolInt.True, + DirectPlay = BoolInt.True, + DirectStream = BoolInt.True, + DirectStreamAudio = BoolInt.True, + DisableResolutionRotation = BoolInt.True, + HasMDE = BoolInt.True, Location = LukeHagar.PlexAPI.SDK.Models.Components.Location.Wan, MediaBufferSize = 102400, MediaIndex = 0, @@ -810,7 +810,7 @@ actions: ); GetAllHubsRequest req = new GetAllHubsRequest() { - OnlyTransient = BoolInt.One, + OnlyTransient = BoolInt.True, }; var res = await sdk.Hubs.GetAllHubsAsync(req); @@ -910,7 +910,7 @@ actions: GetMetadataHubsRequest req = new GetMetadataHubsRequest() { MetadataId = 605482, - OnlyTransient = BoolInt.One, + OnlyTransient = BoolInt.True, }; var res = await sdk.Hubs.GetMetadataHubsAsync(req); @@ -943,7 +943,7 @@ actions: GetPostplayHubsRequest req = new GetPostplayHubsRequest() { MetadataId = 441419, - OnlyTransient = BoolInt.One, + OnlyTransient = BoolInt.True, }; var res = await sdk.Hubs.GetPostplayHubsAsync(req); @@ -976,7 +976,7 @@ actions: GetRelatedHubsRequest req = new GetRelatedHubsRequest() { MetadataId = 8858, - OnlyTransient = BoolInt.One, + OnlyTransient = BoolInt.True, }; var res = await sdk.Hubs.GetRelatedHubsAsync(req); @@ -1072,6 +1072,7 @@ actions: VoiceSearchHubsRequest req = new VoiceSearchHubsRequest() { Query = "", + Type = MediaType.TvShow, }; var res = await sdk.Search.VoiceSearchHubsAsync(req); @@ -1104,7 +1105,7 @@ actions: GetSectionHubsRequest req = new GetSectionHubsRequest() { SectionId = 336924, - OnlyTransient = BoolInt.One, + OnlyTransient = BoolInt.True, }; var res = await sdk.Hubs.GetSectionHubsAsync(req); @@ -1202,9 +1203,9 @@ actions: CreateCustomHubRequest req = new CreateCustomHubRequest() { SectionId = 869922, MetadataItemId = 703843, - PromotedToRecommended = BoolInt.One, - PromotedToOwnHome = BoolInt.One, - PromotedToSharedHome = BoolInt.One, + PromotedToRecommended = BoolInt.True, + PromotedToOwnHome = BoolInt.True, + PromotedToSharedHome = BoolInt.True, }; var res = await sdk.Hubs.CreateCustomHubAsync(req); @@ -1304,9 +1305,9 @@ actions: UpdateHubVisibilityRequest req = new UpdateHubVisibilityRequest() { SectionId = 341650, Identifier = "", - PromotedToRecommended = BoolInt.One, - PromotedToOwnHome = BoolInt.One, - PromotedToSharedHome = BoolInt.One, + PromotedToRecommended = BoolInt.True, + PromotedToOwnHome = BoolInt.True, + PromotedToSharedHome = BoolInt.True, }; var res = await sdk.Hubs.UpdateHubVisibilityAsync(req); @@ -1350,7 +1351,13 @@ actions: token: "" ); - GetLibraryItemsRequest req = new GetLibraryItemsRequest() {}; + GetLibraryItemsRequest req = new GetLibraryItemsRequest() { + MediaQuery = new MediaQuery() { + Type = MediaType.Episode, + SourceType = 2, + Sort = "duration:desc,index", + }, + }; var res = await sdk.Library.GetLibraryItemsAsync(req); @@ -1410,6 +1417,7 @@ actions: CreateCollectionRequest req = new CreateCollectionRequest() { SectionId = "", + Type = MediaType.TvShow, }; var res = await sdk.Collections.CreateCollectionAsync(req); @@ -1607,8 +1615,8 @@ actions: IngestTransientItemRequest req = new IngestTransientItemRequest() { Url = "file:///storage%2Femulated%2F0%2FArcher-S01E01.mkv", VirtualFilePath = "/Avatar.mkv", - ComputeHashes = BoolInt.One, - IngestNonMatches = BoolInt.One, + ComputeHashes = BoolInt.True, + IngestNonMatches = BoolInt.True, }; var res = await sdk.Library.IngestTransientItemAsync(req); @@ -1640,9 +1648,10 @@ actions: ); GetLibraryMatchesRequest req = new GetLibraryMatchesRequest() { - IncludeFullMetadata = BoolInt.One, - IncludeAncestorMetadata = BoolInt.One, - IncludeAlternateMetadataSources = BoolInt.One, + Type = MediaType.TvShow, + IncludeFullMetadata = BoolInt.True, + IncludeAncestorMetadata = BoolInt.True, + IncludeAlternateMetadataSources = BoolInt.True, }; var res = await sdk.Library.GetLibraryMatchesAsync(req); @@ -1708,7 +1717,7 @@ actions: GetAugmentationStatusRequest req = new GetAugmentationStatusRequest() { AugmentationId = "", - Wait = BoolInt.One, + Wait = BoolInt.True, }; var res = await sdk.Library.GetAugmentationStatusAsync(req); @@ -1741,7 +1750,7 @@ actions: DeleteMetadataItemRequest req = new DeleteMetadataItemRequest() { Ids = "", - Proxy = BoolInt.One, + Proxy = BoolInt.True, }; var res = await sdk.Library.DeleteMetadataItemAsync(req); @@ -1775,14 +1784,14 @@ actions: GetMetadataItemRequest req = new GetMetadataItemRequest() { Ids = new List() {}, - AsyncCheckFiles = BoolInt.One, - AsyncRefreshLocalMediaAgent = BoolInt.One, - AsyncRefreshAnalysis = BoolInt.One, - CheckFiles = BoolInt.One, - SkipRefresh = BoolInt.One, - CheckFileAvailability = BoolInt.One, - AsyncAugmentMetadata = BoolInt.One, - AugmentCount = BoolInt.One, + AsyncCheckFiles = BoolInt.True, + AsyncRefreshLocalMediaAgent = BoolInt.True, + AsyncRefreshAnalysis = BoolInt.True, + CheckFiles = BoolInt.True, + SkipRefresh = BoolInt.True, + CheckFileAvailability = BoolInt.True, + AsyncAugmentMetadata = BoolInt.True, + AugmentCount = BoolInt.True, }; var res = await sdk.Content.GetMetadataItemAsync(req); @@ -1947,7 +1956,7 @@ actions: GenerateThumbsRequest req = new GenerateThumbsRequest() { Ids = "", - Force = BoolInt.One, + Force = BoolInt.True, }; var res = await sdk.Library.GenerateThumbsAsync(req); @@ -1980,8 +1989,8 @@ actions: DetectCreditsRequest req = new DetectCreditsRequest() { Ids = "", - Force = BoolInt.One, - Manual = BoolInt.One, + Force = BoolInt.True, + Manual = BoolInt.True, }; var res = await sdk.Library.DetectCreditsAsync(req); @@ -2111,7 +2120,7 @@ actions: StartBifGenerationRequest req = new StartBifGenerationRequest() { Ids = "", - Force = BoolInt.One, + Force = BoolInt.True, }; var res = await sdk.Library.StartBifGenerationAsync(req); @@ -2144,7 +2153,7 @@ actions: DetectIntrosRequest req = new DetectIntrosRequest() { Ids = "", - Force = BoolInt.One, + Force = BoolInt.True, }; var res = await sdk.Library.DetectIntrosAsync(req); @@ -2313,7 +2322,7 @@ actions: ListMatchesRequest req = new ListMatchesRequest() { Ids = "", - Manual = BoolInt.One, + Manual = BoolInt.True, }; var res = await sdk.Library.ListMatchesAsync(req); @@ -2347,7 +2356,7 @@ actions: DeleteMediaItemRequest req = new DeleteMediaItemRequest() { Ids = "", MediaItem = "", - Proxy = BoolInt.One, + Proxy = BoolInt.True, }; var res = await sdk.Library.DeleteMediaItemAsync(req); @@ -2476,7 +2485,7 @@ actions: RefreshItemsMetadataRequest req = new RefreshItemsMetadataRequest() { Ids = "", - MarkUpdated = BoolInt.One, + MarkUpdated = BoolInt.True, }; var res = await sdk.Library.RefreshItemsMetadataAsync(req); @@ -2605,8 +2614,8 @@ actions: AddSubtitlesRequest req = new AddSubtitlesRequest() { Ids = "", - Forced = BoolInt.One, - HearingImpaired = BoolInt.One, + Forced = BoolInt.True, + HearingImpaired = BoolInt.True, }; var res = await sdk.Library.AddSubtitlesAsync(req); @@ -2735,8 +2744,8 @@ actions: DetectVoiceActivityRequest req = new DetectVoiceActivityRequest() { Ids = "", - Force = BoolInt.One, - Manual = BoolInt.One, + Force = BoolInt.True, + Manual = BoolInt.True, }; var res = await sdk.Library.DetectVoiceActivityAsync(req); @@ -2868,7 +2877,7 @@ actions: ); OptimizeDatabaseRequest req = new OptimizeDatabaseRequest() { - Async = BoolInt.One, + Async = BoolInt.True, }; var res = await sdk.Library.OptimizeDatabaseAsync(req); @@ -2901,7 +2910,7 @@ actions: SetStreamSelectionRequest req = new SetStreamSelectionRequest() { PartId = 360489, - AllParts = BoolInt.One, + AllParts = BoolInt.True, }; var res = await sdk.Library.SetStreamSelectionAsync(req); @@ -3003,7 +3012,7 @@ actions: PartId = 877105, Changestamp = 970622, Filename = "example.file", - Download = BoolInt.One, + Download = BoolInt.True, }; var res = await sdk.Library.GetMediaPartAsync(req); @@ -3159,8 +3168,8 @@ actions: "O:\fatboy\Media\My Music", }, Prefs = new QueryParamPrefs() {}, - Relative = BoolInt.One, - ImportFromiTunes = BoolInt.One, + Relative = BoolInt.True, + ImportFromiTunes = BoolInt.True, }; var res = await sdk.Library.AddSectionAsync(req); @@ -3269,7 +3278,7 @@ actions: DeleteLibrarySectionRequest req = new DeleteLibrarySectionRequest() { SectionId = "", - Async = BoolInt.One, + Async = BoolInt.True, }; var res = await sdk.Library.DeleteLibrarySectionAsync(req); @@ -3302,7 +3311,7 @@ actions: GetLibraryDetailsRequest req = new GetLibraryDetailsRequest() { SectionId = "", - IncludeDetails = BoolInt.One, + IncludeDetails = BoolInt.True, }; var res = await sdk.Library.GetLibraryDetailsAsync(req); @@ -3405,6 +3414,13 @@ actions: ); ListContentRequest req = new ListContentRequest() { + MediaQuery = new MediaQuery() { + Type = MediaType.Episode, + SourceType = 2, + Sort = "duration:desc,index", + }, + IncludeMeta = BoolInt.True, + IncludeGuids = BoolInt.True, SectionId = "", }; @@ -3438,7 +3454,7 @@ actions: UpdateItemsRequest req = new UpdateItemsRequest() { SectionId = "", - FieldLocked = BoolInt.One, + FieldLocked = BoolInt.True, }; var res = await sdk.Library.UpdateItemsAsync(req); @@ -3567,6 +3583,11 @@ actions: AutocompleteRequest req = new AutocompleteRequest() { SectionId = 942007, + MediaQuery = new MediaQuery() { + Type = MediaType.Episode, + SourceType = 2, + Sort = "duration:desc,index", + }, }; var res = await sdk.Library.AutocompleteAsync(req); @@ -3696,6 +3717,11 @@ actions: GetCollectionsRequest req = new GetCollectionsRequest() { SectionId = 348838, + MediaQuery = new MediaQuery() { + Type = MediaType.Episode, + SourceType = 2, + Sort = "duration:desc,index", + }, }; var res = await sdk.Library.GetCollectionsAsync(req); @@ -3728,6 +3754,11 @@ actions: GetCommonRequest req = new GetCommonRequest() { SectionId = 298154, + MediaQuery = new MediaQuery() { + Type = MediaType.Episode, + SourceType = 2, + Sort = "duration:desc,index", + }, }; var res = await sdk.Library.GetCommonAsync(req); @@ -3761,6 +3792,11 @@ actions: GetSectionImageRequest req = new GetSectionImageRequest() { SectionId = 925611, UpdatedAt = 117413, + MediaQuery = new MediaQuery() { + Type = MediaType.Episode, + SourceType = 2, + Sort = "duration:desc,index", + }, }; var res = await sdk.Library.GetSectionImageAsync(req); @@ -3891,6 +3927,11 @@ actions: GetFirstCharactersRequest req = new GetFirstCharactersRequest() { SectionId = 3947, + MediaQuery = new MediaQuery() { + Type = MediaType.Episode, + SourceType = 2, + Sort = "duration:desc,index", + }, }; var res = await sdk.Library.GetFirstCharactersAsync(req); @@ -4182,7 +4223,7 @@ actions: RefreshSectionRequest req = new RefreshSectionRequest() { SectionId = 450300, - Force = BoolInt.One, + Force = BoolInt.True, }; var res = await sdk.Library.RefreshSectionAsync(req); @@ -4281,7 +4322,7 @@ actions: GetStreamRequest req = new GetStreamRequest() { StreamId = 314506, Ext = "", - AutoAdjustSubtitle = BoolInt.One, + AutoAdjustSubtitle = BoolInt.True, }; var res = await sdk.Library.GetStreamAsync(req); @@ -4409,7 +4450,9 @@ actions: token: "" ); - GetTagsRequest req = new GetTagsRequest() {}; + GetTagsRequest req = new GetTagsRequest() { + Type = MediaType.TvShow, + }; var res = await sdk.Library.GetTagsAsync(req); @@ -5477,7 +5520,7 @@ actions: ModifyDeviceRequest req = new ModifyDeviceRequest() { DeviceId = 879135, - Enabled = BoolInt.One, + Enabled = BoolInt.True, }; var res = await sdk.Devices.ModifyDeviceAsync(req); @@ -5846,8 +5889,8 @@ actions: ); GetAllSubscriptionsRequest req = new GetAllSubscriptionsRequest() { - IncludeGrabs = BoolInt.One, - IncludeStorage = BoolInt.One, + IncludeGrabs = BoolInt.True, + IncludeStorage = BoolInt.True, }; var res = await sdk.Subscriptions.GetAllSubscriptionsAsync(req); @@ -6009,8 +6052,8 @@ actions: GetSubscriptionRequest req = new GetSubscriptionRequest() { SubscriptionId = 186713, - IncludeGrabs = BoolInt.One, - IncludeStorage = BoolInt.One, + IncludeGrabs = BoolInt.True, + IncludeStorage = BoolInt.True, }; var res = await sdk.Subscriptions.GetSubscriptionAsync(req); @@ -6109,9 +6152,9 @@ actions: TranscodeImageRequest req = new TranscodeImageRequest() { Url = "/library/metadata/265/thumb/1715112705", Background = "#ff5522", - Upscale = BoolInt.One, - MinSize = BoolInt.One, - Rotate = BoolInt.One, + Upscale = BoolInt.True, + MinSize = BoolInt.True, + Rotate = BoolInt.True, BlendColor = "#ff5522", }; @@ -6145,11 +6188,11 @@ actions: CreatePlayQueueRequest req = new CreatePlayQueueRequest() { Type = LukeHagar.PlexAPI.SDK.Models.Requests.Type.Audio, - Shuffle = BoolInt.One, - Repeat = BoolInt.One, - Continuous = BoolInt.One, - Recursive = BoolInt.One, - OnDeck = BoolInt.One, + Shuffle = BoolInt.True, + Repeat = BoolInt.True, + Continuous = BoolInt.True, + Recursive = BoolInt.True, + OnDeck = BoolInt.True, }; var res = await sdk.PlayQueue.CreatePlayQueueAsync(req); @@ -6182,9 +6225,9 @@ actions: GetPlayQueueRequest req = new GetPlayQueueRequest() { PlayQueueId = 210646, - Own = BoolInt.One, - IncludeBefore = BoolInt.One, - IncludeAfter = BoolInt.One, + Own = BoolInt.True, + IncludeBefore = BoolInt.True, + IncludeAfter = BoolInt.True, }; var res = await sdk.PlayQueue.GetPlayQueueAsync(req); @@ -6217,7 +6260,7 @@ actions: AddToPlayQueueRequest req = new AddToPlayQueueRequest() { PlayQueueId = 919248, - Next = BoolInt.One, + Next = BoolInt.True, }; var res = await sdk.PlayQueue.AddToPlayQueueAsync(req); @@ -6504,7 +6547,7 @@ actions: UploadPlaylistRequest req = new UploadPlaylistRequest() { Path = "/home/barkley/playlist.m3u", - Force = BoolInt.One, + Force = BoolInt.True, }; var res = await sdk.LibraryPlaylists.UploadPlaylistAsync(req); @@ -6900,6 +6943,31 @@ actions: var res = await sdk.LibraryPlaylists.MovePlaylistItemAsync(req); + // handle response + - target: $["paths"]["/resources"]["get"] + update: + x-codeSamples: + - lang: csharp + label: PlexCSharp + source: |- + using LukeHagar.PlexAPI.SDK; + using LukeHagar.PlexAPI.SDK.Models.Components; + using LukeHagar.PlexAPI.SDK.Models.Requests; + + var sdk = new PlexAPI( + accepts: LukeHagar.PlexAPI.SDK.Models.Components.Accepts.ApplicationXml, + clientIdentifier: "abc123", + token: "" + ); + + GetServerResourcesRequest req = new GetServerResourcesRequest() { + IncludeHttps = IncludeHttps.True, + IncludeRelay = IncludeRelay.True, + IncludeIPv6 = IncludeIPv6.True, + }; + + var res = await sdk.Plex.GetServerResourcesAsync(req); + // handle response - target: $["paths"]["/security/resources"]["get"] update: @@ -6928,7 +6996,7 @@ actions: GetSourceConnectionInformationRequest req = new GetSourceConnectionInformationRequest() { Source = "", - Refresh = BoolInt.One, + Refresh = BoolInt.True, }; var res = await sdk.General.GetSourceConnectionInformationAsync(req); @@ -7031,7 +7099,7 @@ actions: BottomLeft = "1c425d", Width = 1920, Height = 1080, - Noise = BoolInt.One, + Noise = BoolInt.True, }; var res = await sdk.UltraBlur.GetImageAsync(req); @@ -7245,8 +7313,8 @@ actions: ); ApplyUpdatesRequest req = new ApplyUpdatesRequest() { - Tonight = BoolInt.One, - Skip = BoolInt.One, + Tonight = BoolInt.True, + Skip = BoolInt.True, }; var res = await sdk.Updater.ApplyUpdatesAsync(req); @@ -7278,7 +7346,7 @@ actions: ); CheckUpdatesRequest req = new CheckUpdatesRequest() { - Download = BoolInt.One, + Download = BoolInt.True, }; var res = await sdk.Updater.CheckUpdatesAsync(req); @@ -7297,6 +7365,100 @@ actions: var res = await sdk.Updater.GetUpdatesStatusAsync(); + // handle response + - target: $["paths"]["/user"]["get"] + update: + x-codeSamples: + - lang: csharp + label: PlexCSharp + source: |- + using LukeHagar.PlexAPI.SDK; + using LukeHagar.PlexAPI.SDK.Models.Components; + using LukeHagar.PlexAPI.SDK.Models.Requests; + + var sdk = new PlexAPI( + accepts: LukeHagar.PlexAPI.SDK.Models.Components.Accepts.ApplicationXml, + clientIdentifier: "abc123", + product: "Plex for Roku", + version: "2.4.1", + platform: "Roku", + platformVersion: "4.3 build 1057", + device: "Roku 3", + model: "4200X", + deviceVendor: "Roku", + deviceName: "Living Room TV", + marketplace: "googlePlay", + token: "" + ); + + GetTokenDetailsRequest req = new GetTokenDetailsRequest() {}; + + var res = await sdk.Authentication.GetTokenDetailsAsync(req); + + // handle response + - target: $["paths"]["/users"]["get"] + update: + x-codeSamples: + - lang: csharp + label: PlexCSharp + source: |- + using LukeHagar.PlexAPI.SDK; + using LukeHagar.PlexAPI.SDK.Models.Components; + using LukeHagar.PlexAPI.SDK.Models.Requests; + + var sdk = new PlexAPI( + accepts: LukeHagar.PlexAPI.SDK.Models.Components.Accepts.ApplicationXml, + clientIdentifier: "abc123", + product: "Plex for Roku", + version: "2.4.1", + platform: "Roku", + platformVersion: "4.3 build 1057", + device: "Roku 3", + model: "4200X", + deviceVendor: "Roku", + deviceName: "Living Room TV", + marketplace: "googlePlay", + token: "" + ); + + GetUsersRequest req = new GetUsersRequest() {}; + + var res = await sdk.Users.GetUsersAsync(req); + + // handle response + - target: $["paths"]["/users/signin"]["post"] + update: + x-codeSamples: + - lang: csharp + label: PlexCSharp + source: |- + using LukeHagar.PlexAPI.SDK; + using LukeHagar.PlexAPI.SDK.Models.Requests; + + var sdk = new PlexAPI( + accepts: LukeHagar.PlexAPI.SDK.Models.Components.Accepts.ApplicationXml, + clientIdentifier: "abc123", + product: "Plex for Roku", + version: "2.4.1", + platform: "Roku", + platformVersion: "4.3 build 1057", + device: "Roku 3", + model: "4200X", + deviceVendor: "Roku", + deviceName: "Living Room TV", + marketplace: "googlePlay" + ); + + PostUsersSignInDataRequest req = new PostUsersSignInDataRequest() { + RequestBody = new PostUsersSignInDataRequestBody() { + Login = "username@email.com", + Password = "password123", + VerificationCode = "123456", + }, + }; + + var res = await sdk.Authentication.PostUsersSignInDataAsync(req); + // handle response - target: $["paths"]["/{transcodeType}/:/transcode/universal/decision"]["get"] update: @@ -7328,13 +7490,13 @@ actions: AdvancedSubtitles = LukeHagar.PlexAPI.SDK.Models.Components.AdvancedSubtitles.Burn, AudioBoost = 50, AudioChannelCount = 5, - AutoAdjustQuality = BoolInt.One, - AutoAdjustSubtitle = BoolInt.One, - DirectPlay = BoolInt.One, - DirectStream = BoolInt.One, - DirectStreamAudio = BoolInt.One, - DisableResolutionRotation = BoolInt.One, - HasMDE = BoolInt.One, + AutoAdjustQuality = BoolInt.True, + AutoAdjustSubtitle = BoolInt.True, + DirectPlay = BoolInt.True, + DirectStream = BoolInt.True, + DirectStreamAudio = BoolInt.True, + DisableResolutionRotation = BoolInt.True, + HasMDE = BoolInt.True, Location = LukeHagar.PlexAPI.SDK.Models.Requests.Location.Wan, MediaBufferSize = 102400, MediaIndex = 0, @@ -7420,13 +7582,13 @@ actions: AdvancedSubtitles = LukeHagar.PlexAPI.SDK.Models.Components.AdvancedSubtitles.Burn, AudioBoost = 50, AudioChannelCount = 5, - AutoAdjustQuality = BoolInt.One, - AutoAdjustSubtitle = BoolInt.One, - DirectPlay = BoolInt.One, - DirectStream = BoolInt.One, - DirectStreamAudio = BoolInt.One, - DisableResolutionRotation = BoolInt.One, - HasMDE = BoolInt.One, + AutoAdjustQuality = BoolInt.True, + AutoAdjustSubtitle = BoolInt.True, + DirectPlay = BoolInt.True, + DirectStream = BoolInt.True, + DirectStreamAudio = BoolInt.True, + DisableResolutionRotation = BoolInt.True, + HasMDE = BoolInt.True, Location = StartTranscodeSessionQueryParamLocation.Wan, MediaBufferSize = 102400, MediaIndex = 0, @@ -7479,13 +7641,13 @@ actions: AdvancedSubtitles = LukeHagar.PlexAPI.SDK.Models.Components.AdvancedSubtitles.Burn, AudioBoost = 50, AudioChannelCount = 5, - AutoAdjustQuality = BoolInt.One, - AutoAdjustSubtitle = BoolInt.One, - DirectPlay = BoolInt.One, - DirectStream = BoolInt.One, - DirectStreamAudio = BoolInt.One, - DisableResolutionRotation = BoolInt.One, - HasMDE = BoolInt.One, + AutoAdjustQuality = BoolInt.True, + AutoAdjustSubtitle = BoolInt.True, + DirectPlay = BoolInt.True, + DirectStream = BoolInt.True, + DirectStreamAudio = BoolInt.True, + DisableResolutionRotation = BoolInt.True, + HasMDE = BoolInt.True, Location = QueryParamLocation.Wan, MediaBufferSize = 102400, MediaIndex = 0, diff --git a/docs/Models/Components/AutoSelectSubtitle.md b/docs/Models/Components/AutoSelectSubtitle.md new file mode 100644 index 0000000..0c8ee9e --- /dev/null +++ b/docs/Models/Components/AutoSelectSubtitle.md @@ -0,0 +1,12 @@ +# AutoSelectSubtitle + +The auto-select subtitle mode (0 = Manually selected, 1 = Shown with foreign audio, 2 = Always enabled) + + +## Values + +| Name | Value | +| ----------------------- | ----------------------- | +| `ManuallySelected` | 0 | +| `ShownWithForeignAudio` | 1 | +| `AlwaysEnabled` | 2 | \ No newline at end of file diff --git a/docs/Models/Components/BoolInt.md b/docs/Models/Components/BoolInt.md index 543fdbf..5d0159a 100644 --- a/docs/Models/Components/BoolInt.md +++ b/docs/Models/Components/BoolInt.md @@ -3,7 +3,7 @@ ## Values -| Name | Value | -| ------ | ------ | -| `Zero` | 0 | -| `One` | 1 | \ No newline at end of file +| Name | Value | +| ------- | ------- | +| `False` | 0 | +| `True` | 1 | \ No newline at end of file diff --git a/docs/Models/Components/Connections.md b/docs/Models/Components/Connections.md new file mode 100644 index 0000000..7d2eae2 --- /dev/null +++ b/docs/Models/Components/Connections.md @@ -0,0 +1,14 @@ +# Connections + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `Protocol` | [PlexDeviceProtocol](../../Models/Components/PlexDeviceProtocol.md) | :heavy_check_mark: | The protocol used for the connection (http, https, etc) | http | +| `Address` | *string* | :heavy_check_mark: | The (ip) address or domain name used for the connection | | +| `Port` | *int* | :heavy_check_mark: | The port used for the connection | | +| `Uri` | *string* | :heavy_check_mark: | The full URI of the connection | | +| `Local` | *bool* | :heavy_check_mark: | If the connection is local address | | +| `Relay` | *bool* | :heavy_check_mark: | If the connection is relayed through plex.direct | | +| `IPv6` | *bool* | :heavy_check_mark: | If the connection is using IPv6 | | \ No newline at end of file diff --git a/docs/Models/Components/DefaultAudioAccessibility.md b/docs/Models/Components/DefaultAudioAccessibility.md new file mode 100644 index 0000000..a43a75e --- /dev/null +++ b/docs/Models/Components/DefaultAudioAccessibility.md @@ -0,0 +1,13 @@ +# DefaultAudioAccessibility + +The audio accessibility mode (0 = Prefer non-accessibility audio, 1 = Prefer accessibility audio, 2 = Only show accessibility audio, 3 = Only show non-accessibility audio) + + +## Values + +| Name | Value | +| ------------------------ | ------------------------ | +| `PreferNonAccessibility` | 0 | +| `PreferAccessibility` | 1 | +| `OnlyAccessibility` | 2 | +| `OnlyNonAccessibility` | 3 | \ No newline at end of file diff --git a/docs/Models/Components/DefaultSubtitleAccessibility.md b/docs/Models/Components/DefaultSubtitleAccessibility.md new file mode 100644 index 0000000..942a8eb --- /dev/null +++ b/docs/Models/Components/DefaultSubtitleAccessibility.md @@ -0,0 +1,13 @@ +# DefaultSubtitleAccessibility + +The subtitles for the deaf or hard-of-hearing (SDH) searches mode (0 = Prefer non-SDH subtitles, 1 = Prefer SDH subtitles, 2 = Only show SDH subtitles, 3 = Only show non-SDH subtitles) + + +## Values + +| Name | Value | +| -------------- | -------------- | +| `PreferNonSdh` | 0 | +| `PreferSdh` | 1 | +| `OnlySdh` | 2 | +| `OnlyNonSdh` | 3 | \ No newline at end of file diff --git a/docs/Models/Components/DefaultSubtitleForced.md b/docs/Models/Components/DefaultSubtitleForced.md new file mode 100644 index 0000000..7a189f3 --- /dev/null +++ b/docs/Models/Components/DefaultSubtitleForced.md @@ -0,0 +1,13 @@ +# DefaultSubtitleForced + +The forced subtitles searches mode (0 = Prefer non-forced subtitles, 1 = Prefer forced subtitles, 2 = Only show forced subtitles, 3 = Only show non-forced subtitles) + + +## Values + +| Name | Value | +| ----------------- | ----------------- | +| `PreferNonForced` | 0 | +| `PreferForced` | 1 | +| `OnlyForced` | 2 | +| `OnlyNonForced` | 3 | \ No newline at end of file diff --git a/docs/Models/Components/Guids.md b/docs/Models/Components/Guids.md new file mode 100644 index 0000000..6802b5d --- /dev/null +++ b/docs/Models/Components/Guids.md @@ -0,0 +1,8 @@ +# Guids + + +## 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/Components/Items.md b/docs/Models/Components/Items.md index ef692be..0643856 100644 --- a/docs/Models/Components/Items.md +++ b/docs/Models/Components/Items.md @@ -10,74 +10,78 @@ Metadata items can often live in a hierarchy with relationships between them. F ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `Title` | *object* | :heavy_minus_sign: | The title of the item (e.g. “300” or “The Simpsons”) | -| `Type` | *object* | :heavy_minus_sign: | The type of the video item, such as `movie`, `episode`, or `clip`. | -| `AbsoluteIndex` | *long* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | -| `AddedAt` | *long* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was added to the library. | -| `Art` | *object* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | -| `AudienceRating` | *double* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | -| `AudienceRatingImage` | *object* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | -| `Autotag` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Banner` | *object* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | -| `ChapterSource` | *object* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | -| `Composite` | *object* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | -| `ContentRating` | *object* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | -| `Country` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Director` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Duration` | *long* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | -| `Filter` | List<[Filter](../../Models/Components/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `Genre` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `GrandparentArt` | *string* | :heavy_minus_sign: | The `art` of the grandparent | -| `GrandparentHero` | *string* | :heavy_minus_sign: | The `hero` of the grandparent | -| `GrandparentKey` | *string* | :heavy_minus_sign: | The `key` of the grandparent | -| `GrandparentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the grandparent | -| `GrandparentTheme` | *string* | :heavy_minus_sign: | The `theme` of the grandparent | -| `GrandparentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the grandparent | -| `GrandparentTitle` | *string* | :heavy_minus_sign: | The `title` of the grandparent | -| `Guid` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Hero` | *object* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | -| `Image` | List<[Image](../../Models/Components/Image.md)> | :heavy_minus_sign: | N/A | -| `Index` | *long* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | -| `Key` | *object* | :heavy_minus_sign: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | -| `LastViewedAt` | *long* | :heavy_minus_sign: | When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. | -| `LeafCount` | *long* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | -| `Media` | List<[Media](../../Models/Components/Media.md)> | :heavy_minus_sign: | N/A | -| `OriginallyAvailableAt` | *object* | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | -| `OriginalTitle` | *object* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | -| `ParentHero` | *string* | :heavy_minus_sign: | The `hero` of the parent | -| `ParentIndex` | *long* | :heavy_minus_sign: | The `index` of the parent | -| `ParentKey` | *string* | :heavy_minus_sign: | The `key` of the parent | -| `ParentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the parent | -| `ParentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the parent | -| `ParentTitle` | *string* | :heavy_minus_sign: | The `title` of the parent | -| `PrimaryExtraKey` | *object* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | -| `Prompt` | *string* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | -| `Rating` | *double* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | -| `RatingArray` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `RatingCount` | *long* | :heavy_minus_sign: | Number of ratings under this metadata | -| `RatingImage` | *object* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | -| `RatingKey` | *object* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | -| `Role` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Search` | *bool* | :heavy_minus_sign: | Indicates this is a search directory | -| `Secondary` | *bool* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | -| `SkipChildren` | *bool* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | -| `SkipParent` | *bool* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | -| `Sort` | List<[Sort](../../Models/Components/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `Studio` | *object* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | -| `Subtype` | *object* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | -| `Summary` | *object* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | -| `Tagline` | *object* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | -| `Theme` | *object* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | -| `Thumb` | *object* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | -| `TitleSort` | *object* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | -| `UpdatedAt` | *long* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | -| `UserRating` | *double* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | -| `ViewCount` | *long* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | -| `ViewedLeafCount` | *long* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | -| `ViewOffset` | *long* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | -| `Writer` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Year` | *long* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | -| `MetadataItem` | List<[Items](../../Models/Components/Items.md)> | :heavy_minus_sign: | N/A | -| `AdditionalProperties` | Dictionary | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Title` | *string* | :heavy_check_mark: | The title of the item (e.g. “300” or “The Simpsons”) | | +| `Type` | *string* | :heavy_check_mark: | The type of the video item, such as `movie`, `episode`, or `clip`. | | +| `AbsoluteIndex` | *int* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | | +| `AddedAt` | *long* | :heavy_check_mark: | In units of seconds since the epoch, returns the time at which the item was added to the library. | | +| `Art` | *string* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | /library/metadata/58683/art/1703239236 | +| `AudienceRating` | *float* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | | +| `AudienceRatingImage` | *string* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | | +| `Autotag` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Banner` | *string* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | | +| `ChapterSource` | *string* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | media | +| `ChildCount` | *int* | :heavy_minus_sign: | The number of child items associated with this media item. | 1 | +| `Composite` | *string* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | | +| `ContentRating` | *string* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | | +| `Country` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Director` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Duration` | *int* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | | +| `Filter` | List<[Filter](../../Models/Components/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `Genre` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `GrandparentArt` | *string* | :heavy_minus_sign: | The `art` of the grandparent | | +| `GrandparentGuid` | *string* | :heavy_minus_sign: | The GUID of the grandparent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `GrandparentHero` | *string* | :heavy_minus_sign: | The `hero` of the grandparent | | +| `GrandparentKey` | *string* | :heavy_minus_sign: | The `key` of the grandparent | | +| `GrandparentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the grandparent | | +| `GrandparentTheme` | *string* | :heavy_minus_sign: | The `theme` of the grandparent | | +| `GrandparentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the grandparent | | +| `GrandparentTitle` | *string* | :heavy_minus_sign: | The `title` of the grandparent | | +| `Guid` | *string* | :heavy_minus_sign: | The globally unique identifier for the media item. | plex://movie/5d7768ba96b655001fdc0408 | +| `Guids` | List<[ItemsGuids](../../Models/Components/ItemsGuids.md)> | :heavy_minus_sign: | N/A | | +| `Hero` | *string* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | | +| `Image` | List<[Image](../../Models/Components/Image.md)> | :heavy_minus_sign: | N/A | | +| `Index` | *int* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | | +| `Key` | *string* | :heavy_check_mark: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | | +| `LastViewedAt` | *long* | :heavy_minus_sign: | N/A | 1556281940 | +| `LeafCount` | *int* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | | +| `Media` | List<[Media](../../Models/Components/Media.md)> | :heavy_minus_sign: | N/A | | +| `OriginallyAvailableAt` | [LocalDate](https://nodatime.org/3.1.x/api/NodaTime.LocalDate.html) | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | 2022-12-14 | +| `OriginalTitle` | *string* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | | +| `ParentGuid` | *string* | :heavy_minus_sign: | The GUID of the parent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `ParentHero` | *string* | :heavy_minus_sign: | The `hero` of the parent | | +| `ParentIndex` | *int* | :heavy_minus_sign: | The `index` of the parent | | +| `ParentKey` | *string* | :heavy_minus_sign: | The `key` of the parent | | +| `ParentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the parent | | +| `ParentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the parent | | +| `ParentTitle` | *string* | :heavy_minus_sign: | The `title` of the parent | | +| `PrimaryExtraKey` | *string* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | | +| `Prompt` | *string* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | | +| `Rating` | *float* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | | +| `RatingArray` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `RatingCount` | *int* | :heavy_minus_sign: | Number of ratings under this metadata | | +| `RatingImage` | *string* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | | +| `RatingKey` | *string* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | | +| `Role` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Search` | *bool* | :heavy_minus_sign: | Indicates this is a search directory | | +| `Secondary` | *bool* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | | +| `SkipChildren` | *bool* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | | +| `SkipParent` | *bool* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | | +| `Sort` | List<[Sort](../../Models/Components/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `Studio` | *string* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | | +| `Subtype` | *string* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | | +| `Summary` | *string* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | | +| `Tagline` | *string* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | | +| `Theme` | *string* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | /library/metadata/1/theme/1705636920 | +| `Thumb` | *string* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | /library/metadata/58683/thumb/1703239236 | +| `TitleSort` | *string* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | | +| `UpdatedAt` | *long* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | | +| `UserRating` | *float* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | | +| `ViewCount` | *int* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | | +| `ViewedLeafCount` | *int* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | | +| `ViewOffset` | *int* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | | +| `Writer` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Year` | *int* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | | +| `MetadataItem` | List<[Items](../../Models/Components/Items.md)> | :heavy_minus_sign: | N/A | | +| `AdditionalProperties` | Dictionary | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Components/ItemsGuids.md b/docs/Models/Components/ItemsGuids.md new file mode 100644 index 0000000..9c01f64 --- /dev/null +++ b/docs/Models/Components/ItemsGuids.md @@ -0,0 +1,8 @@ +# ItemsGuids + + +## 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/Components/LibrarySection.md b/docs/Models/Components/LibrarySection.md index 7533430..9d895a3 100644 --- a/docs/Models/Components/LibrarySection.md +++ b/docs/Models/Components/LibrarySection.md @@ -3,25 +3,26 @@ ## Fields -| Field | Type | Required | Description | -| --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | -| `Title` | *string* | :heavy_minus_sign: | N/A | -| `Type` | *string* | :heavy_minus_sign: | N/A | -| `Agent` | *string* | :heavy_minus_sign: | N/A | -| `AllowSync` | *bool* | :heavy_minus_sign: | N/A | -| `Art` | *string* | :heavy_minus_sign: | N/A | -| `Composite` | *string* | :heavy_minus_sign: | N/A | -| `Content` | *bool* | :heavy_minus_sign: | N/A | -| `ContentChangedAt` | *long* | :heavy_minus_sign: | N/A | -| `CreatedAt` | *long* | :heavy_minus_sign: | N/A | -| `Directory` | *bool* | :heavy_minus_sign: | N/A | -| `Filters` | *bool* | :heavy_minus_sign: | Indicates whether this section has filtering capabilities | -| `Hidden` | *bool* | :heavy_minus_sign: | N/A | -| `Key` | *string* | :heavy_minus_sign: | N/A | -| `Language` | *string* | :heavy_minus_sign: | N/A | -| `Location` | List<[LibrarySectionLocation](../../Models/Components/LibrarySectionLocation.md)> | :heavy_minus_sign: | N/A | -| `Refreshing` | *bool* | :heavy_minus_sign: | Indicates whether this library section is currently scanning | -| `ScannedAt` | *long* | :heavy_minus_sign: | N/A | -| `Scanner` | *string* | :heavy_minus_sign: | N/A | -| `Thumb` | *string* | :heavy_minus_sign: | N/A | -| `UpdatedAt` | *long* | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `Title` | *string* | :heavy_minus_sign: | The title of the library | Movies | +| `Type` | [MediaTypeString](../../Models/Components/MediaTypeString.md) | :heavy_check_mark: | The type of media content in the Plex library. This can represent videos, music, or photos.
| movie | +| `Agent` | *string* | :heavy_minus_sign: | N/A | | +| `AllowSync` | *bool* | :heavy_minus_sign: | N/A | | +| `Art` | *string* | :heavy_minus_sign: | N/A | | +| `Composite` | *string* | :heavy_minus_sign: | N/A | | +| `Content` | *bool* | :heavy_minus_sign: | N/A | | +| `ContentChangedAt` | *long* | :heavy_minus_sign: | N/A | 1556281940 | +| `CreatedAt` | *long* | :heavy_minus_sign: | N/A | 1556281940 | +| `Directory` | *bool* | :heavy_minus_sign: | N/A | | +| `Filters` | *bool* | :heavy_minus_sign: | Indicates whether this section has filtering capabilities | | +| `Hidden` | *bool* | :heavy_minus_sign: | N/A | | +| `Key` | *string* | :heavy_minus_sign: | N/A | | +| `Language` | *string* | :heavy_check_mark: | N/A | | +| `Uuid` | *string* | :heavy_check_mark: | The universally unique identifier for the library. | e69655a2-ef48-4aba-bb19-d3cc3401e7d6 | +| `Location` | List<[LibrarySectionLocation](../../Models/Components/LibrarySectionLocation.md)> | :heavy_minus_sign: | N/A | | +| `Refreshing` | *bool* | :heavy_minus_sign: | Indicates whether this library section is currently scanning | | +| `ScannedAt` | *long* | :heavy_minus_sign: | N/A | 1556281940 | +| `Scanner` | *string* | :heavy_minus_sign: | N/A | | +| `Thumb` | *string* | :heavy_minus_sign: | N/A | | +| `UpdatedAt` | *long* | :heavy_minus_sign: | N/A | 1556281940 | \ No newline at end of file diff --git a/docs/Models/Components/MailingListStatus.md b/docs/Models/Components/MailingListStatus.md new file mode 100644 index 0000000..25033de --- /dev/null +++ b/docs/Models/Components/MailingListStatus.md @@ -0,0 +1,12 @@ +# MailingListStatus + +Your current mailing list status + + +## Values + +| Name | Value | +| -------------- | -------------- | +| `Active` | active | +| `Unsubscribed` | unsubscribed | +| `Removed` | removed | \ No newline at end of file diff --git a/docs/Models/Components/Media.md b/docs/Models/Components/Media.md index f3539e7..7da7fb4 100644 --- a/docs/Models/Components/Media.md +++ b/docs/Models/Components/Media.md @@ -8,22 +8,22 @@ | Field | Type | Required | Description | Example | | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | -| `AspectRatio` | *double* | :heavy_minus_sign: | N/A | 2.35 | -| `AudioChannels` | *long* | :heavy_minus_sign: | N/A | 2 | -| `AudioCodec` | *object* | :heavy_minus_sign: | N/A | aac | -| `AudioProfile` | *object* | :heavy_minus_sign: | N/A | lc | -| `Bitrate` | *long* | :heavy_minus_sign: | N/A | 5612 | -| `Container` | *object* | :heavy_minus_sign: | N/A | mov | -| `Duration` | *long* | :heavy_minus_sign: | N/A | 150192 | +| `AspectRatio` | *float* | :heavy_minus_sign: | N/A | 2.35 | +| `AudioChannels` | *int* | :heavy_minus_sign: | N/A | 2 | +| `AudioCodec` | *string* | :heavy_minus_sign: | N/A | aac | +| `AudioProfile` | *string* | :heavy_minus_sign: | N/A | lc | +| `Bitrate` | *int* | :heavy_minus_sign: | N/A | 5612 | +| `Container` | *string* | :heavy_minus_sign: | N/A | mov | +| `Duration` | *int* | :heavy_minus_sign: | N/A | 150192 | | `Has64bitOffsets` | *bool* | :heavy_minus_sign: | N/A | false | | `HasVoiceActivity` | *bool* | :heavy_minus_sign: | N/A | true | -| `Height` | *long* | :heavy_minus_sign: | N/A | 544 | -| `Id` | *long* | :heavy_minus_sign: | N/A | 1 | +| `Height` | *int* | :heavy_minus_sign: | N/A | 544 | +| `Id` | *long* | :heavy_check_mark: | N/A | 1 | | `OptimizedForStreaming` | *bool* | :heavy_minus_sign: | N/A | false | | `Part` | List<[Part](../../Models/Components/Part.md)> | :heavy_minus_sign: | N/A | | -| `VideoCodec` | *object* | :heavy_minus_sign: | N/A | h264 | -| `VideoFrameRate` | *object* | :heavy_minus_sign: | N/A | 24p | -| `VideoProfile` | *object* | :heavy_minus_sign: | N/A | main | -| `VideoResolution` | *object* | :heavy_minus_sign: | N/A | 720 | -| `Width` | *long* | :heavy_minus_sign: | N/A | 1280 | +| `VideoCodec` | *string* | :heavy_minus_sign: | N/A | h264 | +| `VideoFrameRate` | *string* | :heavy_minus_sign: | N/A | 24p | +| `VideoProfile` | *string* | :heavy_minus_sign: | N/A | main | +| `VideoResolution` | *string* | :heavy_minus_sign: | N/A | 720 | +| `Width` | *int* | :heavy_minus_sign: | N/A | 1280 | | `AdditionalProperties` | Dictionary | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Components/MediaContainerWithDecisionGuids.md b/docs/Models/Components/MediaContainerWithDecisionGuids.md new file mode 100644 index 0000000..c3f76da --- /dev/null +++ b/docs/Models/Components/MediaContainerWithDecisionGuids.md @@ -0,0 +1,8 @@ +# MediaContainerWithDecisionGuids + + +## 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/Components/MediaContainerWithDecisionMedia.md b/docs/Models/Components/MediaContainerWithDecisionMedia.md index 616b480..632884d 100644 --- a/docs/Models/Components/MediaContainerWithDecisionMedia.md +++ b/docs/Models/Components/MediaContainerWithDecisionMedia.md @@ -8,24 +8,24 @@ | Field | Type | Required | Description | Example | | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | -| `AspectRatio` | *double* | :heavy_minus_sign: | N/A | 2.35 | -| `AudioChannels` | *long* | :heavy_minus_sign: | N/A | 2 | -| `AudioCodec` | *object* | :heavy_minus_sign: | N/A | aac | -| `AudioProfile` | *object* | :heavy_minus_sign: | N/A | lc | -| `Bitrate` | *long* | :heavy_minus_sign: | N/A | 5612 | -| `Container` | *object* | :heavy_minus_sign: | N/A | mov | -| `Duration` | *long* | :heavy_minus_sign: | N/A | 150192 | +| `AspectRatio` | *float* | :heavy_minus_sign: | N/A | 2.35 | +| `AudioChannels` | *int* | :heavy_minus_sign: | N/A | 2 | +| `AudioCodec` | *string* | :heavy_minus_sign: | N/A | aac | +| `AudioProfile` | *string* | :heavy_minus_sign: | N/A | lc | +| `Bitrate` | *int* | :heavy_minus_sign: | N/A | 5612 | +| `Container` | *string* | :heavy_minus_sign: | N/A | mov | +| `Duration` | *int* | :heavy_minus_sign: | N/A | 150192 | | `Has64bitOffsets` | *bool* | :heavy_minus_sign: | N/A | false | | `HasVoiceActivity` | *bool* | :heavy_minus_sign: | N/A | true | -| `Height` | *long* | :heavy_minus_sign: | N/A | 544 | -| `Id` | *long* | :heavy_minus_sign: | N/A | 1 | +| `Height` | *int* | :heavy_minus_sign: | N/A | 544 | +| `Id` | *long* | :heavy_check_mark: | N/A | 1 | | `OptimizedForStreaming` | *bool* | :heavy_minus_sign: | N/A | false | | `Part` | List<[MediaContainerWithDecisionPart](../../Models/Components/MediaContainerWithDecisionPart.md)> | :heavy_minus_sign: | N/A | | -| `VideoCodec` | *object* | :heavy_minus_sign: | N/A | h264 | -| `VideoFrameRate` | *object* | :heavy_minus_sign: | N/A | 24p | -| `VideoProfile` | *object* | :heavy_minus_sign: | N/A | main | -| `VideoResolution` | *object* | :heavy_minus_sign: | N/A | 720 | -| `Width` | *long* | :heavy_minus_sign: | N/A | 1280 | +| `VideoCodec` | *string* | :heavy_minus_sign: | N/A | h264 | +| `VideoFrameRate` | *string* | :heavy_minus_sign: | N/A | 24p | +| `VideoProfile` | *string* | :heavy_minus_sign: | N/A | main | +| `VideoResolution` | *string* | :heavy_minus_sign: | N/A | 720 | +| `Width` | *int* | :heavy_minus_sign: | N/A | 1280 | | `Abr` | *bool* | :heavy_minus_sign: | N/A | | | `ResourceSession` | *string* | :heavy_minus_sign: | N/A | | | `Selected` | *bool* | :heavy_minus_sign: | N/A | | diff --git a/docs/Models/Components/MediaContainerWithDecisionMetadata.md b/docs/Models/Components/MediaContainerWithDecisionMetadata.md index 4b4296a..b9ee85b 100644 --- a/docs/Models/Components/MediaContainerWithDecisionMetadata.md +++ b/docs/Models/Components/MediaContainerWithDecisionMetadata.md @@ -10,73 +10,77 @@ Metadata items can often live in a hierarchy with relationships between them. F ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `Title` | *object* | :heavy_minus_sign: | The title of the item (e.g. “300” or “The Simpsons”) | -| `Type` | *object* | :heavy_minus_sign: | The type of the video item, such as `movie`, `episode`, or `clip`. | -| `AbsoluteIndex` | *long* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | -| `AddedAt` | *long* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was added to the library. | -| `Art` | *object* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | -| `AudienceRating` | *double* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | -| `AudienceRatingImage` | *object* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | -| `Autotag` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Banner` | *object* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | -| `ChapterSource` | *object* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | -| `Composite` | *object* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | -| `ContentRating` | *object* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | -| `Country` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Director` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Duration` | *long* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | -| `Filter` | List<[Filter](../../Models/Components/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `Genre` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `GrandparentArt` | *string* | :heavy_minus_sign: | The `art` of the grandparent | -| `GrandparentHero` | *string* | :heavy_minus_sign: | The `hero` of the grandparent | -| `GrandparentKey` | *string* | :heavy_minus_sign: | The `key` of the grandparent | -| `GrandparentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the grandparent | -| `GrandparentTheme` | *string* | :heavy_minus_sign: | The `theme` of the grandparent | -| `GrandparentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the grandparent | -| `GrandparentTitle` | *string* | :heavy_minus_sign: | The `title` of the grandparent | -| `Guid` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Hero` | *object* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | -| `Image` | List<[Image](../../Models/Components/Image.md)> | :heavy_minus_sign: | N/A | -| `Index` | *long* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | -| `Key` | *object* | :heavy_minus_sign: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | -| `LastViewedAt` | *long* | :heavy_minus_sign: | When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. | -| `LeafCount` | *long* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | -| `Media` | List<[MediaContainerWithDecisionMedia](../../Models/Components/MediaContainerWithDecisionMedia.md)> | :heavy_minus_sign: | N/A | -| `OriginallyAvailableAt` | *object* | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | -| `OriginalTitle` | *object* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | -| `ParentHero` | *string* | :heavy_minus_sign: | The `hero` of the parent | -| `ParentIndex` | *long* | :heavy_minus_sign: | The `index` of the parent | -| `ParentKey` | *string* | :heavy_minus_sign: | The `key` of the parent | -| `ParentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the parent | -| `ParentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the parent | -| `ParentTitle` | *string* | :heavy_minus_sign: | The `title` of the parent | -| `PrimaryExtraKey` | *object* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | -| `Prompt` | *string* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | -| `Rating` | *double* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | -| `RatingArray` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `RatingCount` | *long* | :heavy_minus_sign: | Number of ratings under this metadata | -| `RatingImage` | *object* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | -| `RatingKey` | *object* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | -| `Role` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Search` | *bool* | :heavy_minus_sign: | Indicates this is a search directory | -| `Secondary` | *bool* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | -| `SkipChildren` | *bool* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | -| `SkipParent` | *bool* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | -| `Sort` | List<[Sort](../../Models/Components/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `Studio` | *object* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | -| `Subtype` | *object* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | -| `Summary` | *object* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | -| `Tagline` | *object* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | -| `Theme` | *object* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | -| `Thumb` | *object* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | -| `TitleSort` | *object* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | -| `UpdatedAt` | *long* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | -| `UserRating` | *double* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | -| `ViewCount` | *long* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | -| `ViewedLeafCount` | *long* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | -| `ViewOffset` | *long* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | -| `Writer` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Year` | *long* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | -| `AdditionalProperties` | Dictionary | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Title` | *string* | :heavy_check_mark: | The title of the item (e.g. “300” or “The Simpsons”) | | +| `Type` | *string* | :heavy_check_mark: | The type of the video item, such as `movie`, `episode`, or `clip`. | | +| `AbsoluteIndex` | *int* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | | +| `AddedAt` | *long* | :heavy_check_mark: | In units of seconds since the epoch, returns the time at which the item was added to the library. | | +| `Art` | *string* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | /library/metadata/58683/art/1703239236 | +| `AudienceRating` | *float* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | | +| `AudienceRatingImage` | *string* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | | +| `Autotag` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Banner` | *string* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | | +| `ChapterSource` | *string* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | media | +| `ChildCount` | *int* | :heavy_minus_sign: | The number of child items associated with this media item. | 1 | +| `Composite` | *string* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | | +| `ContentRating` | *string* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | | +| `Country` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Director` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Duration` | *int* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | | +| `Filter` | List<[Filter](../../Models/Components/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `Genre` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `GrandparentArt` | *string* | :heavy_minus_sign: | The `art` of the grandparent | | +| `GrandparentGuid` | *string* | :heavy_minus_sign: | The GUID of the grandparent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `GrandparentHero` | *string* | :heavy_minus_sign: | The `hero` of the grandparent | | +| `GrandparentKey` | *string* | :heavy_minus_sign: | The `key` of the grandparent | | +| `GrandparentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the grandparent | | +| `GrandparentTheme` | *string* | :heavy_minus_sign: | The `theme` of the grandparent | | +| `GrandparentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the grandparent | | +| `GrandparentTitle` | *string* | :heavy_minus_sign: | The `title` of the grandparent | | +| `Guid` | *string* | :heavy_minus_sign: | The globally unique identifier for the media item. | plex://movie/5d7768ba96b655001fdc0408 | +| `Guids` | List<[MediaContainerWithDecisionGuids](../../Models/Components/MediaContainerWithDecisionGuids.md)> | :heavy_minus_sign: | N/A | | +| `Hero` | *string* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | | +| `Image` | List<[Image](../../Models/Components/Image.md)> | :heavy_minus_sign: | N/A | | +| `Index` | *int* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | | +| `Key` | *string* | :heavy_check_mark: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | | +| `LastViewedAt` | *long* | :heavy_minus_sign: | N/A | 1556281940 | +| `LeafCount` | *int* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | | +| `Media` | List<[MediaContainerWithDecisionMedia](../../Models/Components/MediaContainerWithDecisionMedia.md)> | :heavy_minus_sign: | N/A | | +| `OriginallyAvailableAt` | [LocalDate](https://nodatime.org/3.1.x/api/NodaTime.LocalDate.html) | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | 2022-12-14 | +| `OriginalTitle` | *string* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | | +| `ParentGuid` | *string* | :heavy_minus_sign: | The GUID of the parent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `ParentHero` | *string* | :heavy_minus_sign: | The `hero` of the parent | | +| `ParentIndex` | *int* | :heavy_minus_sign: | The `index` of the parent | | +| `ParentKey` | *string* | :heavy_minus_sign: | The `key` of the parent | | +| `ParentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the parent | | +| `ParentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the parent | | +| `ParentTitle` | *string* | :heavy_minus_sign: | The `title` of the parent | | +| `PrimaryExtraKey` | *string* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | | +| `Prompt` | *string* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | | +| `Rating` | *float* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | | +| `RatingArray` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `RatingCount` | *int* | :heavy_minus_sign: | Number of ratings under this metadata | | +| `RatingImage` | *string* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | | +| `RatingKey` | *string* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | | +| `Role` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Search` | *bool* | :heavy_minus_sign: | Indicates this is a search directory | | +| `Secondary` | *bool* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | | +| `SkipChildren` | *bool* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | | +| `SkipParent` | *bool* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | | +| `Sort` | List<[Sort](../../Models/Components/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `Studio` | *string* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | | +| `Subtype` | *string* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | | +| `Summary` | *string* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | | +| `Tagline` | *string* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | | +| `Theme` | *string* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | /library/metadata/1/theme/1705636920 | +| `Thumb` | *string* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | /library/metadata/58683/thumb/1703239236 | +| `TitleSort` | *string* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | | +| `UpdatedAt` | *long* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | | +| `UserRating` | *float* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | | +| `ViewCount` | *int* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | | +| `ViewedLeafCount` | *int* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | | +| `ViewOffset` | *int* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | | +| `Writer` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Year` | *int* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | | +| `AdditionalProperties` | Dictionary | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Components/MediaContainerWithDecisionPart.md b/docs/Models/Components/MediaContainerWithDecisionPart.md index 969f0c8..6477698 100644 --- a/docs/Models/Components/MediaContainerWithDecisionPart.md +++ b/docs/Models/Components/MediaContainerWithDecisionPart.md @@ -8,17 +8,20 @@ | Field | Type | Required | Description | Example | | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | -| `AudioProfile` | *object* | :heavy_minus_sign: | N/A | lc | -| `Container` | *object* | :heavy_minus_sign: | The container of the media file, such as `mp4` or `mkv` | mov | -| `Duration` | *long* | :heavy_minus_sign: | The duration of the media item, in milliseconds | 150192 | -| `File` | *object* | :heavy_minus_sign: | The local file path at which the part is stored on the server | /home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov | +| `Accessible` | *bool* | :heavy_minus_sign: | Indicates if the part is accessible. | true | +| `AudioProfile` | *string* | :heavy_minus_sign: | N/A | lc | +| `Container` | *string* | :heavy_minus_sign: | The container of the media file, such as `mp4` or `mkv` | mov | +| `Duration` | *int* | :heavy_minus_sign: | The duration of the media item, in milliseconds | 150192 | +| `Exists` | *bool* | :heavy_minus_sign: | Indicates if the part exists. | true | +| `File` | *string* | :heavy_minus_sign: | The local file path at which the part is stored on the server | /home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov | | `Has64bitOffsets` | *bool* | :heavy_minus_sign: | N/A | false | -| `Id` | *long* | :heavy_minus_sign: | N/A | 1 | -| `Key` | *object* | :heavy_minus_sign: | The key from which the media can be streamed | /library/parts/1/1531779263/file.mov | +| `Id` | *long* | :heavy_check_mark: | N/A | 1 | +| `Indexes` | *string* | :heavy_minus_sign: | N/A | sd | +| `Key` | *string* | :heavy_check_mark: | The key from which the media can be streamed | /library/parts/1/1531779263/file.mov | | `OptimizedForStreaming` | *bool* | :heavy_minus_sign: | N/A | false | | `Size` | *long* | :heavy_minus_sign: | The size of the media, in bytes | 105355654 | | `Stream` | List<[MediaContainerWithDecisionStream](../../Models/Components/MediaContainerWithDecisionStream.md)> | :heavy_minus_sign: | N/A | | -| `VideoProfile` | *object* | :heavy_minus_sign: | N/A | main | +| `VideoProfile` | *string* | :heavy_minus_sign: | N/A | main | | `Decision` | [Decision](../../Models/Components/Decision.md) | :heavy_minus_sign: | N/A | | | `Selected` | *bool* | :heavy_minus_sign: | N/A | | | `AdditionalProperties` | Dictionary | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Components/MediaContainerWithDecisionStream.md b/docs/Models/Components/MediaContainerWithDecisionStream.md index 70d8be2..db97187 100644 --- a/docs/Models/Components/MediaContainerWithDecisionStream.md +++ b/docs/Models/Components/MediaContainerWithDecisionStream.md @@ -6,37 +6,60 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | -| `Default` | *bool* | :heavy_minus_sign: | N/A | true | -| `AudioChannelLayout` | *object* | :heavy_minus_sign: | N/A | stereo | -| `BitDepth` | *long* | :heavy_minus_sign: | N/A | 8 | -| `Bitrate` | *long* | :heavy_minus_sign: | N/A | 5466 | -| `CanAutoSync` | *bool* | :heavy_minus_sign: | For subtitle streams only. If `true` then the server can attempt to automatically sync the subtitle timestamps with the video. | true | -| `ChromaLocation` | *object* | :heavy_minus_sign: | N/A | topleft | -| `ChromaSubsampling` | *object* | :heavy_minus_sign: | N/A | 4:2:0 | -| `Codec` | *object* | :heavy_minus_sign: | The codec of the stream, such as `h264` or `aac` | h264 | -| `ColorPrimaries` | *object* | :heavy_minus_sign: | N/A | bt709 | -| `ColorRange` | *object* | :heavy_minus_sign: | N/A | tv | -| `ColorSpace` | *object* | :heavy_minus_sign: | N/A | bt709 | -| `ColorTrc` | *object* | :heavy_minus_sign: | N/A | bt709 | -| `DisplayTitle` | *object* | :heavy_minus_sign: | A friendly name for the stream, often comprised of the language and codec information | English (H.264 Main) | -| `FrameRate` | *double* | :heavy_minus_sign: | N/A | 23.976 | -| `HasScalingMatrix` | *object* | :heavy_minus_sign: | N/A | false | -| `Height` | *long* | :heavy_minus_sign: | N/A | 544 | -| `Id` | *long* | :heavy_minus_sign: | N/A | 1 | -| `Index` | *long* | :heavy_minus_sign: | If the stream is part of the `Part` and not an external resource, the index of the stream within that part | 0 | -| `Key` | *object* | :heavy_minus_sign: | If the stream is independently streamable, the key from which it can be streamed | /library/streams/1 | -| `Language` | *object* | :heavy_minus_sign: | N/A | English | -| `LanguageCode` | *object* | :heavy_minus_sign: | The three character language code for the stream contents | eng | -| `Level` | *long* | :heavy_minus_sign: | N/A | 31 | -| `Profile` | *object* | :heavy_minus_sign: | N/A | main | -| `RefFrames` | *long* | :heavy_minus_sign: | N/A | 2 | -| `SamplingRate` | *long* | :heavy_minus_sign: | N/A | 48000 | -| `Selected` | *bool* | :heavy_minus_sign: | N/A | | -| `StreamIdentifier` | *long* | :heavy_minus_sign: | N/A | 1 | -| `StreamType` | *long* | :heavy_minus_sign: | A number indicating the type of the stream. `1` for video, `2` for audio, `3` for subtitles, `4` for lyrics | 1 | -| `Width` | *long* | :heavy_minus_sign: | N/A | 1280 | -| `Decision` | [MediaContainerWithDecisionDecision](../../Models/Components/MediaContainerWithDecisionDecision.md) | :heavy_minus_sign: | N/A | | -| `Location` | [MediaContainerWithDecisionLocation](../../Models/Components/MediaContainerWithDecisionLocation.md) | :heavy_minus_sign: | N/A | | -| `AdditionalProperties` | Dictionary | :heavy_minus_sign: | N/A | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | +| `Default` | *bool* | :heavy_minus_sign: | Indicates if this stream is default. | true | +| `AudioChannelLayout` | *string* | :heavy_minus_sign: | Audio channel layout. | 5.1(side) | +| `Channels` | *int* | :heavy_minus_sign: | Number of audio channels (for audio streams). | 6 | +| `BitDepth` | *int* | :heavy_minus_sign: | Bit depth of the video stream. | 10 | +| `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 | +| `Bitrate` | *int* | :heavy_minus_sign: | Bitrate of the stream. | 24743 | +| `CanAutoSync` | *bool* | :heavy_minus_sign: | Indicates if the stream can auto-sync. | false | +| `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 | +| `Codec` | *string* | :heavy_check_mark: | Codec used by the stream. | hevc | +| `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 | +| `DisplayTitle` | *string* | :heavy_check_mark: | Display title for the stream. | 4K DoVi/HDR10 (HEVC Main 10) | +| `ExtendedDisplayTitle` | *string* | :heavy_minus_sign: | Extended display title for the stream. | 4K DoVi/HDR10 (HEVC Main 10) | +| `FrameRate` | *float* | :heavy_minus_sign: | Frame rate of the stream. | 23.976 | +| `HasScalingMatrix` | *bool* | :heavy_minus_sign: | N/A | false | +| `Height` | *int* | :heavy_minus_sign: | Height of the video stream. | 1602 | +| `Id` | *int* | :heavy_check_mark: | Unique stream identifier. | 1002625 | +| `Index` | *int* | :heavy_minus_sign: | Index of the stream. | 0 | +| `Key` | *string* | :heavy_check_mark: | Key to access this stream part. | /library/streams/216389 | +| `Language` | *string* | :heavy_minus_sign: | Language of the stream. | English | +| `LanguageCode` | *string* | :heavy_minus_sign: | ISO language code. | eng | +| `LanguageTag` | *string* | :heavy_minus_sign: | Language tag (e.g., en). | en | +| `Format` | *string* | :heavy_minus_sign: | Format of the stream (e.g., srt). | srt | +| `HeaderCompression` | *bool* | :heavy_minus_sign: | Indicates whether header compression is enabled. | true | +| `Level` | *int* | :heavy_minus_sign: | Video level. | 150 | +| `Original` | *bool* | :heavy_minus_sign: | Indicates if this is the original stream. | true | +| `Profile` | *string* | :heavy_minus_sign: | Video profile. | main 10 | +| `RefFrames` | *int* | :heavy_minus_sign: | Number of reference frames. | 1 | +| `SamplingRate` | *int* | :heavy_minus_sign: | Sampling rate for the audio stream. | 48000 | +| `ScanType` | *string* | :heavy_minus_sign: | N/A | progressive | +| `EmbeddedInVideo` | *string* | :heavy_minus_sign: | N/A | progressive | +| `Selected` | *bool* | :heavy_minus_sign: | Indicates if this stream is selected (applicable for audio streams). | true | +| `Forced` | *bool* | :heavy_minus_sign: | N/A | true | +| `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 | +| `StreamIdentifier` | *int* | :heavy_minus_sign: | N/A | 1 | +| `StreamType` | *long* | :heavy_check_mark: | Stream type:
- VIDEO = 1
- AUDIO = 2
- SUBTITLE = 3
| | +| `Width` | *int* | :heavy_minus_sign: | Width of the video stream. | 3840 | +| `Decision` | [MediaContainerWithDecisionDecision](../../Models/Components/MediaContainerWithDecisionDecision.md) | :heavy_minus_sign: | N/A | | +| `Location` | [MediaContainerWithDecisionLocation](../../Models/Components/MediaContainerWithDecisionLocation.md) | :heavy_minus_sign: | N/A | | +| `AdditionalProperties` | Dictionary | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Components/MediaContainerWithNestedMetadataGuids.md b/docs/Models/Components/MediaContainerWithNestedMetadataGuids.md new file mode 100644 index 0000000..c556d26 --- /dev/null +++ b/docs/Models/Components/MediaContainerWithNestedMetadataGuids.md @@ -0,0 +1,8 @@ +# MediaContainerWithNestedMetadataGuids + + +## 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/Components/MediaContainerWithPlaylistMetadataGuids.md b/docs/Models/Components/MediaContainerWithPlaylistMetadataGuids.md new file mode 100644 index 0000000..55a0831 --- /dev/null +++ b/docs/Models/Components/MediaContainerWithPlaylistMetadataGuids.md @@ -0,0 +1,8 @@ +# MediaContainerWithPlaylistMetadataGuids + + +## 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/Components/MediaContainerWithPlaylistMetadataMetadata.md b/docs/Models/Components/MediaContainerWithPlaylistMetadataMetadata.md index 8871a2f..47daaab 100644 --- a/docs/Models/Components/MediaContainerWithPlaylistMetadataMetadata.md +++ b/docs/Models/Components/MediaContainerWithPlaylistMetadataMetadata.md @@ -10,77 +10,81 @@ Metadata items can often live in a hierarchy with relationships between them. F ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `ReadOnly` | *bool* | :heavy_minus_sign: | If we return this as true then this playlist cannot be altered or deleted directly by the client. | -| `Composite` | *object* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | -| `Duration` | *long* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | -| `Key` | *object* | :heavy_minus_sign: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | -| `LeafCount` | *long* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | -| `PlaylistType` | [Models.Components.PlaylistType](../../Models/Components/PlaylistType.md) | :heavy_minus_sign: | The type of the playlist. | -| `Smart` | *bool* | :heavy_minus_sign: | Whether or not the playlist is smart. | -| `SpecialPlaylistType` | *string* | :heavy_minus_sign: | If this is a special playlist, this returns its type (e.g. favorites). | -| `Title` | *object* | :heavy_minus_sign: | The title of the item (e.g. “300” or “The Simpsons”) | -| `Type` | *object* | :heavy_minus_sign: | The type of the video item, such as `movie`, `episode`, or `clip`. | -| `AbsoluteIndex` | *long* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | -| `AddedAt` | *long* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was added to the library. | -| `Art` | *object* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | -| `AudienceRating` | *double* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | -| `AudienceRatingImage` | *object* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | -| `Autotag` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Banner` | *object* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | -| `ChapterSource` | *object* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | -| `ContentRating` | *object* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | -| `Country` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Director` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Filter` | List<[Filter](../../Models/Components/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `Genre` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `GrandparentArt` | *string* | :heavy_minus_sign: | The `art` of the grandparent | -| `GrandparentHero` | *string* | :heavy_minus_sign: | The `hero` of the grandparent | -| `GrandparentKey` | *string* | :heavy_minus_sign: | The `key` of the grandparent | -| `GrandparentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the grandparent | -| `GrandparentTheme` | *string* | :heavy_minus_sign: | The `theme` of the grandparent | -| `GrandparentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the grandparent | -| `GrandparentTitle` | *string* | :heavy_minus_sign: | The `title` of the grandparent | -| `Guid` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Hero` | *object* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | -| `Image` | List<[Image](../../Models/Components/Image.md)> | :heavy_minus_sign: | N/A | -| `Index` | *long* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | -| `LastViewedAt` | *long* | :heavy_minus_sign: | When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. | -| `Media` | List<[Media](../../Models/Components/Media.md)> | :heavy_minus_sign: | N/A | -| `OriginallyAvailableAt` | *object* | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | -| `OriginalTitle` | *object* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | -| `ParentHero` | *string* | :heavy_minus_sign: | The `hero` of the parent | -| `ParentIndex` | *long* | :heavy_minus_sign: | The `index` of the parent | -| `ParentKey` | *string* | :heavy_minus_sign: | The `key` of the parent | -| `ParentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the parent | -| `ParentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the parent | -| `ParentTitle` | *string* | :heavy_minus_sign: | The `title` of the parent | -| `PrimaryExtraKey` | *object* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | -| `Prompt` | *string* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | -| `Rating` | *double* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | -| `RatingArray` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `RatingCount` | *long* | :heavy_minus_sign: | Number of ratings under this metadata | -| `RatingImage` | *object* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | -| `RatingKey` | *object* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | -| `Role` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Search` | *bool* | :heavy_minus_sign: | Indicates this is a search directory | -| `Secondary` | *bool* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | -| `SkipChildren` | *bool* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | -| `SkipParent` | *bool* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | -| `Sort` | List<[Sort](../../Models/Components/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `Studio` | *object* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | -| `Subtype` | *object* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | -| `Summary` | *object* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | -| `Tagline` | *object* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | -| `Theme` | *object* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | -| `Thumb` | *object* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | -| `TitleSort` | *object* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | -| `UpdatedAt` | *long* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | -| `UserRating` | *double* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | -| `ViewCount` | *long* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | -| `ViewedLeafCount` | *long* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | -| `ViewOffset` | *long* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | -| `Writer` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Year` | *long* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | -| `AdditionalProperties` | Dictionary | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `ReadOnly` | *bool* | :heavy_minus_sign: | If we return this as true then this playlist cannot be altered or deleted directly by the client. | | +| `Composite` | *string* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | | +| `Duration` | *int* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | | +| `Key` | *string* | :heavy_check_mark: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | | +| `LeafCount` | *int* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | | +| `PlaylistType` | [Models.Components.PlaylistType](../../Models/Components/PlaylistType.md) | :heavy_minus_sign: | The type of the playlist. | | +| `Smart` | *bool* | :heavy_minus_sign: | Whether or not the playlist is smart. | | +| `SpecialPlaylistType` | *string* | :heavy_minus_sign: | If this is a special playlist, this returns its type (e.g. favorites). | | +| `Title` | *string* | :heavy_check_mark: | The title of the item (e.g. “300” or “The Simpsons”) | | +| `Type` | *string* | :heavy_check_mark: | The type of the video item, such as `movie`, `episode`, or `clip`. | | +| `AbsoluteIndex` | *int* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | | +| `AddedAt` | *long* | :heavy_check_mark: | In units of seconds since the epoch, returns the time at which the item was added to the library. | | +| `Art` | *string* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | /library/metadata/58683/art/1703239236 | +| `AudienceRating` | *float* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | | +| `AudienceRatingImage` | *string* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | | +| `Autotag` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Banner` | *string* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | | +| `ChapterSource` | *string* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | media | +| `ChildCount` | *int* | :heavy_minus_sign: | The number of child items associated with this media item. | 1 | +| `ContentRating` | *string* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | | +| `Country` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Director` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Filter` | List<[Filter](../../Models/Components/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `Genre` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `GrandparentArt` | *string* | :heavy_minus_sign: | The `art` of the grandparent | | +| `GrandparentGuid` | *string* | :heavy_minus_sign: | The GUID of the grandparent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `GrandparentHero` | *string* | :heavy_minus_sign: | The `hero` of the grandparent | | +| `GrandparentKey` | *string* | :heavy_minus_sign: | The `key` of the grandparent | | +| `GrandparentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the grandparent | | +| `GrandparentTheme` | *string* | :heavy_minus_sign: | The `theme` of the grandparent | | +| `GrandparentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the grandparent | | +| `GrandparentTitle` | *string* | :heavy_minus_sign: | The `title` of the grandparent | | +| `Guid` | *string* | :heavy_minus_sign: | The globally unique identifier for the media item. | plex://movie/5d7768ba96b655001fdc0408 | +| `Guids` | List<[MediaContainerWithPlaylistMetadataGuids](../../Models/Components/MediaContainerWithPlaylistMetadataGuids.md)> | :heavy_minus_sign: | N/A | | +| `Hero` | *string* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | | +| `Image` | List<[Image](../../Models/Components/Image.md)> | :heavy_minus_sign: | N/A | | +| `Index` | *int* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | | +| `LastViewedAt` | *long* | :heavy_minus_sign: | N/A | 1556281940 | +| `Media` | List<[Media](../../Models/Components/Media.md)> | :heavy_minus_sign: | N/A | | +| `OriginallyAvailableAt` | [LocalDate](https://nodatime.org/3.1.x/api/NodaTime.LocalDate.html) | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | 2022-12-14 | +| `OriginalTitle` | *string* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | | +| `ParentGuid` | *string* | :heavy_minus_sign: | The GUID of the parent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `ParentHero` | *string* | :heavy_minus_sign: | The `hero` of the parent | | +| `ParentIndex` | *int* | :heavy_minus_sign: | The `index` of the parent | | +| `ParentKey` | *string* | :heavy_minus_sign: | The `key` of the parent | | +| `ParentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the parent | | +| `ParentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the parent | | +| `ParentTitle` | *string* | :heavy_minus_sign: | The `title` of the parent | | +| `PrimaryExtraKey` | *string* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | | +| `Prompt` | *string* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | | +| `Rating` | *float* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | | +| `RatingArray` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `RatingCount` | *int* | :heavy_minus_sign: | Number of ratings under this metadata | | +| `RatingImage` | *string* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | | +| `RatingKey` | *string* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | | +| `Role` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Search` | *bool* | :heavy_minus_sign: | Indicates this is a search directory | | +| `Secondary` | *bool* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | | +| `SkipChildren` | *bool* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | | +| `SkipParent` | *bool* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | | +| `Sort` | List<[Sort](../../Models/Components/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `Studio` | *string* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | | +| `Subtype` | *string* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | | +| `Summary` | *string* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | | +| `Tagline` | *string* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | | +| `Theme` | *string* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | /library/metadata/1/theme/1705636920 | +| `Thumb` | *string* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | /library/metadata/58683/thumb/1703239236 | +| `TitleSort` | *string* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | | +| `UpdatedAt` | *long* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | | +| `UserRating` | *float* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | | +| `ViewCount` | *int* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | | +| `ViewedLeafCount` | *int* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | | +| `ViewOffset` | *int* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | | +| `Writer` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Year` | *int* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | | +| `AdditionalProperties` | Dictionary | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Components/MediaQuery.md b/docs/Models/Components/MediaQuery.md index 72cbb9c..9b56110 100644 --- a/docs/Models/Components/MediaQuery.md +++ b/docs/Models/Components/MediaQuery.md @@ -1,7 +1,17 @@ # MediaQuery +A querystring-based filtering language used to select subsets of media. When provided as an object, properties are serialized as a querystring using form style with explode. + +Only the defined properties below are allowed. The object serializes to a querystring format like: `type=4&sourceType=2&sort=duration:desc,index` + + ## Fields -| Field | Type | Required | Description | -| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Type` | [MediaType](../../Models/Components/MediaType.md) | :heavy_minus_sign: | The type of media to retrieve or filter by.

1 = movie
2 = show
3 = season
4 = episode
5 = artist
6 = album
7 = track
8 = photo_album
9 = photo

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries
| 2 | +| `SourceType` | *long* | :heavy_minus_sign: | Change the default level to which fields refer (used with type for hierarchical queries) | | +| `Sort` | *string* | :heavy_minus_sign: | Field(s) to sort by, with optional modifiers. Use comma to separate multiple fields, and :desc or :nullsLast for modifiers (e.g., "duration:desc,index") | | +| `Group` | *string* | :heavy_minus_sign: | Field to group results by (similar to SQL GROUP BY) | | +| `Limit` | *long* | :heavy_minus_sign: | Maximum number of results to return | | \ No newline at end of file diff --git a/docs/Models/Components/MediaReviewsVisibility.md b/docs/Models/Components/MediaReviewsVisibility.md new file mode 100644 index 0000000..3914d92 --- /dev/null +++ b/docs/Models/Components/MediaReviewsVisibility.md @@ -0,0 +1,13 @@ +# MediaReviewsVisibility + +Whether or not the account has media reviews visibility enabled + + +## Values + +| Name | Value | +| --------------------- | --------------------- | +| `NoOne` | 0 | +| `CriticsOnly` | 1 | +| `PlexUsersOnly` | 2 | +| `PlexUsersAndCritics` | 3 | \ No newline at end of file diff --git a/docs/Models/Components/MediaType.md b/docs/Models/Components/MediaType.md new file mode 100644 index 0000000..c2338c9 --- /dev/null +++ b/docs/Models/Components/MediaType.md @@ -0,0 +1,31 @@ +# MediaType + +The type of media to retrieve or filter by. + +1 = movie +2 = show +3 = season +4 = episode +5 = artist +6 = album +7 = track +8 = photo_album +9 = photo + +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/Components/MediaTypeString.md b/docs/Models/Components/MediaTypeString.md new file mode 100644 index 0000000..d887959 --- /dev/null +++ b/docs/Models/Components/MediaTypeString.md @@ -0,0 +1,20 @@ +# MediaTypeString + +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/Components/Metadata.md b/docs/Models/Components/Metadata.md index ff26b74..24bc27a 100644 --- a/docs/Models/Components/Metadata.md +++ b/docs/Models/Components/Metadata.md @@ -10,73 +10,77 @@ Metadata items can often live in a hierarchy with relationships between them. F ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `Title` | *object* | :heavy_minus_sign: | The title of the item (e.g. “300” or “The Simpsons”) | -| `Type` | *object* | :heavy_minus_sign: | The type of the video item, such as `movie`, `episode`, or `clip`. | -| `AbsoluteIndex` | *long* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | -| `AddedAt` | *long* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was added to the library. | -| `Art` | *object* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | -| `AudienceRating` | *double* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | -| `AudienceRatingImage` | *object* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | -| `Autotag` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Banner` | *object* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | -| `ChapterSource` | *object* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | -| `Composite` | *object* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | -| `ContentRating` | *object* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | -| `Country` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Director` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Duration` | *long* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | -| `Filter` | List<[Filter](../../Models/Components/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `Genre` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `GrandparentArt` | *string* | :heavy_minus_sign: | The `art` of the grandparent | -| `GrandparentHero` | *string* | :heavy_minus_sign: | The `hero` of the grandparent | -| `GrandparentKey` | *string* | :heavy_minus_sign: | The `key` of the grandparent | -| `GrandparentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the grandparent | -| `GrandparentTheme` | *string* | :heavy_minus_sign: | The `theme` of the grandparent | -| `GrandparentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the grandparent | -| `GrandparentTitle` | *string* | :heavy_minus_sign: | The `title` of the grandparent | -| `Guid` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Hero` | *object* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | -| `Image` | List<[Image](../../Models/Components/Image.md)> | :heavy_minus_sign: | N/A | -| `Index` | *long* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | -| `Key` | *object* | :heavy_minus_sign: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | -| `LastViewedAt` | *long* | :heavy_minus_sign: | When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. | -| `LeafCount` | *long* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | -| `Media` | List<[Media](../../Models/Components/Media.md)> | :heavy_minus_sign: | N/A | -| `OriginallyAvailableAt` | *object* | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | -| `OriginalTitle` | *object* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | -| `ParentHero` | *string* | :heavy_minus_sign: | The `hero` of the parent | -| `ParentIndex` | *long* | :heavy_minus_sign: | The `index` of the parent | -| `ParentKey` | *string* | :heavy_minus_sign: | The `key` of the parent | -| `ParentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the parent | -| `ParentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the parent | -| `ParentTitle` | *string* | :heavy_minus_sign: | The `title` of the parent | -| `PrimaryExtraKey` | *object* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | -| `Prompt` | *string* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | -| `Rating` | *double* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | -| `RatingArray` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `RatingCount` | *long* | :heavy_minus_sign: | Number of ratings under this metadata | -| `RatingImage` | *object* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | -| `RatingKey` | *object* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | -| `Role` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Search` | *bool* | :heavy_minus_sign: | Indicates this is a search directory | -| `Secondary` | *bool* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | -| `SkipChildren` | *bool* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | -| `SkipParent` | *bool* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | -| `Sort` | List<[Sort](../../Models/Components/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `Studio` | *object* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | -| `Subtype` | *object* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | -| `Summary` | *object* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | -| `Tagline` | *object* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | -| `Theme` | *object* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | -| `Thumb` | *object* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | -| `TitleSort` | *object* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | -| `UpdatedAt` | *long* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | -| `UserRating` | *double* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | -| `ViewCount` | *long* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | -| `ViewedLeafCount` | *long* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | -| `ViewOffset` | *long* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | -| `Writer` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Year` | *long* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | -| `AdditionalProperties` | Dictionary | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Title` | *string* | :heavy_check_mark: | The title of the item (e.g. “300” or “The Simpsons”) | | +| `Type` | *string* | :heavy_check_mark: | The type of the video item, such as `movie`, `episode`, or `clip`. | | +| `AbsoluteIndex` | *int* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | | +| `AddedAt` | *long* | :heavy_check_mark: | In units of seconds since the epoch, returns the time at which the item was added to the library. | | +| `Art` | *string* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | /library/metadata/58683/art/1703239236 | +| `AudienceRating` | *float* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | | +| `AudienceRatingImage` | *string* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | | +| `Autotag` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Banner` | *string* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | | +| `ChapterSource` | *string* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | media | +| `ChildCount` | *int* | :heavy_minus_sign: | The number of child items associated with this media item. | 1 | +| `Composite` | *string* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | | +| `ContentRating` | *string* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | | +| `Country` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Director` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Duration` | *int* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | | +| `Filter` | List<[Filter](../../Models/Components/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `Genre` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `GrandparentArt` | *string* | :heavy_minus_sign: | The `art` of the grandparent | | +| `GrandparentGuid` | *string* | :heavy_minus_sign: | The GUID of the grandparent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `GrandparentHero` | *string* | :heavy_minus_sign: | The `hero` of the grandparent | | +| `GrandparentKey` | *string* | :heavy_minus_sign: | The `key` of the grandparent | | +| `GrandparentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the grandparent | | +| `GrandparentTheme` | *string* | :heavy_minus_sign: | The `theme` of the grandparent | | +| `GrandparentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the grandparent | | +| `GrandparentTitle` | *string* | :heavy_minus_sign: | The `title` of the grandparent | | +| `Guid` | *string* | :heavy_minus_sign: | The globally unique identifier for the media item. | plex://movie/5d7768ba96b655001fdc0408 | +| `Guids` | List<[Models.Components.Guids](../../Models/Components/Guids.md)> | :heavy_minus_sign: | N/A | | +| `Hero` | *string* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | | +| `Image` | List<[Image](../../Models/Components/Image.md)> | :heavy_minus_sign: | N/A | | +| `Index` | *int* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | | +| `Key` | *string* | :heavy_check_mark: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | | +| `LastViewedAt` | *long* | :heavy_minus_sign: | N/A | 1556281940 | +| `LeafCount` | *int* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | | +| `Media` | List<[Media](../../Models/Components/Media.md)> | :heavy_minus_sign: | N/A | | +| `OriginallyAvailableAt` | [LocalDate](https://nodatime.org/3.1.x/api/NodaTime.LocalDate.html) | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | 2022-12-14 | +| `OriginalTitle` | *string* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | | +| `ParentGuid` | *string* | :heavy_minus_sign: | The GUID of the parent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `ParentHero` | *string* | :heavy_minus_sign: | The `hero` of the parent | | +| `ParentIndex` | *int* | :heavy_minus_sign: | The `index` of the parent | | +| `ParentKey` | *string* | :heavy_minus_sign: | The `key` of the parent | | +| `ParentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the parent | | +| `ParentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the parent | | +| `ParentTitle` | *string* | :heavy_minus_sign: | The `title` of the parent | | +| `PrimaryExtraKey` | *string* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | | +| `Prompt` | *string* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | | +| `Rating` | *float* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | | +| `RatingArray` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `RatingCount` | *int* | :heavy_minus_sign: | Number of ratings under this metadata | | +| `RatingImage` | *string* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | | +| `RatingKey` | *string* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | | +| `Role` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Search` | *bool* | :heavy_minus_sign: | Indicates this is a search directory | | +| `Secondary` | *bool* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | | +| `SkipChildren` | *bool* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | | +| `SkipParent` | *bool* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | | +| `Sort` | List<[Sort](../../Models/Components/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `Studio` | *string* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | | +| `Subtype` | *string* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | | +| `Summary` | *string* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | | +| `Tagline` | *string* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | | +| `Theme` | *string* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | /library/metadata/1/theme/1705636920 | +| `Thumb` | *string* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | /library/metadata/58683/thumb/1703239236 | +| `TitleSort` | *string* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | | +| `UpdatedAt` | *long* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | | +| `UserRating` | *float* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | | +| `ViewCount` | *int* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | | +| `ViewedLeafCount` | *int* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | | +| `ViewOffset` | *int* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | | +| `Writer` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Year` | *int* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | | +| `AdditionalProperties` | Dictionary | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Components/MetadataItem.md b/docs/Models/Components/MetadataItem.md index 0299d2f..e68013a 100644 --- a/docs/Models/Components/MetadataItem.md +++ b/docs/Models/Components/MetadataItem.md @@ -10,74 +10,78 @@ Metadata items can often live in a hierarchy with relationships between them. F ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `Title` | *object* | :heavy_minus_sign: | The title of the item (e.g. “300” or “The Simpsons”) | -| `Type` | *object* | :heavy_minus_sign: | The type of the video item, such as `movie`, `episode`, or `clip`. | -| `AbsoluteIndex` | *long* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | -| `AddedAt` | *long* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was added to the library. | -| `Art` | *object* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | -| `AudienceRating` | *double* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | -| `AudienceRatingImage` | *object* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | -| `Autotag` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Banner` | *object* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | -| `ChapterSource` | *object* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | -| `Composite` | *object* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | -| `ContentRating` | *object* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | -| `Country` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Director` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Duration` | *long* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | -| `Filter` | List<[Filter](../../Models/Components/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `Genre` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `GrandparentArt` | *string* | :heavy_minus_sign: | The `art` of the grandparent | -| `GrandparentHero` | *string* | :heavy_minus_sign: | The `hero` of the grandparent | -| `GrandparentKey` | *string* | :heavy_minus_sign: | The `key` of the grandparent | -| `GrandparentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the grandparent | -| `GrandparentTheme` | *string* | :heavy_minus_sign: | The `theme` of the grandparent | -| `GrandparentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the grandparent | -| `GrandparentTitle` | *string* | :heavy_minus_sign: | The `title` of the grandparent | -| `Guid` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Hero` | *object* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | -| `Image` | List<[Image](../../Models/Components/Image.md)> | :heavy_minus_sign: | N/A | -| `Index` | *long* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | -| `Key` | *object* | :heavy_minus_sign: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | -| `LastViewedAt` | *long* | :heavy_minus_sign: | When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. | -| `LeafCount` | *long* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | -| `Media` | List<[Media](../../Models/Components/Media.md)> | :heavy_minus_sign: | N/A | -| `OriginallyAvailableAt` | *object* | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | -| `OriginalTitle` | *object* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | -| `ParentHero` | *string* | :heavy_minus_sign: | The `hero` of the parent | -| `ParentIndex` | *long* | :heavy_minus_sign: | The `index` of the parent | -| `ParentKey` | *string* | :heavy_minus_sign: | The `key` of the parent | -| `ParentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the parent | -| `ParentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the parent | -| `ParentTitle` | *string* | :heavy_minus_sign: | The `title` of the parent | -| `PrimaryExtraKey` | *object* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | -| `Prompt` | *string* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | -| `Rating` | *double* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | -| `RatingArray` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `RatingCount` | *long* | :heavy_minus_sign: | Number of ratings under this metadata | -| `RatingImage` | *object* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | -| `RatingKey` | *object* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | -| `Role` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Search` | *bool* | :heavy_minus_sign: | Indicates this is a search directory | -| `Secondary` | *bool* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | -| `SkipChildren` | *bool* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | -| `SkipParent` | *bool* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | -| `Sort` | List<[Sort](../../Models/Components/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `Studio` | *object* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | -| `Subtype` | *object* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | -| `Summary` | *object* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | -| `Tagline` | *object* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | -| `Theme` | *object* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | -| `Thumb` | *object* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | -| `TitleSort` | *object* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | -| `UpdatedAt` | *long* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | -| `UserRating` | *double* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | -| `ViewCount` | *long* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | -| `ViewedLeafCount` | *long* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | -| `ViewOffset` | *long* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | -| `Writer` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Year` | *long* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | -| `MetadataItemValue` | List<[Items](../../Models/Components/Items.md)> | :heavy_minus_sign: | N/A | -| `AdditionalProperties` | Dictionary | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Title` | *string* | :heavy_check_mark: | The title of the item (e.g. “300” or “The Simpsons”) | | +| `Type` | *string* | :heavy_check_mark: | The type of the video item, such as `movie`, `episode`, or `clip`. | | +| `AbsoluteIndex` | *int* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | | +| `AddedAt` | *long* | :heavy_check_mark: | In units of seconds since the epoch, returns the time at which the item was added to the library. | | +| `Art` | *string* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | /library/metadata/58683/art/1703239236 | +| `AudienceRating` | *float* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | | +| `AudienceRatingImage` | *string* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | | +| `Autotag` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Banner` | *string* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | | +| `ChapterSource` | *string* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | media | +| `ChildCount` | *int* | :heavy_minus_sign: | The number of child items associated with this media item. | 1 | +| `Composite` | *string* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | | +| `ContentRating` | *string* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | | +| `Country` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Director` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Duration` | *int* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | | +| `Filter` | List<[Filter](../../Models/Components/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `Genre` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `GrandparentArt` | *string* | :heavy_minus_sign: | The `art` of the grandparent | | +| `GrandparentGuid` | *string* | :heavy_minus_sign: | The GUID of the grandparent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `GrandparentHero` | *string* | :heavy_minus_sign: | The `hero` of the grandparent | | +| `GrandparentKey` | *string* | :heavy_minus_sign: | The `key` of the grandparent | | +| `GrandparentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the grandparent | | +| `GrandparentTheme` | *string* | :heavy_minus_sign: | The `theme` of the grandparent | | +| `GrandparentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the grandparent | | +| `GrandparentTitle` | *string* | :heavy_minus_sign: | The `title` of the grandparent | | +| `Guid` | *string* | :heavy_minus_sign: | The globally unique identifier for the media item. | plex://movie/5d7768ba96b655001fdc0408 | +| `Guids` | List<[MediaContainerWithNestedMetadataGuids](../../Models/Components/MediaContainerWithNestedMetadataGuids.md)> | :heavy_minus_sign: | N/A | | +| `Hero` | *string* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | | +| `Image` | List<[Image](../../Models/Components/Image.md)> | :heavy_minus_sign: | N/A | | +| `Index` | *int* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | | +| `Key` | *string* | :heavy_check_mark: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | | +| `LastViewedAt` | *long* | :heavy_minus_sign: | N/A | 1556281940 | +| `LeafCount` | *int* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | | +| `Media` | List<[Media](../../Models/Components/Media.md)> | :heavy_minus_sign: | N/A | | +| `OriginallyAvailableAt` | [LocalDate](https://nodatime.org/3.1.x/api/NodaTime.LocalDate.html) | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | 2022-12-14 | +| `OriginalTitle` | *string* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | | +| `ParentGuid` | *string* | :heavy_minus_sign: | The GUID of the parent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `ParentHero` | *string* | :heavy_minus_sign: | The `hero` of the parent | | +| `ParentIndex` | *int* | :heavy_minus_sign: | The `index` of the parent | | +| `ParentKey` | *string* | :heavy_minus_sign: | The `key` of the parent | | +| `ParentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the parent | | +| `ParentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the parent | | +| `ParentTitle` | *string* | :heavy_minus_sign: | The `title` of the parent | | +| `PrimaryExtraKey` | *string* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | | +| `Prompt` | *string* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | | +| `Rating` | *float* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | | +| `RatingArray` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `RatingCount` | *int* | :heavy_minus_sign: | Number of ratings under this metadata | | +| `RatingImage` | *string* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | | +| `RatingKey` | *string* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | | +| `Role` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Search` | *bool* | :heavy_minus_sign: | Indicates this is a search directory | | +| `Secondary` | *bool* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | | +| `SkipChildren` | *bool* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | | +| `SkipParent` | *bool* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | | +| `Sort` | List<[Sort](../../Models/Components/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `Studio` | *string* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | | +| `Subtype` | *string* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | | +| `Summary` | *string* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | | +| `Tagline` | *string* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | | +| `Theme` | *string* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | /library/metadata/1/theme/1705636920 | +| `Thumb` | *string* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | /library/metadata/58683/thumb/1703239236 | +| `TitleSort` | *string* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | | +| `UpdatedAt` | *long* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | | +| `UserRating` | *float* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | | +| `ViewCount` | *int* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | | +| `ViewedLeafCount` | *int* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | | +| `ViewOffset` | *int* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | | +| `Writer` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Year` | *int* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | | +| `MetadataItemValue` | List<[Items](../../Models/Components/Items.md)> | :heavy_minus_sign: | N/A | | +| `AdditionalProperties` | Dictionary | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Components/Part.md b/docs/Models/Components/Part.md index aa74d4f..5fc3ed2 100644 --- a/docs/Models/Components/Part.md +++ b/docs/Models/Components/Part.md @@ -8,15 +8,18 @@ | Field | Type | Required | Description | Example | | ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | -| `AudioProfile` | *object* | :heavy_minus_sign: | N/A | lc | -| `Container` | *object* | :heavy_minus_sign: | The container of the media file, such as `mp4` or `mkv` | mov | -| `Duration` | *long* | :heavy_minus_sign: | The duration of the media item, in milliseconds | 150192 | -| `File` | *object* | :heavy_minus_sign: | The local file path at which the part is stored on the server | /home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov | +| `Accessible` | *bool* | :heavy_minus_sign: | Indicates if the part is accessible. | true | +| `AudioProfile` | *string* | :heavy_minus_sign: | N/A | lc | +| `Container` | *string* | :heavy_minus_sign: | The container of the media file, such as `mp4` or `mkv` | mov | +| `Duration` | *int* | :heavy_minus_sign: | The duration of the media item, in milliseconds | 150192 | +| `Exists` | *bool* | :heavy_minus_sign: | Indicates if the part exists. | true | +| `File` | *string* | :heavy_minus_sign: | The local file path at which the part is stored on the server | /home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov | | `Has64bitOffsets` | *bool* | :heavy_minus_sign: | N/A | false | -| `Id` | *long* | :heavy_minus_sign: | N/A | 1 | -| `Key` | *object* | :heavy_minus_sign: | The key from which the media can be streamed | /library/parts/1/1531779263/file.mov | +| `Id` | *long* | :heavy_check_mark: | N/A | 1 | +| `Indexes` | *string* | :heavy_minus_sign: | N/A | sd | +| `Key` | *string* | :heavy_check_mark: | The key from which the media can be streamed | /library/parts/1/1531779263/file.mov | | `OptimizedForStreaming` | *bool* | :heavy_minus_sign: | N/A | false | | `Size` | *long* | :heavy_minus_sign: | The size of the media, in bytes | 105355654 | | `Stream` | List<[Stream](../../Models/Components/Stream.md)> | :heavy_minus_sign: | N/A | | -| `VideoProfile` | *object* | :heavy_minus_sign: | N/A | main | +| `VideoProfile` | *string* | :heavy_minus_sign: | N/A | main | | `AdditionalProperties` | Dictionary | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Components/PlexDevice.md b/docs/Models/Components/PlexDevice.md new file mode 100644 index 0000000..2048fa6 --- /dev/null +++ b/docs/Models/Components/PlexDevice.md @@ -0,0 +1,31 @@ +# PlexDevice + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `Name` | *string* | :heavy_check_mark: | N/A | | +| `Product` | *string* | :heavy_check_mark: | N/A | | +| `ProductVersion` | *string* | :heavy_check_mark: | N/A | | +| `Platform` | *string* | :heavy_check_mark: | N/A | | +| `PlatformVersion` | *string* | :heavy_check_mark: | N/A | | +| `Device` | *string* | :heavy_check_mark: | N/A | | +| `ClientIdentifier` | *string* | :heavy_check_mark: | N/A | | +| `CreatedAt` | [DateTime](https://learn.microsoft.com/en-us/dotnet/api/system.datetime?view=net-5.0) | :heavy_check_mark: | N/A | 2019-06-24T11:38:02Z | +| `LastSeenAt` | [DateTime](https://learn.microsoft.com/en-us/dotnet/api/system.datetime?view=net-5.0) | :heavy_check_mark: | N/A | 2019-06-24T11:38:02Z | +| `Provides` | *string* | :heavy_check_mark: | N/A | | +| `OwnerId` | *long* | :heavy_check_mark: | ownerId is null when the device is owned by the token used to send the request | | +| `SourceTitle` | *string* | :heavy_check_mark: | N/A | | +| `PublicAddress` | *string* | :heavy_check_mark: | N/A | | +| `AccessToken` | *string* | :heavy_check_mark: | N/A | | +| `Owned` | *bool* | :heavy_check_mark: | N/A | | +| `Home` | *bool* | :heavy_check_mark: | N/A | | +| `Synced` | *bool* | :heavy_check_mark: | N/A | | +| `Relay` | *bool* | :heavy_check_mark: | N/A | | +| `Presence` | *bool* | :heavy_check_mark: | N/A | | +| `HttpsRequired` | *bool* | :heavy_check_mark: | N/A | | +| `PublicAddressMatches` | *bool* | :heavy_check_mark: | N/A | | +| `DnsRebindingProtection` | *bool* | :heavy_check_mark: | N/A | | +| `NatLoopbackSupported` | *bool* | :heavy_check_mark: | N/A | | +| `Connections` | List<[Connections](../../Models/Components/Connections.md)> | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/Models/Components/PlexDeviceProtocol.md b/docs/Models/Components/PlexDeviceProtocol.md new file mode 100644 index 0000000..052b308 --- /dev/null +++ b/docs/Models/Components/PlexDeviceProtocol.md @@ -0,0 +1,11 @@ +# PlexDeviceProtocol + +The protocol used for the connection (http, https, etc) + + +## Values + +| Name | Value | +| ------- | ------- | +| `Http` | http | +| `Https` | https | \ No newline at end of file diff --git a/docs/Models/Components/Services.md b/docs/Models/Components/Services.md new file mode 100644 index 0000000..f12b9f9 --- /dev/null +++ b/docs/Models/Components/Services.md @@ -0,0 +1,12 @@ +# Services + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | +| `Identifier` | *string* | :heavy_check_mark: | N/A | metadata-dev | +| `Endpoint` | *string* | :heavy_check_mark: | N/A | https://epg.provider.plex.tv | +| `Token` | *string* | :heavy_check_mark: | N/A | DjoMtqFAGRL1uVtCyF1dKIorTbShJeqv | +| `Secret` | *string* | :heavy_check_mark: | N/A | | +| `Status` | [UserPlexAccountStatus](../../Models/Components/UserPlexAccountStatus.md) | :heavy_check_mark: | N/A | online | \ No newline at end of file diff --git a/docs/Models/Components/Stream.md b/docs/Models/Components/Stream.md index 9ebfdb0..a991ddc 100644 --- a/docs/Models/Components/Stream.md +++ b/docs/Models/Components/Stream.md @@ -6,35 +6,58 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | -| `Default` | *bool* | :heavy_minus_sign: | N/A | true | -| `AudioChannelLayout` | *object* | :heavy_minus_sign: | N/A | stereo | -| `BitDepth` | *long* | :heavy_minus_sign: | N/A | 8 | -| `Bitrate` | *long* | :heavy_minus_sign: | N/A | 5466 | -| `CanAutoSync` | *bool* | :heavy_minus_sign: | For subtitle streams only. If `true` then the server can attempt to automatically sync the subtitle timestamps with the video. | true | -| `ChromaLocation` | *object* | :heavy_minus_sign: | N/A | topleft | -| `ChromaSubsampling` | *object* | :heavy_minus_sign: | N/A | 4:2:0 | -| `Codec` | *object* | :heavy_minus_sign: | The codec of the stream, such as `h264` or `aac` | h264 | -| `ColorPrimaries` | *object* | :heavy_minus_sign: | N/A | bt709 | -| `ColorRange` | *object* | :heavy_minus_sign: | N/A | tv | -| `ColorSpace` | *object* | :heavy_minus_sign: | N/A | bt709 | -| `ColorTrc` | *object* | :heavy_minus_sign: | N/A | bt709 | -| `DisplayTitle` | *object* | :heavy_minus_sign: | A friendly name for the stream, often comprised of the language and codec information | English (H.264 Main) | -| `FrameRate` | *double* | :heavy_minus_sign: | N/A | 23.976 | -| `HasScalingMatrix` | *object* | :heavy_minus_sign: | N/A | false | -| `Height` | *long* | :heavy_minus_sign: | N/A | 544 | -| `Id` | *long* | :heavy_minus_sign: | N/A | 1 | -| `Index` | *long* | :heavy_minus_sign: | If the stream is part of the `Part` and not an external resource, the index of the stream within that part | 0 | -| `Key` | *object* | :heavy_minus_sign: | If the stream is independently streamable, the key from which it can be streamed | /library/streams/1 | -| `Language` | *object* | :heavy_minus_sign: | N/A | English | -| `LanguageCode` | *object* | :heavy_minus_sign: | The three character language code for the stream contents | eng | -| `Level` | *long* | :heavy_minus_sign: | N/A | 31 | -| `Profile` | *object* | :heavy_minus_sign: | N/A | main | -| `RefFrames` | *long* | :heavy_minus_sign: | N/A | 2 | -| `SamplingRate` | *long* | :heavy_minus_sign: | N/A | 48000 | -| `Selected` | *bool* | :heavy_minus_sign: | N/A | | -| `StreamIdentifier` | *long* | :heavy_minus_sign: | N/A | 1 | -| `StreamType` | *long* | :heavy_minus_sign: | A number indicating the type of the stream. `1` for video, `2` for audio, `3` for subtitles, `4` for lyrics | 1 | -| `Width` | *long* | :heavy_minus_sign: | N/A | 1280 | -| `AdditionalProperties` | Dictionary | :heavy_minus_sign: | N/A | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | +| `Default` | *bool* | :heavy_minus_sign: | Indicates if this stream is default. | true | +| `AudioChannelLayout` | *string* | :heavy_minus_sign: | Audio channel layout. | 5.1(side) | +| `Channels` | *int* | :heavy_minus_sign: | Number of audio channels (for audio streams). | 6 | +| `BitDepth` | *int* | :heavy_minus_sign: | Bit depth of the video stream. | 10 | +| `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 | +| `Bitrate` | *int* | :heavy_minus_sign: | Bitrate of the stream. | 24743 | +| `CanAutoSync` | *bool* | :heavy_minus_sign: | Indicates if the stream can auto-sync. | false | +| `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 | +| `Codec` | *string* | :heavy_check_mark: | Codec used by the stream. | hevc | +| `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 | +| `DisplayTitle` | *string* | :heavy_check_mark: | Display title for the stream. | 4K DoVi/HDR10 (HEVC Main 10) | +| `ExtendedDisplayTitle` | *string* | :heavy_minus_sign: | Extended display title for the stream. | 4K DoVi/HDR10 (HEVC Main 10) | +| `FrameRate` | *float* | :heavy_minus_sign: | Frame rate of the stream. | 23.976 | +| `HasScalingMatrix` | *bool* | :heavy_minus_sign: | N/A | false | +| `Height` | *int* | :heavy_minus_sign: | Height of the video stream. | 1602 | +| `Id` | *int* | :heavy_check_mark: | Unique stream identifier. | 1002625 | +| `Index` | *int* | :heavy_minus_sign: | Index of the stream. | 0 | +| `Key` | *string* | :heavy_check_mark: | Key to access this stream part. | /library/streams/216389 | +| `Language` | *string* | :heavy_minus_sign: | Language of the stream. | English | +| `LanguageCode` | *string* | :heavy_minus_sign: | ISO language code. | eng | +| `LanguageTag` | *string* | :heavy_minus_sign: | Language tag (e.g., en). | en | +| `Format` | *string* | :heavy_minus_sign: | Format of the stream (e.g., srt). | srt | +| `HeaderCompression` | *bool* | :heavy_minus_sign: | Indicates whether header compression is enabled. | true | +| `Level` | *int* | :heavy_minus_sign: | Video level. | 150 | +| `Original` | *bool* | :heavy_minus_sign: | Indicates if this is the original stream. | true | +| `Profile` | *string* | :heavy_minus_sign: | Video profile. | main 10 | +| `RefFrames` | *int* | :heavy_minus_sign: | Number of reference frames. | 1 | +| `SamplingRate` | *int* | :heavy_minus_sign: | Sampling rate for the audio stream. | 48000 | +| `ScanType` | *string* | :heavy_minus_sign: | N/A | progressive | +| `EmbeddedInVideo` | *string* | :heavy_minus_sign: | N/A | progressive | +| `Selected` | *bool* | :heavy_minus_sign: | Indicates if this stream is selected (applicable for audio streams). | true | +| `Forced` | *bool* | :heavy_minus_sign: | N/A | true | +| `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 | +| `StreamIdentifier` | *int* | :heavy_minus_sign: | N/A | 1 | +| `StreamType` | *long* | :heavy_check_mark: | Stream type:
- VIDEO = 1
- AUDIO = 2
- SUBTITLE = 3
| | +| `Width` | *int* | :heavy_minus_sign: | Width of the video stream. | 3840 | +| `AdditionalProperties` | Dictionary | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Components/Subscription.md b/docs/Models/Components/Subscription.md new file mode 100644 index 0000000..47e95d3 --- /dev/null +++ b/docs/Models/Components/Subscription.md @@ -0,0 +1,15 @@ +# Subscription + +If the account's Plex Pass subscription is active + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | +| `Features` | List<*string*> | :heavy_minus_sign: | List of features allowed on your Plex Pass subscription | | +| `Active` | *bool* | :heavy_minus_sign: | If the account's Plex Pass subscription is active | true | +| `SubscribedAt` | *string* | :heavy_minus_sign: | Date the account subscribed to Plex Pass | 2021-04-12T18:21:12Z | +| `Status` | [UserPlexAccountSubscriptionStatus](../../Models/Components/UserPlexAccountSubscriptionStatus.md) | :heavy_minus_sign: | String representation of subscriptionActive | Inactive | +| `PaymentService` | *string* | :heavy_minus_sign: | Payment service used for your Plex Pass subscription | | +| `Plan` | *string* | :heavy_minus_sign: | Name of Plex Pass subscription plan | | \ No newline at end of file diff --git a/docs/Models/Components/Tag.md b/docs/Models/Components/Tag.md index ac5453b..b6c731e 100644 --- a/docs/Models/Components/Tag.md +++ b/docs/Models/Components/Tag.md @@ -6,15 +6,15 @@ A variety of extra information about a metadata item is included as tags. These ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | -| `Confidence` | *double* | :heavy_minus_sign: | Measure of the confidence of an automatic tag | | -| `Context` | *string* | :heavy_minus_sign: | N/A | | -| `Filter` | *object* | :heavy_minus_sign: | A filter parameter that can be used to query for more content that matches this tag value. | actor=49 | -| `Id` | *long* | :heavy_minus_sign: | N/A | | -| `RatingKey` | *string* | :heavy_minus_sign: | N/A | | -| `Role` | *object* | :heavy_minus_sign: | The role this actor played | Secretary | -| `TagValue` | *object* | :heavy_minus_sign: | The value of the tag (the name) | Shaun Lawton | -| `TagKey` | *object* | :heavy_minus_sign: | Plex identifier for this tag which can be used to fetch additional information from plex.tv | 5d3ee12c4cde6a001c3e0b27 | -| `TagType` | *long* | :heavy_minus_sign: | N/A | | -| `Thumb` | *object* | :heavy_minus_sign: | N/A | http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg | \ No newline at end of file +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `Confidence` | *double* | :heavy_minus_sign: | Measure of the confidence of an automatic tag | | +| `Context` | *string* | :heavy_minus_sign: | N/A | | +| `Filter` | *string* | :heavy_minus_sign: | A filter parameter that can be used to query for more content that matches this tag value. | actor=49 | +| `Id` | *int* | :heavy_minus_sign: | N/A | | +| `RatingKey` | *string* | :heavy_minus_sign: | 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. | 58683 | +| `Role` | *string* | :heavy_minus_sign: | The role this actor played | Secretary | +| `TagValue` | *string* | :heavy_check_mark: | The value of the tag (the name) | Shaun Lawton | +| `TagKey` | *string* | :heavy_minus_sign: | Plex identifier for this tag which can be used to fetch additional information from plex.tv | 5d3ee12c4cde6a001c3e0b27 | +| `TagType` | *int* | :heavy_minus_sign: | N/A | | +| `Thumb` | *string* | :heavy_minus_sign: | N/A | http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg | \ No newline at end of file diff --git a/docs/Models/Components/UserPlexAccount.md b/docs/Models/Components/UserPlexAccount.md new file mode 100644 index 0000000..12c39aa --- /dev/null +++ b/docs/Models/Components/UserPlexAccount.md @@ -0,0 +1,48 @@ +# UserPlexAccount + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `AdsConsent` | *bool* | :heavy_minus_sign: | Unknown | | +| `AdsConsentReminderAt` | *long* | :heavy_minus_sign: | N/A | 1556281940 | +| `AdsConsentSetAt` | *long* | :heavy_minus_sign: | N/A | 1556281940 | +| `Anonymous` | *bool* | :heavy_minus_sign: | Unknown | | +| `AuthToken` | *string* | :heavy_check_mark: | The account token | CxoUzBTSV5hsxjTpFKaf | +| `BackupCodesCreated` | *bool* | :heavy_minus_sign: | If the two-factor authentication backup codes have been created | | +| `Confirmed` | *bool* | :heavy_minus_sign: | If the account has been confirmed | | +| `Country` | *string* | :heavy_minus_sign: | The account country | US | +| `Email` | *string* | :heavy_check_mark: | The account email address | username@email.com | +| `EmailOnlyAuth` | *bool* | :heavy_minus_sign: | If login with email only is enabled | | +| `ExperimentalFeatures` | *bool* | :heavy_minus_sign: | If experimental features are enabled | | +| `FriendlyName` | *string* | :heavy_check_mark: | Your account full name | friendlyUsername | +| `Entitlements` | List<*string*> | :heavy_minus_sign: | List of devices your allowed to use with this account | [] | +| `Guest` | *bool* | :heavy_minus_sign: | If the account is a Plex Home guest user | | +| `HasPassword` | *bool* | :heavy_minus_sign: | If the account has a password | | +| `Home` | *bool* | :heavy_minus_sign: | If the account is a Plex Home user | | +| `HomeAdmin` | *bool* | :heavy_minus_sign: | If the account is the Plex Home admin | | +| `HomeSize` | *int* | :heavy_minus_sign: | The number of accounts in the Plex Home | 1 | +| `Id` | *int* | :heavy_check_mark: | The Plex account ID | 13692262 | +| `JoinedAt` | *long* | :heavy_check_mark: | Unix epoch datetime in seconds | 1556281940 | +| `Locale` | *string* | :heavy_minus_sign: | The account locale | | +| `MailingListActive` | *bool* | :heavy_minus_sign: | If you are subscribed to the Plex newsletter | | +| `MailingListStatus` | [Models.Components.MailingListStatus](../../Models/Components/MailingListStatus.md) | :heavy_minus_sign: | Your current mailing list status | active | +| `MaxHomeSize` | *int* | :heavy_minus_sign: | The maximum number of accounts allowed in the Plex Home | 15 | +| ~~`Pin`~~ | *string* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

[Might be removed] The hashed Plex Home PIN | | +| `Profile` | [UserProfile](../../Models/Components/UserProfile.md) | :heavy_minus_sign: | N/A | | +| `Protected` | *bool* | :heavy_minus_sign: | If the account has a Plex Home PIN enabled | | +| `RememberExpiresAt` | *long* | :heavy_minus_sign: | Unix epoch datetime in seconds | 1556281940 | +| `Restricted` | *bool* | :heavy_minus_sign: | If the account is a Plex Home managed user | | +| `Roles` | List<*string*> | :heavy_minus_sign: | [Might be removed] List of account roles. Plexpass membership listed here | | +| `ScrobbleTypes` | *string* | :heavy_minus_sign: | Unknown | | +| `Services` | List<[Models.Components.Services](../../Models/Components/Services.md)> | :heavy_minus_sign: | N/A | | +| `Subscription` | [Models.Components.Subscription](../../Models/Components/Subscription.md) | :heavy_minus_sign: | If the account's Plex Pass subscription is active | | +| `SubscriptionDescription` | *string* | :heavy_minus_sign: | Description of the Plex Pass subscription | | +| `Subscriptions` | List<[UserPlexAccountSubscription](../../Models/Components/UserPlexAccountSubscription.md)> | :heavy_minus_sign: | N/A | | +| `Thumb` | *string* | :heavy_minus_sign: | URL of the account thumbnail | https://plex.tv/users/a4f43c1ebfde43a5/avatar?c=8372075101 | +| `Title` | *string* | :heavy_check_mark: | The title of the account (username or friendly name) | UsernameTitle | +| `TwoFactorEnabled` | *bool* | :heavy_minus_sign: | If two-factor authentication is enabled | | +| `Username` | *string* | :heavy_check_mark: | The account username | Username | +| `Uuid` | *string* | :heavy_check_mark: | The account UUID | dae343c1f45beb4f | +| `AttributionPartner` | *string* | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Components/UserPlexAccountStatus.md b/docs/Models/Components/UserPlexAccountStatus.md new file mode 100644 index 0000000..eef031c --- /dev/null +++ b/docs/Models/Components/UserPlexAccountStatus.md @@ -0,0 +1,9 @@ +# UserPlexAccountStatus + + +## Values + +| Name | Value | +| --------- | --------- | +| `Online` | online | +| `Offline` | offline | \ No newline at end of file diff --git a/docs/Models/Components/UserPlexAccountSubscription.md b/docs/Models/Components/UserPlexAccountSubscription.md new file mode 100644 index 0000000..7bd5ff9 --- /dev/null +++ b/docs/Models/Components/UserPlexAccountSubscription.md @@ -0,0 +1,13 @@ +# UserPlexAccountSubscription + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | +| `Features` | List<*string*> | :heavy_minus_sign: | List of features allowed on your Plex Pass subscription | | +| `Active` | *bool* | :heavy_minus_sign: | If the account's Plex Pass subscription is active | true | +| `SubscribedAt` | *string* | :heavy_minus_sign: | Date the account subscribed to Plex Pass | 2021-04-12T18:21:12Z | +| `Status` | [UserPlexAccountSubscriptionsStatus](../../Models/Components/UserPlexAccountSubscriptionsStatus.md) | :heavy_minus_sign: | String representation of subscriptionActive | Inactive | +| `PaymentService` | *string* | :heavy_minus_sign: | Payment service used for your Plex Pass subscription | | +| `Plan` | *string* | :heavy_minus_sign: | Name of Plex Pass subscription plan | | \ No newline at end of file diff --git a/docs/Models/Components/UserPlexAccountSubscriptionStatus.md b/docs/Models/Components/UserPlexAccountSubscriptionStatus.md new file mode 100644 index 0000000..6f7bbe1 --- /dev/null +++ b/docs/Models/Components/UserPlexAccountSubscriptionStatus.md @@ -0,0 +1,11 @@ +# UserPlexAccountSubscriptionStatus + +String representation of subscriptionActive + + +## Values + +| Name | Value | +| ---------- | ---------- | +| `Inactive` | Inactive | +| `Active` | Active | \ No newline at end of file diff --git a/docs/Models/Components/UserPlexAccountSubscriptionsStatus.md b/docs/Models/Components/UserPlexAccountSubscriptionsStatus.md new file mode 100644 index 0000000..b7fd975 --- /dev/null +++ b/docs/Models/Components/UserPlexAccountSubscriptionsStatus.md @@ -0,0 +1,11 @@ +# UserPlexAccountSubscriptionsStatus + +String representation of subscriptionActive + + +## Values + +| Name | Value | +| ---------- | ---------- | +| `Inactive` | Inactive | +| `Active` | Active | \ No newline at end of file diff --git a/docs/Models/Components/UserProfile.md b/docs/Models/Components/UserProfile.md new file mode 100644 index 0000000..e97fb86 --- /dev/null +++ b/docs/Models/Components/UserProfile.md @@ -0,0 +1,19 @@ +# UserProfile + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | +| `AutoSelectAudio` | *bool* | :heavy_minus_sign: | If the account has automatically select audio and subtitle tracks enabled | true | +| `DefaultAudioLanguage` | *string* | :heavy_check_mark: | The preferred audio language for the account | ja | +| `DefaultAudioAccessibility` | [DefaultAudioAccessibility](../../Models/Components/DefaultAudioAccessibility.md) | :heavy_minus_sign: | N/A | 0 | +| `DefaultAudioLanguages` | List<*string*> | :heavy_minus_sign: | The preferred audio languages for the account | | +| `DefaultSubtitleLanguage` | *string* | :heavy_check_mark: | The preferred subtitle language for the account | en | +| `DefaultSubtitleLanguages` | List<*string*> | :heavy_minus_sign: | The preferred subtitle languages for the account | | +| `AutoSelectSubtitle` | [AutoSelectSubtitle](../../Models/Components/AutoSelectSubtitle.md) | :heavy_minus_sign: | N/A | 1 | +| `DefaultSubtitleAccessibility` | [DefaultSubtitleAccessibility](../../Models/Components/DefaultSubtitleAccessibility.md) | :heavy_minus_sign: | N/A | 1 | +| `DefaultSubtitleForced` | [DefaultSubtitleForced](../../Models/Components/DefaultSubtitleForced.md) | :heavy_minus_sign: | N/A | 1 | +| `WatchedIndicator` | [WatchedIndicator](../../Models/Components/WatchedIndicator.md) | :heavy_minus_sign: | N/A | 1 | +| `MediaReviewsVisibility` | [MediaReviewsVisibility](../../Models/Components/MediaReviewsVisibility.md) | :heavy_minus_sign: | N/A | 1 | +| `MediaReviewsLanguages` | List<*string*> | :heavy_minus_sign: | The languages for media reviews visibility | | \ No newline at end of file diff --git a/docs/Models/Components/WatchedIndicator.md b/docs/Models/Components/WatchedIndicator.md new file mode 100644 index 0000000..203ae6a --- /dev/null +++ b/docs/Models/Components/WatchedIndicator.md @@ -0,0 +1,13 @@ +# WatchedIndicator + +Whether or not media watched indicators are enabled (little orange dot on media) + + +## Values + +| Name | Value | +| ------------------ | ------------------ | +| `None` | 0 | +| `MoviesAndTvShows` | 1 | +| `Movies` | 2 | +| `TvShows` | 3 | \ No newline at end of file diff --git a/docs/Models/Errors/Errors.md b/docs/Models/Errors/Errors.md new file mode 100644 index 0000000..27147ba --- /dev/null +++ b/docs/Models/Errors/Errors.md @@ -0,0 +1,10 @@ +# Errors + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `Code` | *int* | :heavy_minus_sign: | N/A | 1000 | +| `Message` | *string* | :heavy_minus_sign: | N/A | X-Plex-Client-Identifier is missing | +| `Status` | *int* | :heavy_minus_sign: | N/A | 400 | \ No newline at end of file diff --git a/docs/Models/Errors/GetServerResourcesErrors.md b/docs/Models/Errors/GetServerResourcesErrors.md new file mode 100644 index 0000000..fac9555 --- /dev/null +++ b/docs/Models/Errors/GetServerResourcesErrors.md @@ -0,0 +1,10 @@ +# GetServerResourcesErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `Code` | *int* | :heavy_minus_sign: | N/A | 1001 | +| `Message` | *string* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `Status` | *int* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/Models/Errors/GetServerResourcesUnauthorized.md b/docs/Models/Errors/GetServerResourcesUnauthorized.md new file mode 100644 index 0000000..eb9e38f --- /dev/null +++ b/docs/Models/Errors/GetServerResourcesUnauthorized.md @@ -0,0 +1,11 @@ +# GetServerResourcesUnauthorized + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `Errors` | List<[GetServerResourcesErrors](../../Models/Errors/GetServerResourcesErrors.md)> | :heavy_minus_sign: | N/A | +| `RawResponse` | [HttpResponseMessage](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpresponsemessage?view=net-5.0) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/Models/Errors/GetTokenDetailsBadRequest.md b/docs/Models/Errors/GetTokenDetailsBadRequest.md new file mode 100644 index 0000000..c588ebe --- /dev/null +++ b/docs/Models/Errors/GetTokenDetailsBadRequest.md @@ -0,0 +1,11 @@ +# GetTokenDetailsBadRequest + +Bad Request - A parameter was not specified, or was specified incorrectly. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `Errors` | List<[Errors](../../Models/Errors/Errors.md)> | :heavy_minus_sign: | N/A | +| `RawResponse` | [HttpResponseMessage](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpresponsemessage?view=net-5.0) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/Models/Errors/GetTokenDetailsErrors.md b/docs/Models/Errors/GetTokenDetailsErrors.md new file mode 100644 index 0000000..5086fcd --- /dev/null +++ b/docs/Models/Errors/GetTokenDetailsErrors.md @@ -0,0 +1,10 @@ +# GetTokenDetailsErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `Code` | *int* | :heavy_minus_sign: | N/A | 1001 | +| `Message` | *string* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `Status` | *int* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/Models/Errors/GetTokenDetailsUnauthorized.md b/docs/Models/Errors/GetTokenDetailsUnauthorized.md new file mode 100644 index 0000000..281813b --- /dev/null +++ b/docs/Models/Errors/GetTokenDetailsUnauthorized.md @@ -0,0 +1,11 @@ +# GetTokenDetailsUnauthorized + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `Errors` | List<[GetTokenDetailsErrors](../../Models/Errors/GetTokenDetailsErrors.md)> | :heavy_minus_sign: | N/A | +| `RawResponse` | [HttpResponseMessage](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpresponsemessage?view=net-5.0) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/Models/Errors/GetUsersBadRequest.md b/docs/Models/Errors/GetUsersBadRequest.md new file mode 100644 index 0000000..d8c38a6 --- /dev/null +++ b/docs/Models/Errors/GetUsersBadRequest.md @@ -0,0 +1,11 @@ +# GetUsersBadRequest + +Bad Request - A parameter was not specified, or was specified incorrectly. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `Errors` | List<[GetUsersErrors](../../Models/Errors/GetUsersErrors.md)> | :heavy_minus_sign: | N/A | +| `RawResponse` | [HttpResponseMessage](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpresponsemessage?view=net-5.0) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/Models/Errors/GetUsersErrors.md b/docs/Models/Errors/GetUsersErrors.md new file mode 100644 index 0000000..af99220 --- /dev/null +++ b/docs/Models/Errors/GetUsersErrors.md @@ -0,0 +1,10 @@ +# GetUsersErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `Code` | *int* | :heavy_minus_sign: | N/A | 1000 | +| `Message` | *string* | :heavy_minus_sign: | N/A | X-Plex-Client-Identifier is missing | +| `Status` | *int* | :heavy_minus_sign: | N/A | 400 | \ No newline at end of file diff --git a/docs/Models/Errors/GetUsersUnauthorized.md b/docs/Models/Errors/GetUsersUnauthorized.md new file mode 100644 index 0000000..9ff0bbb --- /dev/null +++ b/docs/Models/Errors/GetUsersUnauthorized.md @@ -0,0 +1,11 @@ +# GetUsersUnauthorized + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `Errors` | List<[GetUsersUsersErrors](../../Models/Errors/GetUsersUsersErrors.md)> | :heavy_minus_sign: | N/A | +| `RawResponse` | [HttpResponseMessage](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpresponsemessage?view=net-5.0) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/Models/Errors/GetUsersUsersErrors.md b/docs/Models/Errors/GetUsersUsersErrors.md new file mode 100644 index 0000000..fb11b18 --- /dev/null +++ b/docs/Models/Errors/GetUsersUsersErrors.md @@ -0,0 +1,10 @@ +# GetUsersUsersErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `Code` | *int* | :heavy_minus_sign: | N/A | 1001 | +| `Message` | *string* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `Status` | *int* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/Models/Errors/PostUsersSignInDataAuthenticationErrors.md b/docs/Models/Errors/PostUsersSignInDataAuthenticationErrors.md new file mode 100644 index 0000000..d97635e --- /dev/null +++ b/docs/Models/Errors/PostUsersSignInDataAuthenticationErrors.md @@ -0,0 +1,10 @@ +# PostUsersSignInDataAuthenticationErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `Code` | *int* | :heavy_minus_sign: | N/A | 1001 | +| `Message` | *string* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `Status` | *int* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/Models/Errors/PostUsersSignInDataBadRequest.md b/docs/Models/Errors/PostUsersSignInDataBadRequest.md new file mode 100644 index 0000000..57f7d38 --- /dev/null +++ b/docs/Models/Errors/PostUsersSignInDataBadRequest.md @@ -0,0 +1,11 @@ +# PostUsersSignInDataBadRequest + +Bad Request - A parameter was not specified, or was specified incorrectly. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `Errors` | List<[PostUsersSignInDataErrors](../../Models/Errors/PostUsersSignInDataErrors.md)> | :heavy_minus_sign: | N/A | +| `RawResponse` | [HttpResponseMessage](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpresponsemessage?view=net-5.0) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/Models/Errors/PostUsersSignInDataErrors.md b/docs/Models/Errors/PostUsersSignInDataErrors.md new file mode 100644 index 0000000..8dc66ae --- /dev/null +++ b/docs/Models/Errors/PostUsersSignInDataErrors.md @@ -0,0 +1,10 @@ +# PostUsersSignInDataErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `Code` | *int* | :heavy_minus_sign: | N/A | 1000 | +| `Message` | *string* | :heavy_minus_sign: | N/A | X-Plex-Client-Identifier is missing | +| `Status` | *int* | :heavy_minus_sign: | N/A | 400 | \ No newline at end of file diff --git a/docs/Models/Errors/PostUsersSignInDataUnauthorized.md b/docs/Models/Errors/PostUsersSignInDataUnauthorized.md new file mode 100644 index 0000000..e7bdff9 --- /dev/null +++ b/docs/Models/Errors/PostUsersSignInDataUnauthorized.md @@ -0,0 +1,11 @@ +# PostUsersSignInDataUnauthorized + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `Errors` | List<[PostUsersSignInDataAuthenticationErrors](../../Models/Errors/PostUsersSignInDataAuthenticationErrors.md)> | :heavy_minus_sign: | N/A | +| `RawResponse` | [HttpResponseMessage](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpresponsemessage?view=net-5.0) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/Models/Requests/AllLibraries.md b/docs/Models/Requests/AllLibraries.md new file mode 100644 index 0000000..393878a --- /dev/null +++ b/docs/Models/Requests/AllLibraries.md @@ -0,0 +1,11 @@ +# AllLibraries + +Indicates if the user has access to all libraries. + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/AllowCameraUpload.md b/docs/Models/Requests/AllowCameraUpload.md new file mode 100644 index 0000000..b080e79 --- /dev/null +++ b/docs/Models/Requests/AllowCameraUpload.md @@ -0,0 +1,11 @@ +# AllowCameraUpload + +Indicates if the user is allowed to upload from a camera. + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/AllowChannels.md b/docs/Models/Requests/AllowChannels.md new file mode 100644 index 0000000..7207328 --- /dev/null +++ b/docs/Models/Requests/AllowChannels.md @@ -0,0 +1,11 @@ +# AllowChannels + +Indicates if the user has access to channels. + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/AllowSubtitleAdmin.md b/docs/Models/Requests/AllowSubtitleAdmin.md new file mode 100644 index 0000000..63bf969 --- /dev/null +++ b/docs/Models/Requests/AllowSubtitleAdmin.md @@ -0,0 +1,11 @@ +# AllowSubtitleAdmin + +Indicates if the user can manage subtitles. + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/AllowSync.md b/docs/Models/Requests/AllowSync.md new file mode 100644 index 0000000..9255773 --- /dev/null +++ b/docs/Models/Requests/AllowSync.md @@ -0,0 +1,11 @@ +# AllowSync + +Indicates if the user is allowed to sync media. + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/AllowTuners.md b/docs/Models/Requests/AllowTuners.md new file mode 100644 index 0000000..fe810e4 --- /dev/null +++ b/docs/Models/Requests/AllowTuners.md @@ -0,0 +1,11 @@ +# AllowTuners + +Indicates if the user is allowed to use tuners. + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/AutocompleteRequest.md b/docs/Models/Requests/AutocompleteRequest.md index b225b8b..0879a23 100644 --- a/docs/Models/Requests/AutocompleteRequest.md +++ b/docs/Models/Requests/AutocompleteRequest.md @@ -3,20 +3,20 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | -| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | -| `Product` | *string* | :heavy_minus_sign: | The name of the client product | Plex for Roku | -| `Version` | *string* | :heavy_minus_sign: | The version of the client application | 2.4.1 | -| `Platform` | *string* | :heavy_minus_sign: | The platform of the client | Roku | -| `PlatformVersion` | *string* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | -| `Device` | *string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | -| `Model` | *string* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | -| `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | -| `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | -| `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | -| `SectionId` | *long* | :heavy_check_mark: | Section identifier | | -| `Type` | *long* | :heavy_minus_sign: | Item type | | -| `FieldQuery` | *string* | :heavy_minus_sign: | The "field" stands in for any field, the value is a partial string for matching | | -| `MediaQuery` | [MediaQuery](../../Models/Components/MediaQuery.md) | :heavy_minus_sign: | This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `Product` | *string* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `Version` | *string* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `Platform` | *string* | :heavy_minus_sign: | The platform of the client | Roku | +| `PlatformVersion` | *string* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `Device` | *string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `Model` | *string* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | +| `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | +| `SectionId` | *long* | :heavy_check_mark: | Section identifier | | +| `Type` | *long* | :heavy_minus_sign: | Item type | | +| `FieldQuery` | *string* | :heavy_minus_sign: | The "field" stands in for any field, the value is a partial string for matching | | +| `MediaQuery` | [MediaQuery](../../Models/Components/MediaQuery.md) | :heavy_minus_sign: | A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic.

The query supports:
- Fields: integer, boolean, tag, string, date, language
- Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type)
- Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR)
- Sorting: sort parameter with :desc, :nullsLast modifiers
- Grouping: group parameter
- Limits: limit parameter

Examples:
- Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24`
- String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24"
- Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries.
| {
"type": 4,
"sourceType": 2,
"sort": "duration:desc,index"
} | \ No newline at end of file diff --git a/docs/Models/Requests/Billing.md b/docs/Models/Requests/Billing.md new file mode 100644 index 0000000..8c4a046 --- /dev/null +++ b/docs/Models/Requests/Billing.md @@ -0,0 +1,9 @@ +# Billing + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | +| `InternalPaymentMethod` | [InternalPaymentMethod](../../Models/Requests/InternalPaymentMethod.md) | :heavy_check_mark: | N/A | +| `PaymentMethodId` | *long* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/Models/Requests/ButlerTask.md b/docs/Models/Requests/ButlerTask.md index be9141e..ca8385c 100644 --- a/docs/Models/Requests/ButlerTask.md +++ b/docs/Models/Requests/ButlerTask.md @@ -1,13 +1,31 @@ # ButlerTask +The task name -## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | -| `Description` | *string* | :heavy_minus_sign: | A user-friendly description of the task | -| `Enabled` | *bool* | :heavy_minus_sign: | Whether this task is enabled or not | -| `Interval` | *long* | :heavy_minus_sign: | The interval (in days) of when this task is run. A value of 1 is run every day, 7 is every week, etc. | -| `Name` | *string* | :heavy_minus_sign: | The name of the task | -| `ScheduleRandomized` | *bool* | :heavy_minus_sign: | Indicates whether the timing of the task is randomized within the butler interval | -| `Title` | *string* | :heavy_minus_sign: | A user-friendly title of the task | \ No newline at end of file +## Values + +| Name | Value | +| ---------------------------------- | ---------------------------------- | +| `AutomaticUpdates` | AutomaticUpdates | +| `BackupDatabase` | BackupDatabase | +| `ButlerTaskGenerateAdMarkers` | ButlerTaskGenerateAdMarkers | +| `ButlerTaskGenerateCreditsMarkers` | ButlerTaskGenerateCreditsMarkers | +| `ButlerTaskGenerateIntroMarkers` | ButlerTaskGenerateIntroMarkers | +| `ButlerTaskGenerateVoiceActivity` | ButlerTaskGenerateVoiceActivity | +| `CleanOldBundles` | CleanOldBundles | +| `CleanOldCacheFiles` | CleanOldCacheFiles | +| `DeepMediaAnalysis` | DeepMediaAnalysis | +| `GarbageCollectBlobs` | GarbageCollectBlobs | +| `GarbageCollectLibraryMedia` | GarbageCollectLibraryMedia | +| `GenerateBlurHashes` | GenerateBlurHashes | +| `GenerateChapterThumbs` | GenerateChapterThumbs | +| `GenerateMediaIndexFiles` | GenerateMediaIndexFiles | +| `LoudnessAnalysis` | LoudnessAnalysis | +| `MusicAnalysis` | MusicAnalysis | +| `OptimizeDatabase` | OptimizeDatabase | +| `RefreshEpgGuides` | RefreshEpgGuides | +| `RefreshLibraries` | RefreshLibraries | +| `RefreshLocalMedia` | RefreshLocalMedia | +| `RefreshPeriodicMetadata` | RefreshPeriodicMetadata | +| `UpgradeMediaAnalysis` | UpgradeMediaAnalysis | \ No newline at end of file diff --git a/docs/Models/Requests/ButlerTasks.md b/docs/Models/Requests/ButlerTasks.md index 3865cd8..6fa0136 100644 --- a/docs/Models/Requests/ButlerTasks.md +++ b/docs/Models/Requests/ButlerTasks.md @@ -3,6 +3,6 @@ ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | -| `ButlerTask` | List<[ButlerTask](../../Models/Requests/ButlerTask.md)> | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | +| `ButlerTask` | List<[GetTasksButlerTask](../../Models/Requests/GetTasksButlerTask.md)> | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/Models/Requests/CreateCollectionRequest.md b/docs/Models/Requests/CreateCollectionRequest.md index 80a77ea..1e892d5 100644 --- a/docs/Models/Requests/CreateCollectionRequest.md +++ b/docs/Models/Requests/CreateCollectionRequest.md @@ -3,21 +3,21 @@ ## Fields -| Field | Type | Required | Description | Example | -| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | -| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | -| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | -| `Product` | *string* | :heavy_minus_sign: | The name of the client product | Plex for Roku | -| `Version` | *string* | :heavy_minus_sign: | The version of the client application | 2.4.1 | -| `Platform` | *string* | :heavy_minus_sign: | The platform of the client | Roku | -| `PlatformVersion` | *string* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | -| `Device` | *string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | -| `Model` | *string* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | -| `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | -| `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | -| `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | -| `SectionId` | *string* | :heavy_check_mark: | The section where this collection will be created | | -| `Title` | *string* | :heavy_minus_sign: | The title to filter by or assign | | -| `Smart` | *bool* | :heavy_minus_sign: | Whether this is a smart collection/playlist | | -| `Uri` | *string* | :heavy_minus_sign: | The URI for processing the smart collection. Required for a smart collection | | -| `Type` | *long* | :heavy_minus_sign: | The metadata type to filter by | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `Product` | *string* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `Version` | *string* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `Platform` | *string* | :heavy_minus_sign: | The platform of the client | Roku | +| `PlatformVersion` | *string* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `Device` | *string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `Model` | *string* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | +| `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | +| `SectionId` | *string* | :heavy_check_mark: | The section where this collection will be created | | +| `Title` | *string* | :heavy_minus_sign: | The title to filter by or assign | | +| `Smart` | *bool* | :heavy_minus_sign: | Whether this is a smart collection/playlist | | +| `Uri` | *string* | :heavy_minus_sign: | The URI for processing the smart collection. Required for a smart collection | | +| `Type` | [MediaType](../../Models/Components/MediaType.md) | :heavy_minus_sign: | The type of media to retrieve or filter by.

1 = movie
2 = show
3 = season
4 = episode
5 = artist
6 = album
7 = track
8 = photo_album
9 = photo

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 diff --git a/docs/Models/Requests/CreateDownloadQueueStatus.md b/docs/Models/Requests/CreateDownloadQueueStatus.md new file mode 100644 index 0000000..38bd42c --- /dev/null +++ b/docs/Models/Requests/CreateDownloadQueueStatus.md @@ -0,0 +1,20 @@ +# CreateDownloadQueueStatus + +The state of this queue + - deciding: At least one item is still being decided + - waiting: At least one item is waiting for transcode and none are currently transcoding + - processing: At least one item is being transcoded + - done: All items are available (or potentially expired) + - error: At least one item has encountered an error + + + +## Values + +| Name | Value | +| ------------ | ------------ | +| `Deciding` | deciding | +| `Waiting` | waiting | +| `Processing` | processing | +| `Done` | done | +| `Error` | error | \ No newline at end of file diff --git a/docs/Models/Requests/DownloadQueue.md b/docs/Models/Requests/DownloadQueue.md index 4c6765f..4bdafed 100644 --- a/docs/Models/Requests/DownloadQueue.md +++ b/docs/Models/Requests/DownloadQueue.md @@ -7,4 +7,4 @@ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `Id` | *long* | :heavy_minus_sign: | N/A | | `ItemCount` | *long* | :heavy_minus_sign: | N/A | -| `Status` | [Models.Requests.Status](../../Models/Requests/Status.md) | :heavy_minus_sign: | The state of this queue
- deciding: At least one item is still being decided
- waiting: At least one item is waiting for transcode and none are currently transcoding
- processing: At least one item is being transcoded
- done: All items are available (or potentially expired)
- error: At least one item has encountered an error
| \ No newline at end of file +| `Status` | [CreateDownloadQueueStatus](../../Models/Requests/CreateDownloadQueueStatus.md) | :heavy_minus_sign: | The state of this queue
- deciding: At least one item is still being decided
- waiting: At least one item is waiting for transcode and none are currently transcoding
- processing: At least one item is being transcoded
- done: All items are available (or potentially expired)
- error: At least one item has encountered an error
| \ No newline at end of file diff --git a/docs/Models/Requests/GetCollectionsRequest.md b/docs/Models/Requests/GetCollectionsRequest.md index c6647f3..721de60 100644 --- a/docs/Models/Requests/GetCollectionsRequest.md +++ b/docs/Models/Requests/GetCollectionsRequest.md @@ -3,18 +3,18 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | -| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | -| `Product` | *string* | :heavy_minus_sign: | The name of the client product | Plex for Roku | -| `Version` | *string* | :heavy_minus_sign: | The version of the client application | 2.4.1 | -| `Platform` | *string* | :heavy_minus_sign: | The platform of the client | Roku | -| `PlatformVersion` | *string* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | -| `Device` | *string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | -| `Model` | *string* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | -| `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | -| `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | -| `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | -| `SectionId` | *long* | :heavy_check_mark: | Section identifier | | -| `MediaQuery` | [MediaQuery](../../Models/Components/MediaQuery.md) | :heavy_minus_sign: | This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `Product` | *string* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `Version` | *string* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `Platform` | *string* | :heavy_minus_sign: | The platform of the client | Roku | +| `PlatformVersion` | *string* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `Device` | *string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `Model` | *string* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | +| `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | +| `SectionId` | *long* | :heavy_check_mark: | Section identifier | | +| `MediaQuery` | [MediaQuery](../../Models/Components/MediaQuery.md) | :heavy_minus_sign: | A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic.

The query supports:
- Fields: integer, boolean, tag, string, date, language
- Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type)
- Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR)
- Sorting: sort parameter with :desc, :nullsLast modifiers
- Grouping: group parameter
- Limits: limit parameter

Examples:
- Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24`
- String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24"
- Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries.
| {
"type": 4,
"sourceType": 2,
"sort": "duration:desc,index"
} | \ No newline at end of file diff --git a/docs/Models/Requests/GetCommonRequest.md b/docs/Models/Requests/GetCommonRequest.md index 3a3eb08..c1ae15b 100644 --- a/docs/Models/Requests/GetCommonRequest.md +++ b/docs/Models/Requests/GetCommonRequest.md @@ -3,19 +3,19 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | -| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | -| `Product` | *string* | :heavy_minus_sign: | The name of the client product | Plex for Roku | -| `Version` | *string* | :heavy_minus_sign: | The version of the client application | 2.4.1 | -| `Platform` | *string* | :heavy_minus_sign: | The platform of the client | Roku | -| `PlatformVersion` | *string* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | -| `Device` | *string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | -| `Model` | *string* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | -| `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | -| `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | -| `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | -| `SectionId` | *long* | :heavy_check_mark: | Section identifier | | -| `Type` | *long* | :heavy_minus_sign: | Item type | | -| `MediaQuery` | [MediaQuery](../../Models/Components/MediaQuery.md) | :heavy_minus_sign: | This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `Product` | *string* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `Version` | *string* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `Platform` | *string* | :heavy_minus_sign: | The platform of the client | Roku | +| `PlatformVersion` | *string* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `Device` | *string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `Model` | *string* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | +| `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | +| `SectionId` | *long* | :heavy_check_mark: | Section identifier | | +| `Type` | *long* | :heavy_minus_sign: | Item type | | +| `MediaQuery` | [MediaQuery](../../Models/Components/MediaQuery.md) | :heavy_minus_sign: | A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic.

The query supports:
- Fields: integer, boolean, tag, string, date, language
- Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type)
- Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR)
- Sorting: sort parameter with :desc, :nullsLast modifiers
- Grouping: group parameter
- Limits: limit parameter

Examples:
- Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24`
- String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24"
- Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries.
| {
"type": 4,
"sourceType": 2,
"sort": "duration:desc,index"
} | \ No newline at end of file diff --git a/docs/Models/Requests/GetFirstCharactersRequest.md b/docs/Models/Requests/GetFirstCharactersRequest.md index e8fdd2d..6059805 100644 --- a/docs/Models/Requests/GetFirstCharactersRequest.md +++ b/docs/Models/Requests/GetFirstCharactersRequest.md @@ -3,20 +3,20 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | -| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | -| `Product` | *string* | :heavy_minus_sign: | The name of the client product | Plex for Roku | -| `Version` | *string* | :heavy_minus_sign: | The version of the client application | 2.4.1 | -| `Platform` | *string* | :heavy_minus_sign: | The platform of the client | Roku | -| `PlatformVersion` | *string* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | -| `Device` | *string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | -| `Model` | *string* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | -| `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | -| `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | -| `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | -| `SectionId` | *long* | :heavy_check_mark: | Section identifier | | -| `Type` | *long* | :heavy_minus_sign: | The metadata type to filter on | | -| `Sort` | *long* | :heavy_minus_sign: | The metadata type to filter on | | -| `MediaQuery` | [MediaQuery](../../Models/Components/MediaQuery.md) | :heavy_minus_sign: | This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `Product` | *string* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `Version` | *string* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `Platform` | *string* | :heavy_minus_sign: | The platform of the client | Roku | +| `PlatformVersion` | *string* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `Device` | *string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `Model` | *string* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | +| `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | +| `SectionId` | *long* | :heavy_check_mark: | Section identifier | | +| `Type` | *long* | :heavy_minus_sign: | The metadata type to filter on | | +| `Sort` | *long* | :heavy_minus_sign: | The metadata type to filter on | | +| `MediaQuery` | [MediaQuery](../../Models/Components/MediaQuery.md) | :heavy_minus_sign: | A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic.

The query supports:
- Fields: integer, boolean, tag, string, date, language
- Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type)
- Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR)
- Sorting: sort parameter with :desc, :nullsLast modifiers
- Grouping: group parameter
- Limits: limit parameter

Examples:
- Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24`
- String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24"
- Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries.
| {
"type": 4,
"sourceType": 2,
"sort": "duration:desc,index"
} | \ No newline at end of file diff --git a/docs/Models/Requests/GetLibraryItemsRequest.md b/docs/Models/Requests/GetLibraryItemsRequest.md index 6e30372..5482e78 100644 --- a/docs/Models/Requests/GetLibraryItemsRequest.md +++ b/docs/Models/Requests/GetLibraryItemsRequest.md @@ -3,17 +3,17 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | -| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | -| `Product` | *string* | :heavy_minus_sign: | The name of the client product | Plex for Roku | -| `Version` | *string* | :heavy_minus_sign: | The version of the client application | 2.4.1 | -| `Platform` | *string* | :heavy_minus_sign: | The platform of the client | Roku | -| `PlatformVersion` | *string* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | -| `Device` | *string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | -| `Model` | *string* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | -| `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | -| `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | -| `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | -| `MediaQuery` | [MediaQuery](../../Models/Components/MediaQuery.md) | :heavy_minus_sign: | This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `Product` | *string* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `Version` | *string* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `Platform` | *string* | :heavy_minus_sign: | The platform of the client | Roku | +| `PlatformVersion` | *string* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `Device` | *string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `Model` | *string* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | +| `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | +| `MediaQuery` | [MediaQuery](../../Models/Components/MediaQuery.md) | :heavy_minus_sign: | A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic.

The query supports:
- Fields: integer, boolean, tag, string, date, language
- Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type)
- Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR)
- Sorting: sort parameter with :desc, :nullsLast modifiers
- Grouping: group parameter
- Limits: limit parameter

Examples:
- Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24`
- String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24"
- Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries.
| {
"type": 4,
"sourceType": 2,
"sort": "duration:desc,index"
} | \ No newline at end of file diff --git a/docs/Models/Requests/GetLibraryMatchesRequest.md b/docs/Models/Requests/GetLibraryMatchesRequest.md index dce3c60..ac1b2c4 100644 --- a/docs/Models/Requests/GetLibraryMatchesRequest.md +++ b/docs/Models/Requests/GetLibraryMatchesRequest.md @@ -3,30 +3,30 @@ ## Fields -| Field | Type | Required | Description | Example | -| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | -| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | -| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | -| `Product` | *string* | :heavy_minus_sign: | The name of the client product | Plex for Roku | -| `Version` | *string* | :heavy_minus_sign: | The version of the client application | 2.4.1 | -| `Platform` | *string* | :heavy_minus_sign: | The platform of the client | Roku | -| `PlatformVersion` | *string* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | -| `Device` | *string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | -| `Model` | *string* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | -| `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | -| `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | -| `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | -| `Type` | *long* | :heavy_minus_sign: | The metadata type to filter by | | -| `IncludeFullMetadata` | [BoolInt](../../Models/Components/BoolInt.md) | :heavy_minus_sign: | N/A | 1 | -| `IncludeAncestorMetadata` | [BoolInt](../../Models/Components/BoolInt.md) | :heavy_minus_sign: | N/A | 1 | -| `IncludeAlternateMetadataSources` | [BoolInt](../../Models/Components/BoolInt.md) | :heavy_minus_sign: | N/A | 1 | -| `Guid` | *string* | :heavy_minus_sign: | Used for movies, shows, artists, albums, and tracks. Allowed for various URI schemes, to be defined. | | -| `Title` | *string* | :heavy_minus_sign: | The title to filter by or assign | | -| `Year` | *long* | :heavy_minus_sign: | Used for movies shows, and albums. Optional. | | -| `Path` | *string* | :heavy_minus_sign: | Used for movies, episodes, and tracks. The full path to the media file, used for "cloud-scanning" an item. | | -| `GrandparentTitle` | *string* | :heavy_minus_sign: | Used for episodes and tracks. The title of the show/artist. Required if `path` isn't passed. | | -| `GrandparentYear` | *long* | :heavy_minus_sign: | Used for episodes. The year of the show. | | -| `ParentIndex` | *long* | :heavy_minus_sign: | Used for episodes and tracks. The season/album number. | | -| `Index` | *long* | :heavy_minus_sign: | Used for episodes and tracks. The episode/tracks number in the season/album. | | -| `OriginallyAvailableAt` | *string* | :heavy_minus_sign: | Used for episodes. In the format `YYYY-MM-DD`. | | -| `ParentTitle` | *string* | :heavy_minus_sign: | Used for albums and tracks. The artist name for albums or the album name for tracks. | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `Product` | *string* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `Version` | *string* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `Platform` | *string* | :heavy_minus_sign: | The platform of the client | Roku | +| `PlatformVersion` | *string* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `Device` | *string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `Model` | *string* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | +| `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | +| `Type` | [MediaType](../../Models/Components/MediaType.md) | :heavy_minus_sign: | The type of media to retrieve or filter by.

1 = movie
2 = show
3 = season
4 = episode
5 = artist
6 = album
7 = track
8 = photo_album
9 = photo

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries
| 2 | +| `IncludeFullMetadata` | [BoolInt](../../Models/Components/BoolInt.md) | :heavy_minus_sign: | N/A | 1 | +| `IncludeAncestorMetadata` | [BoolInt](../../Models/Components/BoolInt.md) | :heavy_minus_sign: | N/A | 1 | +| `IncludeAlternateMetadataSources` | [BoolInt](../../Models/Components/BoolInt.md) | :heavy_minus_sign: | N/A | 1 | +| `Guid` | *string* | :heavy_minus_sign: | Used for movies, shows, artists, albums, and tracks. Allowed for various URI schemes, to be defined. | | +| `Title` | *string* | :heavy_minus_sign: | The title to filter by or assign | | +| `Year` | *long* | :heavy_minus_sign: | Used for movies shows, and albums. Optional. | | +| `Path` | *string* | :heavy_minus_sign: | Used for movies, episodes, and tracks. The full path to the media file, used for "cloud-scanning" an item. | | +| `GrandparentTitle` | *string* | :heavy_minus_sign: | Used for episodes and tracks. The title of the show/artist. Required if `path` isn't passed. | | +| `GrandparentYear` | *long* | :heavy_minus_sign: | Used for episodes. The year of the show. | | +| `ParentIndex` | *long* | :heavy_minus_sign: | Used for episodes and tracks. The season/album number. | | +| `Index` | *long* | :heavy_minus_sign: | Used for episodes and tracks. The episode/tracks number in the season/album. | | +| `OriginallyAvailableAt` | *string* | :heavy_minus_sign: | Used for episodes. In the format `YYYY-MM-DD`. | | +| `ParentTitle` | *string* | :heavy_minus_sign: | Used for albums and tracks. The artist name for albums or the album name for tracks. | | \ No newline at end of file diff --git a/docs/Models/Requests/GetPlaylistGeneratorItemsGuids.md b/docs/Models/Requests/GetPlaylistGeneratorItemsGuids.md new file mode 100644 index 0000000..d7241f9 --- /dev/null +++ b/docs/Models/Requests/GetPlaylistGeneratorItemsGuids.md @@ -0,0 +1,8 @@ +# GetPlaylistGeneratorItemsGuids + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Id` | *string* | :heavy_check_mark: | The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb://
| {
"imdbExample": {
"summary": "IMDB example",
"value": "imdb://tt13015952"
},
"tmdbExample": {
"summary": "TMDB example",
"value": "tmdb://2434012"
},
"tvdbExample": {
"summary": "TVDB example",
"value": "tvdb://7945991"
}
} | \ No newline at end of file diff --git a/docs/Models/Requests/GetPlaylistGeneratorItemsMetadata.md b/docs/Models/Requests/GetPlaylistGeneratorItemsMetadata.md index 2a8ba22..ac18492 100644 --- a/docs/Models/Requests/GetPlaylistGeneratorItemsMetadata.md +++ b/docs/Models/Requests/GetPlaylistGeneratorItemsMetadata.md @@ -10,75 +10,79 @@ Metadata items can often live in a hierarchy with relationships between them. F ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `Title` | *object* | :heavy_minus_sign: | The title of the item (e.g. “300” or “The Simpsons”) | -| `Type` | *object* | :heavy_minus_sign: | The type of the video item, such as `movie`, `episode`, or `clip`. | -| `AbsoluteIndex` | *long* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | -| `AddedAt` | *long* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was added to the library. | -| `Art` | *object* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | -| `AudienceRating` | *double* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | -| `AudienceRatingImage` | *object* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | -| `Autotag` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Banner` | *object* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | -| `ChapterSource` | *object* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | -| `Composite` | *object* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | -| `ContentRating` | *object* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | -| `Country` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Director` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Duration` | *long* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | -| `Filter` | List<[Filter](../../Models/Components/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `Genre` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `GrandparentArt` | *string* | :heavy_minus_sign: | The `art` of the grandparent | -| `GrandparentHero` | *string* | :heavy_minus_sign: | The `hero` of the grandparent | -| `GrandparentKey` | *string* | :heavy_minus_sign: | The `key` of the grandparent | -| `GrandparentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the grandparent | -| `GrandparentTheme` | *string* | :heavy_minus_sign: | The `theme` of the grandparent | -| `GrandparentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the grandparent | -| `GrandparentTitle` | *string* | :heavy_minus_sign: | The `title` of the grandparent | -| `Guid` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Hero` | *object* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | -| `Image` | List<[Image](../../Models/Components/Image.md)> | :heavy_minus_sign: | N/A | -| `Index` | *long* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | -| `Key` | *object* | :heavy_minus_sign: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | -| `LastViewedAt` | *long* | :heavy_minus_sign: | When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. | -| `LeafCount` | *long* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | -| `Media` | List<[Media](../../Models/Components/Media.md)> | :heavy_minus_sign: | N/A | -| `OriginallyAvailableAt` | *object* | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | -| `OriginalTitle` | *object* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | -| `ParentHero` | *string* | :heavy_minus_sign: | The `hero` of the parent | -| `ParentIndex` | *long* | :heavy_minus_sign: | The `index` of the parent | -| `ParentKey` | *string* | :heavy_minus_sign: | The `key` of the parent | -| `ParentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the parent | -| `ParentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the parent | -| `ParentTitle` | *string* | :heavy_minus_sign: | The `title` of the parent | -| `PrimaryExtraKey` | *object* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | -| `Prompt` | *string* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | -| `Rating` | *double* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | -| `RatingArray` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `RatingCount` | *long* | :heavy_minus_sign: | Number of ratings under this metadata | -| `RatingImage` | *object* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | -| `RatingKey` | *object* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | -| `Role` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Search` | *bool* | :heavy_minus_sign: | Indicates this is a search directory | -| `Secondary` | *bool* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | -| `SkipChildren` | *bool* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | -| `SkipParent` | *bool* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | -| `Sort` | List<[Sort](../../Models/Components/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `Studio` | *object* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | -| `Subtype` | *object* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | -| `Summary` | *object* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | -| `Tagline` | *object* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | -| `Theme` | *object* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | -| `Thumb` | *object* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | -| `TitleSort` | *object* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | -| `UpdatedAt` | *long* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | -| `UserRating` | *double* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | -| `ViewCount` | *long* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | -| `ViewedLeafCount` | *long* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | -| `ViewOffset` | *long* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | -| `Writer` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Year` | *long* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | -| `ProcessingState` | [ProcessingState](../../Models/Requests/ProcessingState.md) | :heavy_minus_sign: | The state of processing if this generator is part of an optimizer playlist | -| `ProcessingStateContext` | [ProcessingStateContext](../../Models/Requests/ProcessingStateContext.md) | :heavy_minus_sign: | The error which could have occurred (or `good`) | -| `AdditionalProperties` | Dictionary | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Title` | *string* | :heavy_check_mark: | The title of the item (e.g. “300” or “The Simpsons”) | | +| `Type` | *string* | :heavy_check_mark: | The type of the video item, such as `movie`, `episode`, or `clip`. | | +| `AbsoluteIndex` | *int* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | | +| `AddedAt` | *long* | :heavy_check_mark: | In units of seconds since the epoch, returns the time at which the item was added to the library. | | +| `Art` | *string* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | /library/metadata/58683/art/1703239236 | +| `AudienceRating` | *float* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | | +| `AudienceRatingImage` | *string* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | | +| `Autotag` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Banner` | *string* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | | +| `ChapterSource` | *string* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | media | +| `ChildCount` | *int* | :heavy_minus_sign: | The number of child items associated with this media item. | 1 | +| `Composite` | *string* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | | +| `ContentRating` | *string* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | | +| `Country` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Director` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Duration` | *int* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | | +| `Filter` | List<[Filter](../../Models/Components/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `Genre` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `GrandparentArt` | *string* | :heavy_minus_sign: | The `art` of the grandparent | | +| `GrandparentGuid` | *string* | :heavy_minus_sign: | The GUID of the grandparent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `GrandparentHero` | *string* | :heavy_minus_sign: | The `hero` of the grandparent | | +| `GrandparentKey` | *string* | :heavy_minus_sign: | The `key` of the grandparent | | +| `GrandparentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the grandparent | | +| `GrandparentTheme` | *string* | :heavy_minus_sign: | The `theme` of the grandparent | | +| `GrandparentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the grandparent | | +| `GrandparentTitle` | *string* | :heavy_minus_sign: | The `title` of the grandparent | | +| `Guid` | *string* | :heavy_minus_sign: | The globally unique identifier for the media item. | plex://movie/5d7768ba96b655001fdc0408 | +| `Guids` | List<[GetPlaylistGeneratorItemsGuids](../../Models/Requests/GetPlaylistGeneratorItemsGuids.md)> | :heavy_minus_sign: | N/A | | +| `Hero` | *string* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | | +| `Image` | List<[Image](../../Models/Components/Image.md)> | :heavy_minus_sign: | N/A | | +| `Index` | *int* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | | +| `Key` | *string* | :heavy_check_mark: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | | +| `LastViewedAt` | *long* | :heavy_minus_sign: | N/A | 1556281940 | +| `LeafCount` | *int* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | | +| `Media` | List<[Media](../../Models/Components/Media.md)> | :heavy_minus_sign: | N/A | | +| `OriginallyAvailableAt` | [LocalDate](https://nodatime.org/3.1.x/api/NodaTime.LocalDate.html) | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | 2022-12-14 | +| `OriginalTitle` | *string* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | | +| `ParentGuid` | *string* | :heavy_minus_sign: | The GUID of the parent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `ParentHero` | *string* | :heavy_minus_sign: | The `hero` of the parent | | +| `ParentIndex` | *int* | :heavy_minus_sign: | The `index` of the parent | | +| `ParentKey` | *string* | :heavy_minus_sign: | The `key` of the parent | | +| `ParentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the parent | | +| `ParentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the parent | | +| `ParentTitle` | *string* | :heavy_minus_sign: | The `title` of the parent | | +| `PrimaryExtraKey` | *string* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | | +| `Prompt` | *string* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | | +| `Rating` | *float* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | | +| `RatingArray` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `RatingCount` | *int* | :heavy_minus_sign: | Number of ratings under this metadata | | +| `RatingImage` | *string* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | | +| `RatingKey` | *string* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | | +| `Role` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Search` | *bool* | :heavy_minus_sign: | Indicates this is a search directory | | +| `Secondary` | *bool* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | | +| `SkipChildren` | *bool* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | | +| `SkipParent` | *bool* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | | +| `Sort` | List<[Sort](../../Models/Components/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `Studio` | *string* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | | +| `Subtype` | *string* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | | +| `Summary` | *string* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | | +| `Tagline` | *string* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | | +| `Theme` | *string* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | /library/metadata/1/theme/1705636920 | +| `Thumb` | *string* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | /library/metadata/58683/thumb/1703239236 | +| `TitleSort` | *string* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | | +| `UpdatedAt` | *long* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | | +| `UserRating` | *float* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | | +| `ViewCount` | *int* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | | +| `ViewedLeafCount` | *int* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | | +| `ViewOffset` | *int* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | | +| `Writer` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Year` | *int* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | | +| `ProcessingState` | [ProcessingState](../../Models/Requests/ProcessingState.md) | :heavy_minus_sign: | The state of processing if this generator is part of an optimizer playlist | | +| `ProcessingStateContext` | [ProcessingStateContext](../../Models/Requests/ProcessingStateContext.md) | :heavy_minus_sign: | The error which could have occurred (or `good`) | | +| `AdditionalProperties` | Dictionary | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Requests/GetSectionImageRequest.md b/docs/Models/Requests/GetSectionImageRequest.md index 074b711..3eb171a 100644 --- a/docs/Models/Requests/GetSectionImageRequest.md +++ b/docs/Models/Requests/GetSectionImageRequest.md @@ -3,20 +3,20 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | -| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | -| `Product` | *string* | :heavy_minus_sign: | The name of the client product | Plex for Roku | -| `Version` | *string* | :heavy_minus_sign: | The version of the client application | 2.4.1 | -| `Platform` | *string* | :heavy_minus_sign: | The platform of the client | Roku | -| `PlatformVersion` | *string* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | -| `Device` | *string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | -| `Model` | *string* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | -| `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | -| `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | -| `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | -| `SectionId` | *long* | :heavy_check_mark: | Section identifier | | -| `UpdatedAt` | *long* | :heavy_check_mark: | The update time of the image. Used for busting cache. | | -| `MediaQuery` | [MediaQuery](../../Models/Components/MediaQuery.md) | :heavy_minus_sign: | This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries | | -| `Composite` | [Composite](../../Models/Components/Composite.md) | :heavy_minus_sign: | N/A | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `Product` | *string* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `Version` | *string* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `Platform` | *string* | :heavy_minus_sign: | The platform of the client | Roku | +| `PlatformVersion` | *string* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `Device` | *string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `Model` | *string* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | +| `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | +| `SectionId` | *long* | :heavy_check_mark: | Section identifier | | +| `UpdatedAt` | *long* | :heavy_check_mark: | The update time of the image. Used for busting cache. | | +| `MediaQuery` | [MediaQuery](../../Models/Components/MediaQuery.md) | :heavy_minus_sign: | A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic.

The query supports:
- Fields: integer, boolean, tag, string, date, language
- Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type)
- Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR)
- Sorting: sort parameter with :desc, :nullsLast modifiers
- Grouping: group parameter
- Limits: limit parameter

Examples:
- Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24`
- String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24"
- Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries.
| {
"type": 4,
"sourceType": 2,
"sort": "duration:desc,index"
} | +| `Composite` | [Composite](../../Models/Components/Composite.md) | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Requests/GetServerResourcesRequest.md b/docs/Models/Requests/GetServerResourcesRequest.md new file mode 100644 index 0000000..860dfda --- /dev/null +++ b/docs/Models/Requests/GetServerResourcesRequest.md @@ -0,0 +1,12 @@ +# GetServerResourcesRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | +| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `IncludeHttps` | [IncludeHttps](../../Models/Requests/IncludeHttps.md) | :heavy_minus_sign: | Include Https entries in the results | 1 | +| `IncludeRelay` | [IncludeRelay](../../Models/Requests/IncludeRelay.md) | :heavy_minus_sign: | Include Relay addresses in the results
E.g: https://10-0-0-25.bbf8e10c7fa20447cacee74cd9914cde.plex.direct:32400
| 1 | +| `IncludeIPv6` | [IncludeIPv6](../../Models/Requests/IncludeIPv6.md) | :heavy_minus_sign: | Include IPv6 entries in the results | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/GetServerResourcesResponse.md b/docs/Models/Requests/GetServerResourcesResponse.md new file mode 100644 index 0000000..199f675 --- /dev/null +++ b/docs/Models/Requests/GetServerResourcesResponse.md @@ -0,0 +1,11 @@ +# GetServerResourcesResponse + + +## 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` | [HttpResponseMessage](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpresponsemessage?view=net-5.0) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `PlexDevices` | List<[PlexDevice](../../Models/Components/PlexDevice.md)> | :heavy_minus_sign: | List of Plex Devices. This includes Plex hosted servers and clients | \ No newline at end of file diff --git a/docs/Models/Requests/GetTagsRequest.md b/docs/Models/Requests/GetTagsRequest.md index 0581f39..7510326 100644 --- a/docs/Models/Requests/GetTagsRequest.md +++ b/docs/Models/Requests/GetTagsRequest.md @@ -3,17 +3,17 @@ ## Fields -| Field | Type | Required | Description | Example | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | -| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | -| `Product` | *string* | :heavy_minus_sign: | The name of the client product | Plex for Roku | -| `Version` | *string* | :heavy_minus_sign: | The version of the client application | 2.4.1 | -| `Platform` | *string* | :heavy_minus_sign: | The platform of the client | Roku | -| `PlatformVersion` | *string* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | -| `Device` | *string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | -| `Model` | *string* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | -| `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | -| `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | -| `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | -| `Type` | *long* | :heavy_minus_sign: | The metadata type to filter by | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `Product` | *string* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `Version` | *string* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `Platform` | *string* | :heavy_minus_sign: | The platform of the client | Roku | +| `PlatformVersion` | *string* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `Device` | *string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `Model` | *string* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | +| `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | +| `Type` | [MediaType](../../Models/Components/MediaType.md) | :heavy_minus_sign: | The type of media to retrieve or filter by.

1 = movie
2 = show
3 = season
4 = episode
5 = artist
6 = album
7 = track
8 = photo_album
9 = photo

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 diff --git a/docs/Models/Requests/GetTasksButlerTask.md b/docs/Models/Requests/GetTasksButlerTask.md new file mode 100644 index 0000000..89a910c --- /dev/null +++ b/docs/Models/Requests/GetTasksButlerTask.md @@ -0,0 +1,13 @@ +# GetTasksButlerTask + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | +| `Description` | *string* | :heavy_minus_sign: | A user-friendly description of the task | +| `Enabled` | *bool* | :heavy_minus_sign: | Whether this task is enabled or not | +| `Interval` | *long* | :heavy_minus_sign: | The interval (in days) of when this task is run. A value of 1 is run every day, 7 is every week, etc. | +| `Name` | *string* | :heavy_minus_sign: | The name of the task | +| `ScheduleRandomized` | *bool* | :heavy_minus_sign: | Indicates whether the timing of the task is randomized within the butler interval | +| `Title` | *string* | :heavy_minus_sign: | A user-friendly title of the task | \ No newline at end of file diff --git a/docs/Models/Requests/GetTokenDetailsRequest.md b/docs/Models/Requests/GetTokenDetailsRequest.md new file mode 100644 index 0000000..073aba2 --- /dev/null +++ b/docs/Models/Requests/GetTokenDetailsRequest.md @@ -0,0 +1,18 @@ +# GetTokenDetailsRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `Product` | *string* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `Version` | *string* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `Platform` | *string* | :heavy_minus_sign: | The platform of the client | Roku | +| `PlatformVersion` | *string* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `Device` | *string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `Model` | *string* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | +| `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | \ No newline at end of file diff --git a/docs/Models/Requests/GetTokenDetailsResponse.md b/docs/Models/Requests/GetTokenDetailsResponse.md new file mode 100644 index 0000000..ac436cd --- /dev/null +++ b/docs/Models/Requests/GetTokenDetailsResponse.md @@ -0,0 +1,11 @@ +# GetTokenDetailsResponse + + +## 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` | [HttpResponseMessage](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpresponsemessage?view=net-5.0) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `UserPlexAccount` | [UserPlexAccount](../../Models/Components/UserPlexAccount.md) | :heavy_minus_sign: | Logged in user details | \ No newline at end of file diff --git a/docs/Models/Requests/GetUsersMediaContainer.md b/docs/Models/Requests/GetUsersMediaContainer.md new file mode 100644 index 0000000..0f8315a --- /dev/null +++ b/docs/Models/Requests/GetUsersMediaContainer.md @@ -0,0 +1,15 @@ +# GetUsersMediaContainer + +Container holding user and server details. + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | +| `FriendlyName` | *string* | :heavy_check_mark: | The friendly name of the Plex instance. | myPlex | +| `Identifier` | *string* | :heavy_check_mark: | N/A | com.plexapp.plugins.myplex | +| `MachineIdentifier` | *string* | :heavy_check_mark: | Unique Machine identifier of the Plex server. | 3dff4c4da3b1229a649aa574a9e2b419a684a20e | +| `TotalSize` | *long* | :heavy_check_mark: | Total number of users. | 30 | +| `Size` | *long* | :heavy_check_mark: | Number of users in the current response. | 30 | +| `User` | List<[Models.Requests.User](../../Models/Requests/User.md)> | :heavy_check_mark: | List of users with access to the Plex server. | | \ No newline at end of file diff --git a/docs/Models/Requests/GetUsersRequest.md b/docs/Models/Requests/GetUsersRequest.md new file mode 100644 index 0000000..9729935 --- /dev/null +++ b/docs/Models/Requests/GetUsersRequest.md @@ -0,0 +1,18 @@ +# GetUsersRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `Product` | *string* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `Version` | *string* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `Platform` | *string* | :heavy_minus_sign: | The platform of the client | Roku | +| `PlatformVersion` | *string* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `Device` | *string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `Model` | *string* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | +| `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | \ No newline at end of file diff --git a/docs/Models/Requests/GetUsersResponse.md b/docs/Models/Requests/GetUsersResponse.md new file mode 100644 index 0000000..1b93b57 --- /dev/null +++ b/docs/Models/Requests/GetUsersResponse.md @@ -0,0 +1,11 @@ +# GetUsersResponse + + +## 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` | [HttpResponseMessage](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpresponsemessage?view=net-5.0) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `Object` | [GetUsersResponseBody](../../Models/Requests/GetUsersResponseBody.md) | :heavy_minus_sign: | Successful response with media container data in JSON | \ No newline at end of file diff --git a/docs/Models/Requests/GetUsersResponseBody.md b/docs/Models/Requests/GetUsersResponseBody.md new file mode 100644 index 0000000..a488926 --- /dev/null +++ b/docs/Models/Requests/GetUsersResponseBody.md @@ -0,0 +1,10 @@ +# GetUsersResponseBody + +Successful response with media container data in JSON + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | +| `MediaContainer` | [GetUsersMediaContainer](../../Models/Requests/GetUsersMediaContainer.md) | :heavy_minus_sign: | Container holding user and server details. | \ No newline at end of file diff --git a/docs/Models/Requests/Guids.md b/docs/Models/Requests/Guids.md new file mode 100644 index 0000000..6802b5d --- /dev/null +++ b/docs/Models/Requests/Guids.md @@ -0,0 +1,8 @@ +# Guids + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Id` | *string* | :heavy_check_mark: | The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb://
| {
"imdbExample": {
"summary": "IMDB example",
"value": "imdb://tt13015952"
},
"tmdbExample": {
"summary": "TMDB example",
"value": "tmdb://2434012"
},
"tvdbExample": {
"summary": "TVDB example",
"value": "tvdb://7945991"
}
} | \ No newline at end of file diff --git a/docs/Models/Requests/Home.md b/docs/Models/Requests/Home.md new file mode 100644 index 0000000..6733522 --- /dev/null +++ b/docs/Models/Requests/Home.md @@ -0,0 +1,11 @@ +# Home + +Indicates if the user is part of a home group. + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/IncludeHttps.md b/docs/Models/Requests/IncludeHttps.md new file mode 100644 index 0000000..cee2627 --- /dev/null +++ b/docs/Models/Requests/IncludeHttps.md @@ -0,0 +1,11 @@ +# IncludeHttps + +Include Https entries in the results + + +## Values + +| Name | Value | +| ------- | ------- | +| `False` | 0 | +| `True` | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/IncludeIPv6.md b/docs/Models/Requests/IncludeIPv6.md new file mode 100644 index 0000000..0672352 --- /dev/null +++ b/docs/Models/Requests/IncludeIPv6.md @@ -0,0 +1,11 @@ +# IncludeIPv6 + +Include IPv6 entries in the results + + +## Values + +| Name | Value | +| ------- | ------- | +| `False` | 0 | +| `True` | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/IncludeRelay.md b/docs/Models/Requests/IncludeRelay.md new file mode 100644 index 0000000..136ab44 --- /dev/null +++ b/docs/Models/Requests/IncludeRelay.md @@ -0,0 +1,13 @@ +# IncludeRelay + +Include Relay addresses in the results +E.g: https://10-0-0-25.bbf8e10c7fa20447cacee74cd9914cde.plex.direct:32400 + + + +## Values + +| Name | Value | +| ------- | ------- | +| `False` | 0 | +| `True` | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/InternalPaymentMethod.md b/docs/Models/Requests/InternalPaymentMethod.md new file mode 100644 index 0000000..f1103c2 --- /dev/null +++ b/docs/Models/Requests/InternalPaymentMethod.md @@ -0,0 +1,7 @@ +# InternalPaymentMethod + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/Models/Requests/ListContentRequest.md b/docs/Models/Requests/ListContentRequest.md index a8151bb..0511454 100644 --- a/docs/Models/Requests/ListContentRequest.md +++ b/docs/Models/Requests/ListContentRequest.md @@ -3,18 +3,22 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | -| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | -| `Product` | *string* | :heavy_minus_sign: | The name of the client product | Plex for Roku | -| `Version` | *string* | :heavy_minus_sign: | The version of the client application | 2.4.1 | -| `Platform` | *string* | :heavy_minus_sign: | The platform of the client | Roku | -| `PlatformVersion` | *string* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | -| `Device` | *string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | -| `Model` | *string* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | -| `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | -| `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | -| `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | -| `MediaQuery` | [MediaQuery](../../Models/Components/MediaQuery.md) | :heavy_minus_sign: | This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries | | -| `SectionId` | *string* | :heavy_check_mark: | The id of the section | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `Product` | *string* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `Version` | *string* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `Platform` | *string* | :heavy_minus_sign: | The platform of the client | Roku | +| `PlatformVersion` | *string* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `Device` | *string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `Model` | *string* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | +| `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | +| `XPlexContainerStart` | *int* | :heavy_minus_sign: | The index of the first item to return. If not specified, the first item will be returned.
If the number of items exceeds the limit, the response will be paginated.
By default this is 0
| 0 | +| `XPlexContainerSize` | *int* | :heavy_minus_sign: | The number of items to return. If not specified, all items will be returned.
If the number of items exceeds the limit, the response will be paginated.
By default this is 50
| 50 | +| `MediaQuery` | [MediaQuery](../../Models/Components/MediaQuery.md) | :heavy_minus_sign: | A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic.

The query supports:
- Fields: integer, boolean, tag, string, date, language
- Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type)
- Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR)
- Sorting: sort parameter with :desc, :nullsLast modifiers
- Grouping: group parameter
- Limits: limit parameter

Examples:
- Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24`
- String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24"
- Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries.
| {
"type": 4,
"sourceType": 2,
"sort": "duration:desc,index"
} | +| `IncludeMeta` | [BoolInt](../../Models/Components/BoolInt.md) | :heavy_minus_sign: | Adds the Meta object to the response
| 1 | +| `IncludeGuids` | [BoolInt](../../Models/Components/BoolInt.md) | :heavy_minus_sign: | Adds the Guid object to the response
| 1 | +| `SectionId` | *string* | :heavy_check_mark: | The id of the section | | \ No newline at end of file diff --git a/docs/Models/Requests/MailingListStatus.md b/docs/Models/Requests/MailingListStatus.md new file mode 100644 index 0000000..25033de --- /dev/null +++ b/docs/Models/Requests/MailingListStatus.md @@ -0,0 +1,12 @@ +# MailingListStatus + +Your current mailing list status + + +## Values + +| Name | Value | +| -------------- | -------------- | +| `Active` | active | +| `Unsubscribed` | unsubscribed | +| `Removed` | removed | \ No newline at end of file diff --git a/docs/Models/Requests/Metadata.md b/docs/Models/Requests/Metadata.md index 3750562..b2dbd40 100644 --- a/docs/Models/Requests/Metadata.md +++ b/docs/Models/Requests/Metadata.md @@ -10,76 +10,80 @@ Metadata items can often live in a hierarchy with relationships between them. F ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `Player` | [Player](../../Models/Components/Player.md) | :heavy_minus_sign: | Information about the player being used for playback | -| `Session` | [Session](../../Models/Components/Session.md) | :heavy_minus_sign: | Information about the playback session | -| `User` | [User](../../Models/Components/User.md) | :heavy_minus_sign: | The user playing the content | -| `Title` | *object* | :heavy_minus_sign: | The title of the item (e.g. “300” or “The Simpsons”) | -| `Type` | *object* | :heavy_minus_sign: | The type of the video item, such as `movie`, `episode`, or `clip`. | -| `AbsoluteIndex` | *long* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | -| `AddedAt` | *long* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was added to the library. | -| `Art` | *object* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | -| `AudienceRating` | *double* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | -| `AudienceRatingImage` | *object* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | -| `Autotag` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Banner` | *object* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | -| `ChapterSource` | *object* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | -| `Composite` | *object* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | -| `ContentRating` | *object* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | -| `Country` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Director` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Duration` | *long* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | -| `Filter` | List<[Filter](../../Models/Components/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `Genre` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `GrandparentArt` | *string* | :heavy_minus_sign: | The `art` of the grandparent | -| `GrandparentHero` | *string* | :heavy_minus_sign: | The `hero` of the grandparent | -| `GrandparentKey` | *string* | :heavy_minus_sign: | The `key` of the grandparent | -| `GrandparentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the grandparent | -| `GrandparentTheme` | *string* | :heavy_minus_sign: | The `theme` of the grandparent | -| `GrandparentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the grandparent | -| `GrandparentTitle` | *string* | :heavy_minus_sign: | The `title` of the grandparent | -| `Guid` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Hero` | *object* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | -| `Image` | List<[Image](../../Models/Components/Image.md)> | :heavy_minus_sign: | N/A | -| `Index` | *long* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | -| `Key` | *object* | :heavy_minus_sign: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | -| `LastViewedAt` | *long* | :heavy_minus_sign: | When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. | -| `LeafCount` | *long* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | -| `Media` | List<[Media](../../Models/Components/Media.md)> | :heavy_minus_sign: | N/A | -| `OriginallyAvailableAt` | *object* | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | -| `OriginalTitle` | *object* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | -| `ParentHero` | *string* | :heavy_minus_sign: | The `hero` of the parent | -| `ParentIndex` | *long* | :heavy_minus_sign: | The `index` of the parent | -| `ParentKey` | *string* | :heavy_minus_sign: | The `key` of the parent | -| `ParentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the parent | -| `ParentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the parent | -| `ParentTitle` | *string* | :heavy_minus_sign: | The `title` of the parent | -| `PrimaryExtraKey` | *object* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | -| `Prompt` | *string* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | -| `Rating` | *double* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | -| `RatingArray` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `RatingCount` | *long* | :heavy_minus_sign: | Number of ratings under this metadata | -| `RatingImage` | *object* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | -| `RatingKey` | *object* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | -| `Role` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Search` | *bool* | :heavy_minus_sign: | Indicates this is a search directory | -| `Secondary` | *bool* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | -| `SkipChildren` | *bool* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | -| `SkipParent` | *bool* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | -| `Sort` | List<[Sort](../../Models/Components/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `Studio` | *object* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | -| `Subtype` | *object* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | -| `Summary` | *object* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | -| `Tagline` | *object* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | -| `Theme` | *object* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | -| `Thumb` | *object* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | -| `TitleSort` | *object* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | -| `UpdatedAt` | *long* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | -| `UserRating` | *double* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | -| `ViewCount` | *long* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | -| `ViewedLeafCount` | *long* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | -| `ViewOffset` | *long* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | -| `Writer` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | -| `Year` | *long* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | -| `AdditionalProperties` | Dictionary | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Player` | [Player](../../Models/Components/Player.md) | :heavy_minus_sign: | Information about the player being used for playback | | +| `Session` | [Session](../../Models/Components/Session.md) | :heavy_minus_sign: | Information about the playback session | | +| `User` | [Models.Components.User](../../Models/Components/User.md) | :heavy_minus_sign: | The user playing the content | | +| `Title` | *string* | :heavy_check_mark: | The title of the item (e.g. “300” or “The Simpsons”) | | +| `Type` | *string* | :heavy_check_mark: | The type of the video item, such as `movie`, `episode`, or `clip`. | | +| `AbsoluteIndex` | *int* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | | +| `AddedAt` | *long* | :heavy_check_mark: | In units of seconds since the epoch, returns the time at which the item was added to the library. | | +| `Art` | *string* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | /library/metadata/58683/art/1703239236 | +| `AudienceRating` | *float* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | | +| `AudienceRatingImage` | *string* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | | +| `Autotag` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Banner` | *string* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | | +| `ChapterSource` | *string* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | media | +| `ChildCount` | *int* | :heavy_minus_sign: | The number of child items associated with this media item. | 1 | +| `Composite` | *string* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | | +| `ContentRating` | *string* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | | +| `Country` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Director` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Duration` | *int* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | | +| `Filter` | List<[Filter](../../Models/Components/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `Genre` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `GrandparentArt` | *string* | :heavy_minus_sign: | The `art` of the grandparent | | +| `GrandparentGuid` | *string* | :heavy_minus_sign: | The GUID of the grandparent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `GrandparentHero` | *string* | :heavy_minus_sign: | The `hero` of the grandparent | | +| `GrandparentKey` | *string* | :heavy_minus_sign: | The `key` of the grandparent | | +| `GrandparentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the grandparent | | +| `GrandparentTheme` | *string* | :heavy_minus_sign: | The `theme` of the grandparent | | +| `GrandparentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the grandparent | | +| `GrandparentTitle` | *string* | :heavy_minus_sign: | The `title` of the grandparent | | +| `Guid` | *string* | :heavy_minus_sign: | The globally unique identifier for the media item. | plex://movie/5d7768ba96b655001fdc0408 | +| `Guids` | List<[Models.Requests.Guids](../../Models/Requests/Guids.md)> | :heavy_minus_sign: | N/A | | +| `Hero` | *string* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | | +| `Image` | List<[Image](../../Models/Components/Image.md)> | :heavy_minus_sign: | N/A | | +| `Index` | *int* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | | +| `Key` | *string* | :heavy_check_mark: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | | +| `LastViewedAt` | *long* | :heavy_minus_sign: | N/A | 1556281940 | +| `LeafCount` | *int* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | | +| `Media` | List<[Media](../../Models/Components/Media.md)> | :heavy_minus_sign: | N/A | | +| `OriginallyAvailableAt` | [LocalDate](https://nodatime.org/3.1.x/api/NodaTime.LocalDate.html) | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | 2022-12-14 | +| `OriginalTitle` | *string* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | | +| `ParentGuid` | *string* | :heavy_minus_sign: | The GUID of the parent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `ParentHero` | *string* | :heavy_minus_sign: | The `hero` of the parent | | +| `ParentIndex` | *int* | :heavy_minus_sign: | The `index` of the parent | | +| `ParentKey` | *string* | :heavy_minus_sign: | The `key` of the parent | | +| `ParentRatingKey` | *string* | :heavy_minus_sign: | The `ratingKey` of the parent | | +| `ParentThumb` | *string* | :heavy_minus_sign: | The `thumb` of the parent | | +| `ParentTitle` | *string* | :heavy_minus_sign: | The `title` of the parent | | +| `PrimaryExtraKey` | *string* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | | +| `Prompt` | *string* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | | +| `Rating` | *float* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | | +| `RatingArray` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `RatingCount` | *int* | :heavy_minus_sign: | Number of ratings under this metadata | | +| `RatingImage` | *string* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | | +| `RatingKey` | *string* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | | +| `Role` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Search` | *bool* | :heavy_minus_sign: | Indicates this is a search directory | | +| `Secondary` | *bool* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | | +| `SkipChildren` | *bool* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | | +| `SkipParent` | *bool* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | | +| `Sort` | List<[Sort](../../Models/Components/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `Studio` | *string* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | | +| `Subtype` | *string* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | | +| `Summary` | *string* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | | +| `Tagline` | *string* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | | +| `Theme` | *string* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | /library/metadata/1/theme/1705636920 | +| `Thumb` | *string* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | /library/metadata/58683/thumb/1703239236 | +| `TitleSort` | *string* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | | +| `UpdatedAt` | *long* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | | +| `UserRating` | *float* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | | +| `ViewCount` | *int* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | | +| `ViewedLeafCount` | *int* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | | +| `ViewOffset` | *int* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | | +| `Writer` | List<[Tag](../../Models/Components/Tag.md)> | :heavy_minus_sign: | N/A | | +| `Year` | *int* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | | +| `AdditionalProperties` | Dictionary | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Requests/Owned.md b/docs/Models/Requests/Owned.md new file mode 100644 index 0000000..6f7fa48 --- /dev/null +++ b/docs/Models/Requests/Owned.md @@ -0,0 +1,11 @@ +# Owned + +Indicates if the user owns the server. + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/PastSubscription.md b/docs/Models/Requests/PastSubscription.md new file mode 100644 index 0000000..07fa2c4 --- /dev/null +++ b/docs/Models/Requests/PastSubscription.md @@ -0,0 +1,22 @@ +# PastSubscription + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | +| `Id` | *string* | :heavy_check_mark: | N/A | | +| `Mode` | *string* | :heavy_check_mark: | N/A | | +| `RenewsAt` | *long* | :heavy_check_mark: | N/A | 1556281940 | +| `EndsAt` | *long* | :heavy_check_mark: | N/A | 1556281940 | +| `Canceled` | *bool* | :heavy_minus_sign: | N/A | false | +| `GracePeriod` | *bool* | :heavy_minus_sign: | N/A | false | +| `OnHold` | *bool* | :heavy_minus_sign: | N/A | false | +| `CanReactivate` | *bool* | :heavy_minus_sign: | N/A | false | +| `CanUpgrade` | *bool* | :heavy_minus_sign: | N/A | false | +| `CanDowngrade` | *bool* | :heavy_minus_sign: | N/A | false | +| `CanConvert` | *bool* | :heavy_minus_sign: | N/A | false | +| `Type` | *string* | :heavy_check_mark: | N/A | plexpass | +| `Transfer` | *string* | :heavy_check_mark: | N/A | | +| `State` | [PostUsersSignInDataState](../../Models/Requests/PostUsersSignInDataState.md) | :heavy_check_mark: | N/A | ended | +| `Billing` | [Billing](../../Models/Requests/Billing.md) | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/Models/Requests/PathParamTask.md b/docs/Models/Requests/PathParamButlerTask.md similarity index 98% rename from docs/Models/Requests/PathParamTask.md rename to docs/Models/Requests/PathParamButlerTask.md index 1b38099..458f971 100644 --- a/docs/Models/Requests/PathParamTask.md +++ b/docs/Models/Requests/PathParamButlerTask.md @@ -1,4 +1,4 @@ -# PathParamTask +# PathParamButlerTask The task name diff --git a/docs/Models/Requests/Pending.md b/docs/Models/Requests/Pending.md new file mode 100644 index 0000000..5388510 --- /dev/null +++ b/docs/Models/Requests/Pending.md @@ -0,0 +1,11 @@ +# Pending + +Indicates if the server is pending approval. + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/PostUsersSignInDataAuthenticationStatus.md b/docs/Models/Requests/PostUsersSignInDataAuthenticationStatus.md new file mode 100644 index 0000000..67f6e0c --- /dev/null +++ b/docs/Models/Requests/PostUsersSignInDataAuthenticationStatus.md @@ -0,0 +1,11 @@ +# PostUsersSignInDataAuthenticationStatus + +String representation of subscriptionActive + + +## Values + +| Name | Value | +| ---------- | ---------- | +| `Inactive` | Inactive | +| `Active` | Active | \ No newline at end of file diff --git a/docs/Models/Requests/PostUsersSignInDataRequest.md b/docs/Models/Requests/PostUsersSignInDataRequest.md new file mode 100644 index 0000000..93d6104 --- /dev/null +++ b/docs/Models/Requests/PostUsersSignInDataRequest.md @@ -0,0 +1,19 @@ +# PostUsersSignInDataRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | +| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `Product` | *string* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `Version` | *string* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `Platform` | *string* | :heavy_minus_sign: | The platform of the client | Roku | +| `PlatformVersion` | *string* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `Device` | *string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `Model` | *string* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | +| `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | +| `RequestBody` | [PostUsersSignInDataRequestBody](../../Models/Requests/PostUsersSignInDataRequestBody.md) | :heavy_minus_sign: | Login credentials | | \ No newline at end of file diff --git a/docs/Models/Requests/PostUsersSignInDataRequestBody.md b/docs/Models/Requests/PostUsersSignInDataRequestBody.md new file mode 100644 index 0000000..cc21d2d --- /dev/null +++ b/docs/Models/Requests/PostUsersSignInDataRequestBody.md @@ -0,0 +1,13 @@ +# PostUsersSignInDataRequestBody + +Login credentials + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `Login` | *string* | :heavy_check_mark: | N/A | username@email.com | +| `Password` | *string* | :heavy_check_mark: | N/A | password123 | +| `RememberMe` | *bool* | :heavy_minus_sign: | N/A | | +| `VerificationCode` | *string* | :heavy_minus_sign: | N/A | 123456 | \ No newline at end of file diff --git a/docs/Models/Requests/PostUsersSignInDataResponse.md b/docs/Models/Requests/PostUsersSignInDataResponse.md new file mode 100644 index 0000000..5e700a7 --- /dev/null +++ b/docs/Models/Requests/PostUsersSignInDataResponse.md @@ -0,0 +1,11 @@ +# PostUsersSignInDataResponse + + +## 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` | [HttpResponseMessage](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpresponsemessage?view=net-5.0) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `UserPlexAccount` | [PostUsersSignInDataUserPlexAccount](../../Models/Requests/PostUsersSignInDataUserPlexAccount.md) | :heavy_minus_sign: | Returns the user account data with a valid auth token | \ No newline at end of file diff --git a/docs/Models/Requests/PostUsersSignInDataState.md b/docs/Models/Requests/PostUsersSignInDataState.md new file mode 100644 index 0000000..3801e7b --- /dev/null +++ b/docs/Models/Requests/PostUsersSignInDataState.md @@ -0,0 +1,8 @@ +# PostUsersSignInDataState + + +## Values + +| Name | Value | +| ------- | ------- | +| `Ended` | ended | \ No newline at end of file diff --git a/docs/Models/Requests/PostUsersSignInDataStatus.md b/docs/Models/Requests/PostUsersSignInDataStatus.md new file mode 100644 index 0000000..ca8100e --- /dev/null +++ b/docs/Models/Requests/PostUsersSignInDataStatus.md @@ -0,0 +1,11 @@ +# PostUsersSignInDataStatus + +String representation of subscriptionActive + + +## Values + +| Name | Value | +| ---------- | ---------- | +| `Inactive` | Inactive | +| `Active` | Active | \ No newline at end of file diff --git a/docs/Models/Requests/PostUsersSignInDataSubscription.md b/docs/Models/Requests/PostUsersSignInDataSubscription.md new file mode 100644 index 0000000..e080829 --- /dev/null +++ b/docs/Models/Requests/PostUsersSignInDataSubscription.md @@ -0,0 +1,13 @@ +# PostUsersSignInDataSubscription + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | +| `Features` | List<*string*> | :heavy_minus_sign: | List of features allowed on your Plex Pass subscription | | +| `Active` | *bool* | :heavy_minus_sign: | If the account's Plex Pass subscription is active | true | +| `SubscribedAt` | *string* | :heavy_minus_sign: | Date the account subscribed to Plex Pass | 2021-04-12T18:21:12Z | +| `Status` | [PostUsersSignInDataAuthenticationStatus](../../Models/Requests/PostUsersSignInDataAuthenticationStatus.md) | :heavy_minus_sign: | String representation of subscriptionActive | Inactive | +| `PaymentService` | *string* | :heavy_minus_sign: | Payment service used for your Plex Pass subscription | | +| `Plan` | *string* | :heavy_minus_sign: | Name of Plex Pass subscription plan | | \ No newline at end of file diff --git a/docs/Models/Requests/PostUsersSignInDataUserPlexAccount.md b/docs/Models/Requests/PostUsersSignInDataUserPlexAccount.md new file mode 100644 index 0000000..3cc574f --- /dev/null +++ b/docs/Models/Requests/PostUsersSignInDataUserPlexAccount.md @@ -0,0 +1,52 @@ +# PostUsersSignInDataUserPlexAccount + +Returns the user account data with a valid auth token + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `AdsConsent` | *bool* | :heavy_minus_sign: | Unknown | | +| `AdsConsentReminderAt` | *long* | :heavy_minus_sign: | N/A | 1556281940 | +| `AdsConsentSetAt` | *long* | :heavy_minus_sign: | N/A | 1556281940 | +| `Anonymous` | *bool* | :heavy_minus_sign: | Unknown | | +| `AuthToken` | *string* | :heavy_check_mark: | The account token | CxoUzBTSV5hsxjTpFKaf | +| `BackupCodesCreated` | *bool* | :heavy_minus_sign: | If the two-factor authentication backup codes have been created | | +| `Confirmed` | *bool* | :heavy_minus_sign: | If the account has been confirmed | | +| `Country` | *string* | :heavy_minus_sign: | The account country | US | +| `Email` | *string* | :heavy_check_mark: | The account email address | username@email.com | +| `EmailOnlyAuth` | *bool* | :heavy_minus_sign: | If login with email only is enabled | | +| `ExperimentalFeatures` | *bool* | :heavy_minus_sign: | If experimental features are enabled | | +| `FriendlyName` | *string* | :heavy_check_mark: | Your account full name | friendlyUsername | +| `Entitlements` | List<*string*> | :heavy_minus_sign: | List of devices your allowed to use with this account | [] | +| `Guest` | *bool* | :heavy_minus_sign: | If the account is a Plex Home guest user | | +| `HasPassword` | *bool* | :heavy_minus_sign: | If the account has a password | | +| `Home` | *bool* | :heavy_minus_sign: | If the account is a Plex Home user | | +| `HomeAdmin` | *bool* | :heavy_minus_sign: | If the account is the Plex Home admin | | +| `HomeSize` | *int* | :heavy_minus_sign: | The number of accounts in the Plex Home | 1 | +| `Id` | *int* | :heavy_check_mark: | The Plex account ID | 13692262 | +| `JoinedAt` | *long* | :heavy_check_mark: | Unix epoch datetime in seconds | 1556281940 | +| `Locale` | *string* | :heavy_minus_sign: | The account locale | | +| `MailingListActive` | *bool* | :heavy_minus_sign: | If you are subscribed to the Plex newsletter | | +| `MailingListStatus` | [Models.Requests.MailingListStatus](../../Models/Requests/MailingListStatus.md) | :heavy_minus_sign: | Your current mailing list status | active | +| `MaxHomeSize` | *int* | :heavy_minus_sign: | The maximum number of accounts allowed in the Plex Home | 15 | +| ~~`Pin`~~ | *string* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

[Might be removed] The hashed Plex Home PIN | | +| `Profile` | [UserProfile](../../Models/Components/UserProfile.md) | :heavy_minus_sign: | N/A | | +| `Protected` | *bool* | :heavy_minus_sign: | If the account has a Plex Home PIN enabled | | +| `RememberExpiresAt` | *long* | :heavy_minus_sign: | Unix epoch datetime in seconds | 1556281940 | +| `Restricted` | *bool* | :heavy_minus_sign: | If the account is a Plex Home managed user | | +| `Roles` | List<*string*> | :heavy_minus_sign: | [Might be removed] List of account roles. Plexpass membership listed here | | +| `ScrobbleTypes` | *string* | :heavy_minus_sign: | Unknown | | +| `Services` | List<[Models.Requests.Services](../../Models/Requests/Services.md)> | :heavy_minus_sign: | N/A | | +| `Subscription` | [Models.Requests.Subscription](../../Models/Requests/Subscription.md) | :heavy_minus_sign: | If the account's Plex Pass subscription is active | | +| `SubscriptionDescription` | *string* | :heavy_minus_sign: | Description of the Plex Pass subscription | | +| `Subscriptions` | List<[PostUsersSignInDataSubscription](../../Models/Requests/PostUsersSignInDataSubscription.md)> | :heavy_minus_sign: | N/A | | +| `Thumb` | *string* | :heavy_minus_sign: | URL of the account thumbnail | https://plex.tv/users/a4f43c1ebfde43a5/avatar?c=8372075101 | +| `Title` | *string* | :heavy_check_mark: | The title of the account (username or friendly name) | UsernameTitle | +| `TwoFactorEnabled` | *bool* | :heavy_minus_sign: | If two-factor authentication is enabled | | +| `Username` | *string* | :heavy_check_mark: | The account username | Username | +| `Uuid` | *string* | :heavy_check_mark: | The account UUID | dae343c1f45beb4f | +| `AttributionPartner` | *string* | :heavy_minus_sign: | N/A | | +| `PastSubscriptions` | List<[PastSubscription](../../Models/Requests/PastSubscription.md)> | :heavy_check_mark: | N/A | | +| `Trials` | List<[Trials](../../Models/Requests/Trials.md)> | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/Models/Requests/Protected.md b/docs/Models/Requests/Protected.md new file mode 100644 index 0000000..5e37e85 --- /dev/null +++ b/docs/Models/Requests/Protected.md @@ -0,0 +1,11 @@ +# Protected + +Indicates whether the account is protected. + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/Restricted.md b/docs/Models/Requests/Restricted.md new file mode 100644 index 0000000..bbbb366 --- /dev/null +++ b/docs/Models/Requests/Restricted.md @@ -0,0 +1,11 @@ +# Restricted + +Indicates if the user has restricted access. + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/Server.md b/docs/Models/Requests/Server.md new file mode 100644 index 0000000..f025d75 --- /dev/null +++ b/docs/Models/Requests/Server.md @@ -0,0 +1,16 @@ +# Server + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | +| `Id` | *long* | :heavy_check_mark: | Unique ID of the server of the connected user | 907759180 | +| `ServerId` | *long* | :heavy_check_mark: | ID of the actual Plex server. | 9999999 | +| `MachineIdentifier` | *string* | :heavy_check_mark: | Machine identifier of the Plex server. | fbb8aa6be6e0c997c6268bc2b4431c8807f70a3 | +| `Name` | *string* | :heavy_check_mark: | Name of the Plex server of the connected user. | ConnectedUserFlix | +| `LastSeenAt` | *long* | :heavy_check_mark: | Unix epoch datetime in seconds | 1556281940 | +| `NumLibraries` | *long* | :heavy_check_mark: | Number of libraries in the server this user has access to. | 16 | +| `AllLibraries` | [AllLibraries](../../Models/Requests/AllLibraries.md) | :heavy_minus_sign: | N/A | 1 | +| `Owned` | [Owned](../../Models/Requests/Owned.md) | :heavy_minus_sign: | N/A | 1 | +| `Pending` | [Pending](../../Models/Requests/Pending.md) | :heavy_minus_sign: | N/A | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/Services.md b/docs/Models/Requests/Services.md new file mode 100644 index 0000000..14bb88b --- /dev/null +++ b/docs/Models/Requests/Services.md @@ -0,0 +1,12 @@ +# Services + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | +| `Identifier` | *string* | :heavy_check_mark: | N/A | metadata-dev | +| `Endpoint` | *string* | :heavy_check_mark: | N/A | https://epg.provider.plex.tv | +| `Token` | *string* | :heavy_check_mark: | N/A | DjoMtqFAGRL1uVtCyF1dKIorTbShJeqv | +| `Secret` | *string* | :heavy_check_mark: | N/A | | +| `Status` | [Models.Requests.Status](../../Models/Requests/Status.md) | :heavy_check_mark: | N/A | online | \ No newline at end of file diff --git a/docs/Models/Requests/StartTaskRequest.md b/docs/Models/Requests/StartTaskRequest.md index a65507c..2abb7df 100644 --- a/docs/Models/Requests/StartTaskRequest.md +++ b/docs/Models/Requests/StartTaskRequest.md @@ -3,17 +3,17 @@ ## Fields -| Field | Type | Required | Description | Example | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | -| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | -| `Product` | *string* | :heavy_minus_sign: | The name of the client product | Plex for Roku | -| `Version` | *string* | :heavy_minus_sign: | The version of the client application | 2.4.1 | -| `Platform` | *string* | :heavy_minus_sign: | The platform of the client | Roku | -| `PlatformVersion` | *string* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | -| `Device` | *string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | -| `Model` | *string* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | -| `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | -| `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | -| `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | -| `Task` | [PathParamTask](../../Models/Requests/PathParamTask.md) | :heavy_check_mark: | The task name | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `Product` | *string* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `Version` | *string* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `Platform` | *string* | :heavy_minus_sign: | The platform of the client | Roku | +| `PlatformVersion` | *string* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `Device` | *string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `Model` | *string* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | +| `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | +| `ButlerTask` | [PathParamButlerTask](../../Models/Requests/PathParamButlerTask.md) | :heavy_check_mark: | The task name | | \ No newline at end of file diff --git a/docs/Models/Requests/Status.md b/docs/Models/Requests/Status.md index 6bb8750..3545d93 100644 --- a/docs/Models/Requests/Status.md +++ b/docs/Models/Requests/Status.md @@ -1,20 +1,9 @@ # Status -The state of this queue - - deciding: At least one item is still being decided - - waiting: At least one item is waiting for transcode and none are currently transcoding - - processing: At least one item is being transcoded - - done: All items are available (or potentially expired) - - error: At least one item has encountered an error - - ## Values -| Name | Value | -| ------------ | ------------ | -| `Deciding` | deciding | -| `Waiting` | waiting | -| `Processing` | processing | -| `Done` | done | -| `Error` | error | \ No newline at end of file +| Name | Value | +| --------- | --------- | +| `Online` | online | +| `Offline` | offline | \ No newline at end of file diff --git a/docs/Models/Requests/StopTaskRequest.md b/docs/Models/Requests/StopTaskRequest.md index 66f8be5..dba395d 100644 --- a/docs/Models/Requests/StopTaskRequest.md +++ b/docs/Models/Requests/StopTaskRequest.md @@ -16,4 +16,4 @@ | `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | | `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | | `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | -| `Task` | [Task](../../Models/Requests/Task.md) | :heavy_check_mark: | The task name | | \ No newline at end of file +| `ButlerTask` | [ButlerTask](../../Models/Requests/ButlerTask.md) | :heavy_check_mark: | The task name | | \ No newline at end of file diff --git a/docs/Models/Requests/Subscription.md b/docs/Models/Requests/Subscription.md new file mode 100644 index 0000000..4c6f2e0 --- /dev/null +++ b/docs/Models/Requests/Subscription.md @@ -0,0 +1,15 @@ +# Subscription + +If the account's Plex Pass subscription is active + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | +| `Features` | List<*string*> | :heavy_minus_sign: | List of features allowed on your Plex Pass subscription | | +| `Active` | *bool* | :heavy_minus_sign: | If the account's Plex Pass subscription is active | true | +| `SubscribedAt` | *string* | :heavy_minus_sign: | Date the account subscribed to Plex Pass | 2021-04-12T18:21:12Z | +| `Status` | [PostUsersSignInDataStatus](../../Models/Requests/PostUsersSignInDataStatus.md) | :heavy_minus_sign: | String representation of subscriptionActive | Inactive | +| `PaymentService` | *string* | :heavy_minus_sign: | Payment service used for your Plex Pass subscription | | +| `Plan` | *string* | :heavy_minus_sign: | Name of Plex Pass subscription plan | | \ No newline at end of file diff --git a/docs/Models/Requests/Task.md b/docs/Models/Requests/Task.md deleted file mode 100644 index 3a1b6fc..0000000 --- a/docs/Models/Requests/Task.md +++ /dev/null @@ -1,31 +0,0 @@ -# Task - -The task name - - -## Values - -| Name | Value | -| ---------------------------------- | ---------------------------------- | -| `AutomaticUpdates` | AutomaticUpdates | -| `BackupDatabase` | BackupDatabase | -| `ButlerTaskGenerateAdMarkers` | ButlerTaskGenerateAdMarkers | -| `ButlerTaskGenerateCreditsMarkers` | ButlerTaskGenerateCreditsMarkers | -| `ButlerTaskGenerateIntroMarkers` | ButlerTaskGenerateIntroMarkers | -| `ButlerTaskGenerateVoiceActivity` | ButlerTaskGenerateVoiceActivity | -| `CleanOldBundles` | CleanOldBundles | -| `CleanOldCacheFiles` | CleanOldCacheFiles | -| `DeepMediaAnalysis` | DeepMediaAnalysis | -| `GarbageCollectBlobs` | GarbageCollectBlobs | -| `GarbageCollectLibraryMedia` | GarbageCollectLibraryMedia | -| `GenerateBlurHashes` | GenerateBlurHashes | -| `GenerateChapterThumbs` | GenerateChapterThumbs | -| `GenerateMediaIndexFiles` | GenerateMediaIndexFiles | -| `LoudnessAnalysis` | LoudnessAnalysis | -| `MusicAnalysis` | MusicAnalysis | -| `OptimizeDatabase` | OptimizeDatabase | -| `RefreshEpgGuides` | RefreshEpgGuides | -| `RefreshLibraries` | RefreshLibraries | -| `RefreshLocalMedia` | RefreshLocalMedia | -| `RefreshPeriodicMetadata` | RefreshPeriodicMetadata | -| `UpgradeMediaAnalysis` | UpgradeMediaAnalysis | \ No newline at end of file diff --git a/docs/Models/Requests/Trials.md b/docs/Models/Requests/Trials.md new file mode 100644 index 0000000..1b9b77d --- /dev/null +++ b/docs/Models/Requests/Trials.md @@ -0,0 +1,7 @@ +# Trials + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/Models/Requests/User.md b/docs/Models/Requests/User.md new file mode 100644 index 0000000..8bccd03 --- /dev/null +++ b/docs/Models/Requests/User.md @@ -0,0 +1,27 @@ +# User + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | +| `Id` | *long* | :heavy_check_mark: | User's unique ID. | 22526914 | +| `Title` | *string* | :heavy_check_mark: | User's display name. | Plex User | +| `Username` | *string* | :heavy_check_mark: | User's username. | zgfuc7krcqfimrmb9lsl5j | +| `Email` | *string* | :heavy_check_mark: | User's email address. | zgfuc7krcqfimrmb9lsl5j@protonmail.com | +| `RecommendationsPlaylistId` | *string* | :heavy_minus_sign: | ID of the user's recommendation playlist. | | +| `Thumb` | *string* | :heavy_check_mark: | URL to the user's avatar image. | https://plex.tv/users/3346028014e93acd/avatar?c=1731605021 | +| `Protected` | [Protected](../../Models/Requests/Protected.md) | :heavy_minus_sign: | N/A | 1 | +| `Home` | [Home](../../Models/Requests/Home.md) | :heavy_minus_sign: | N/A | 1 | +| `AllowTuners` | [AllowTuners](../../Models/Requests/AllowTuners.md) | :heavy_minus_sign: | N/A | 1 | +| `AllowSync` | [AllowSync](../../Models/Requests/AllowSync.md) | :heavy_minus_sign: | N/A | 1 | +| `AllowCameraUpload` | [AllowCameraUpload](../../Models/Requests/AllowCameraUpload.md) | :heavy_minus_sign: | N/A | 1 | +| `AllowChannels` | [AllowChannels](../../Models/Requests/AllowChannels.md) | :heavy_minus_sign: | N/A | 1 | +| `AllowSubtitleAdmin` | [AllowSubtitleAdmin](../../Models/Requests/AllowSubtitleAdmin.md) | :heavy_minus_sign: | N/A | 1 | +| `FilterAll` | *string* | :heavy_minus_sign: | Filters applied for all content. | | +| `FilterMovies` | *string* | :heavy_minus_sign: | Filters applied for movies. | | +| `FilterMusic` | *string* | :heavy_minus_sign: | Filters applied for music. | | +| `FilterPhotos` | *string* | :heavy_minus_sign: | Filters applied for photos. | | +| `FilterTelevision` | *string* | :heavy_minus_sign: | Filters applied for television. | | +| `Restricted` | [Restricted](../../Models/Requests/Restricted.md) | :heavy_minus_sign: | N/A | 1 | +| `Server` | List<[Server](../../Models/Requests/Server.md)> | :heavy_check_mark: | List of servers owned by the user. | | \ No newline at end of file diff --git a/docs/Models/Requests/VoiceSearchHubsRequest.md b/docs/Models/Requests/VoiceSearchHubsRequest.md index 59f2629..9c140ed 100644 --- a/docs/Models/Requests/VoiceSearchHubsRequest.md +++ b/docs/Models/Requests/VoiceSearchHubsRequest.md @@ -3,19 +3,19 @@ ## Fields -| Field | Type | Required | Description | Example | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | -| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | -| `Product` | *string* | :heavy_minus_sign: | The name of the client product | Plex for Roku | -| `Version` | *string* | :heavy_minus_sign: | The version of the client application | 2.4.1 | -| `Platform` | *string* | :heavy_minus_sign: | The platform of the client | Roku | -| `PlatformVersion` | *string* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | -| `Device` | *string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | -| `Model` | *string* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | -| `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | -| `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | -| `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | -| `Query` | *string* | :heavy_check_mark: | The query term | | -| `Type` | *long* | :heavy_minus_sign: | The metadata type to filter by | | -| `Limit` | *long* | :heavy_minus_sign: | The number of items to return per hub. 3 if not specified | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Accepts` | [Accepts](../../Models/Components/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `ClientIdentifier` | *string* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `Product` | *string* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `Version` | *string* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `Platform` | *string* | :heavy_minus_sign: | The platform of the client | Roku | +| `PlatformVersion` | *string* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `Device` | *string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `Model` | *string* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `DeviceVendor` | *string* | :heavy_minus_sign: | The device vendor | Roku | +| `DeviceName` | *string* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `Marketplace` | *string* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | +| `Query` | *string* | :heavy_check_mark: | The query term | | +| `Type` | [MediaType](../../Models/Components/MediaType.md) | :heavy_minus_sign: | The type of media to retrieve or filter by.

1 = movie
2 = show
3 = season
4 = episode
5 = artist
6 = album
7 = track
8 = photo_album
9 = photo

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries
| 2 | +| `Limit` | *long* | :heavy_minus_sign: | The number of items to return per hub. 3 if not specified | | \ No newline at end of file diff --git a/docs/sdks/authentication/README.md b/docs/sdks/authentication/README.md new file mode 100644 index 0000000..5cf918f --- /dev/null +++ b/docs/sdks/authentication/README.md @@ -0,0 +1,119 @@ +# Authentication +(*Authentication*) + +## Overview + +### Available Operations + +* [GetTokenDetails](#gettokendetails) - Get Token Details +* [PostUsersSignInData](#postuserssignindata) - Get User Sign In Data + +## GetTokenDetails + +Get the User data from the provided X-Plex-Token + +### Example Usage + + +```csharp +using LukeHagar.PlexAPI.SDK; +using LukeHagar.PlexAPI.SDK.Models.Components; +using LukeHagar.PlexAPI.SDK.Models.Requests; + +var sdk = new PlexAPI( + accepts: LukeHagar.PlexAPI.SDK.Models.Components.Accepts.ApplicationXml, + clientIdentifier: "abc123", + product: "Plex for Roku", + version: "2.4.1", + platform: "Roku", + platformVersion: "4.3 build 1057", + device: "Roku 3", + model: "4200X", + deviceVendor: "Roku", + deviceName: "Living Room TV", + marketplace: "googlePlay", + token: "" +); + +GetTokenDetailsRequest req = new GetTokenDetailsRequest() {}; + +var res = await sdk.Authentication.GetTokenDetailsAsync(req); + +// handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | +| `request` | [GetTokenDetailsRequest](../../Models/Requests/GetTokenDetailsRequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `serverURL` | *string* | :heavy_minus_sign: | An optional server URL to use. | + +### Response + +**[GetTokenDetailsResponse](../../Models/Requests/GetTokenDetailsResponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | +| LukeHagar.PlexAPI.SDK.Models.Errors.GetTokenDetailsBadRequest | 400 | application/json | +| LukeHagar.PlexAPI.SDK.Models.Errors.GetTokenDetailsUnauthorized | 401 | application/json | +| LukeHagar.PlexAPI.SDK.Models.Errors.SDKException | 4XX, 5XX | \*/\* | + +## PostUsersSignInData + +Sign in user with username and password and return user data with Plex authentication token + +### Example Usage + + +```csharp +using LukeHagar.PlexAPI.SDK; +using LukeHagar.PlexAPI.SDK.Models.Requests; + +var sdk = new PlexAPI( + accepts: LukeHagar.PlexAPI.SDK.Models.Components.Accepts.ApplicationXml, + clientIdentifier: "3381b62b-9ab7-4e37-827b-203e9809eb58", + product: "Plex for Roku", + version: "2.4.1", + platform: "Roku", + platformVersion: "4.3 build 1057", + device: "Roku 3", + model: "4200X", + deviceVendor: "Roku", + deviceName: "Living Room TV", + marketplace: "googlePlay" +); + +PostUsersSignInDataRequest req = new PostUsersSignInDataRequest() { + RequestBody = new PostUsersSignInDataRequestBody() { + Login = "username@email.com", + Password = "password123", + VerificationCode = "123456", + }, +}; + +var res = await sdk.Authentication.PostUsersSignInDataAsync(req); + +// handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| `request` | [PostUsersSignInDataRequest](../../Models/Requests/PostUsersSignInDataRequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `serverURL` | *string* | :heavy_minus_sign: | An optional server URL to use. | + +### Response + +**[PostUsersSignInDataResponse](../../Models/Requests/PostUsersSignInDataResponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| LukeHagar.PlexAPI.SDK.Models.Errors.PostUsersSignInDataBadRequest | 400 | application/json | +| LukeHagar.PlexAPI.SDK.Models.Errors.PostUsersSignInDataUnauthorized | 401 | application/json | +| LukeHagar.PlexAPI.SDK.Models.Errors.SDKException | 4XX, 5XX | \*/\* | \ No newline at end of file diff --git a/docs/sdks/butler/README.md b/docs/sdks/butler/README.md index 7c0352c..24b331d 100644 --- a/docs/sdks/butler/README.md +++ b/docs/sdks/butler/README.md @@ -111,7 +111,7 @@ This endpoint will stop a currently running task by name, or remove it from the ### Example Usage - + ```csharp using LukeHagar.PlexAPI.SDK; using LukeHagar.PlexAPI.SDK.Models.Components; @@ -133,7 +133,7 @@ var sdk = new PlexAPI( ); StopTaskRequest req = new StopTaskRequest() { - Task = Task.CleanOldBundles, + ButlerTask = ButlerTask.CleanOldBundles, }; var res = await sdk.Butler.StopTaskAsync(req); @@ -164,7 +164,7 @@ This endpoint will attempt to start a specific Butler task by name. ### Example Usage - + ```csharp using LukeHagar.PlexAPI.SDK; using LukeHagar.PlexAPI.SDK.Models.Components; @@ -186,7 +186,7 @@ var sdk = new PlexAPI( ); StartTaskRequest req = new StartTaskRequest() { - Task = PathParamTask.RefreshLocalMedia, + ButlerTask = PathParamButlerTask.RefreshLocalMedia, }; var res = await sdk.Butler.StartTaskAsync(req); diff --git a/docs/sdks/collections/README.md b/docs/sdks/collections/README.md index 731d1f0..dda5e3a 100644 --- a/docs/sdks/collections/README.md +++ b/docs/sdks/collections/README.md @@ -38,6 +38,7 @@ var sdk = new PlexAPI( CreateCollectionRequest req = new CreateCollectionRequest() { SectionId = "", + Type = MediaType.TvShow, }; var res = await sdk.Collections.CreateCollectionAsync(req); diff --git a/docs/sdks/content/README.md b/docs/sdks/content/README.md index 6b70eca..ec3b0ac 100644 --- a/docs/sdks/content/README.md +++ b/docs/sdks/content/README.md @@ -103,14 +103,14 @@ var sdk = new PlexAPI( GetMetadataItemRequest req = new GetMetadataItemRequest() { Ids = new List() {}, - AsyncCheckFiles = BoolInt.One, - AsyncRefreshLocalMediaAgent = BoolInt.One, - AsyncRefreshAnalysis = BoolInt.One, - CheckFiles = BoolInt.One, - SkipRefresh = BoolInt.One, - CheckFileAvailability = BoolInt.One, - AsyncAugmentMetadata = BoolInt.One, - AugmentCount = BoolInt.One, + AsyncCheckFiles = BoolInt.True, + AsyncRefreshLocalMediaAgent = BoolInt.True, + AsyncRefreshAnalysis = BoolInt.True, + CheckFiles = BoolInt.True, + SkipRefresh = BoolInt.True, + CheckFileAvailability = BoolInt.True, + AsyncAugmentMetadata = BoolInt.True, + AugmentCount = BoolInt.True, }; var res = await sdk.Content.GetMetadataItemAsync(req); @@ -214,6 +214,13 @@ var sdk = new PlexAPI( ); ListContentRequest req = new ListContentRequest() { + MediaQuery = new MediaQuery() { + Type = MediaType.Episode, + SourceType = 2, + Sort = "duration:desc,index", + }, + IncludeMeta = BoolInt.True, + IncludeGuids = BoolInt.True, SectionId = "", }; diff --git a/docs/sdks/devices/README.md b/docs/sdks/devices/README.md index d4db2ca..810c4d7 100644 --- a/docs/sdks/devices/README.md +++ b/docs/sdks/devices/README.md @@ -348,7 +348,7 @@ var sdk = new PlexAPI( ModifyDeviceRequest req = new ModifyDeviceRequest() { DeviceId = 879135, - Enabled = BoolInt.One, + Enabled = BoolInt.True, }; var res = await sdk.Devices.ModifyDeviceAsync(req); diff --git a/docs/sdks/downloadqueue/README.md b/docs/sdks/downloadqueue/README.md index 248a1f1..1ee16d4 100644 --- a/docs/sdks/downloadqueue/README.md +++ b/docs/sdks/downloadqueue/README.md @@ -143,13 +143,13 @@ AddDownloadQueueItemsRequest req = new AddDownloadQueueItemsRequest() { AdvancedSubtitles = LukeHagar.PlexAPI.SDK.Models.Components.AdvancedSubtitles.Burn, AudioBoost = 50, AudioChannelCount = 5, - AutoAdjustQuality = BoolInt.One, - AutoAdjustSubtitle = BoolInt.One, - DirectPlay = BoolInt.One, - DirectStream = BoolInt.One, - DirectStreamAudio = BoolInt.One, - DisableResolutionRotation = BoolInt.One, - HasMDE = BoolInt.One, + AutoAdjustQuality = BoolInt.True, + AutoAdjustSubtitle = BoolInt.True, + DirectPlay = BoolInt.True, + DirectStream = BoolInt.True, + DirectStreamAudio = BoolInt.True, + DisableResolutionRotation = BoolInt.True, + HasMDE = BoolInt.True, Location = LukeHagar.PlexAPI.SDK.Models.Components.Location.Wan, MediaBufferSize = 102400, MediaIndex = 0, diff --git a/docs/sdks/general/README.md b/docs/sdks/general/README.md index a4df71a..5164a9d 100644 --- a/docs/sdks/general/README.md +++ b/docs/sdks/general/README.md @@ -118,7 +118,7 @@ var sdk = new PlexAPI( GetSourceConnectionInformationRequest req = new GetSourceConnectionInformationRequest() { Source = "server://client-identifier", - Refresh = BoolInt.One, + Refresh = BoolInt.True, }; var res = await sdk.General.GetSourceConnectionInformationAsync(req); diff --git a/docs/sdks/hubs/README.md b/docs/sdks/hubs/README.md index 394d4f3..4adb7fa 100644 --- a/docs/sdks/hubs/README.md +++ b/docs/sdks/hubs/README.md @@ -50,7 +50,7 @@ var sdk = new PlexAPI( ); GetAllHubsRequest req = new GetAllHubsRequest() { - OnlyTransient = BoolInt.One, + OnlyTransient = BoolInt.True, }; var res = await sdk.Hubs.GetAllHubsAsync(req); @@ -260,7 +260,7 @@ var sdk = new PlexAPI( GetMetadataHubsRequest req = new GetMetadataHubsRequest() { MetadataId = 605482, - OnlyTransient = BoolInt.One, + OnlyTransient = BoolInt.True, }; var res = await sdk.Hubs.GetMetadataHubsAsync(req); @@ -313,7 +313,7 @@ var sdk = new PlexAPI( GetPostplayHubsRequest req = new GetPostplayHubsRequest() { MetadataId = 441419, - OnlyTransient = BoolInt.One, + OnlyTransient = BoolInt.True, }; var res = await sdk.Hubs.GetPostplayHubsAsync(req); @@ -366,7 +366,7 @@ var sdk = new PlexAPI( GetRelatedHubsRequest req = new GetRelatedHubsRequest() { MetadataId = 8858, - OnlyTransient = BoolInt.One, + OnlyTransient = BoolInt.True, }; var res = await sdk.Hubs.GetRelatedHubsAsync(req); @@ -419,7 +419,7 @@ var sdk = new PlexAPI( GetSectionHubsRequest req = new GetSectionHubsRequest() { SectionId = 336924, - OnlyTransient = BoolInt.One, + OnlyTransient = BoolInt.True, }; var res = await sdk.Hubs.GetSectionHubsAsync(req); @@ -577,9 +577,9 @@ var sdk = new PlexAPI( CreateCustomHubRequest req = new CreateCustomHubRequest() { SectionId = 869922, MetadataItemId = 703843, - PromotedToRecommended = BoolInt.One, - PromotedToOwnHome = BoolInt.One, - PromotedToSharedHome = BoolInt.One, + PromotedToRecommended = BoolInt.True, + PromotedToOwnHome = BoolInt.True, + PromotedToSharedHome = BoolInt.True, }; var res = await sdk.Hubs.CreateCustomHubAsync(req); @@ -739,9 +739,9 @@ var sdk = new PlexAPI( UpdateHubVisibilityRequest req = new UpdateHubVisibilityRequest() { SectionId = 341650, Identifier = "", - PromotedToRecommended = BoolInt.One, - PromotedToOwnHome = BoolInt.One, - PromotedToSharedHome = BoolInt.One, + PromotedToRecommended = BoolInt.True, + PromotedToOwnHome = BoolInt.True, + PromotedToSharedHome = BoolInt.True, }; var res = await sdk.Hubs.UpdateHubVisibilityAsync(req); diff --git a/docs/sdks/library/README.md b/docs/sdks/library/README.md index 0f8de4a..3b4508a 100644 --- a/docs/sdks/library/README.md +++ b/docs/sdks/library/README.md @@ -114,7 +114,13 @@ var sdk = new PlexAPI( token: "" ); -GetLibraryItemsRequest req = new GetLibraryItemsRequest() {}; +GetLibraryItemsRequest req = new GetLibraryItemsRequest() { + MediaQuery = new MediaQuery() { + Type = MediaType.Episode, + SourceType = 2, + Sort = "duration:desc,index", + }, +}; var res = await sdk.Library.GetLibraryItemsAsync(req); @@ -224,8 +230,8 @@ var sdk = new PlexAPI( IngestTransientItemRequest req = new IngestTransientItemRequest() { Url = "file:///storage%2Femulated%2F0%2FArcher-S01E01.mkv", VirtualFilePath = "/Avatar.mkv", - ComputeHashes = BoolInt.One, - IngestNonMatches = BoolInt.One, + ComputeHashes = BoolInt.True, + IngestNonMatches = BoolInt.True, }; var res = await sdk.Library.IngestTransientItemAsync(req); @@ -281,9 +287,10 @@ var sdk = new PlexAPI( ); GetLibraryMatchesRequest req = new GetLibraryMatchesRequest() { - IncludeFullMetadata = BoolInt.One, - IncludeAncestorMetadata = BoolInt.One, - IncludeAlternateMetadataSources = BoolInt.One, + Type = MediaType.TvShow, + IncludeFullMetadata = BoolInt.True, + IncludeAncestorMetadata = BoolInt.True, + IncludeAlternateMetadataSources = BoolInt.True, }; var res = await sdk.Library.GetLibraryMatchesAsync(req); @@ -335,7 +342,7 @@ var sdk = new PlexAPI( ); OptimizeDatabaseRequest req = new OptimizeDatabaseRequest() { - Async = BoolInt.One, + Async = BoolInt.True, }; var res = await sdk.Library.OptimizeDatabaseAsync(req); @@ -485,8 +492,8 @@ AddSectionRequest req = new AddSectionRequest() { "O:\fatboy\Media\My Music", }, Prefs = new QueryParamPrefs() {}, - Relative = BoolInt.One, - ImportFromiTunes = BoolInt.One, + Relative = BoolInt.True, + ImportFromiTunes = BoolInt.True, }; var res = await sdk.Library.AddSectionAsync(req); @@ -667,7 +674,9 @@ var sdk = new PlexAPI( token: "" ); -GetTagsRequest req = new GetTagsRequest() {}; +GetTagsRequest req = new GetTagsRequest() { + Type = MediaType.TvShow, +}; var res = await sdk.Library.GetTagsAsync(req); @@ -719,7 +728,7 @@ var sdk = new PlexAPI( DeleteMetadataItemRequest req = new DeleteMetadataItemRequest() { Ids = "", - Proxy = BoolInt.One, + Proxy = BoolInt.True, }; var res = await sdk.Library.DeleteMetadataItemAsync(req); @@ -984,7 +993,7 @@ var sdk = new PlexAPI( GenerateThumbsRequest req = new GenerateThumbsRequest() { Ids = "", - Force = BoolInt.One, + Force = BoolInt.True, }; var res = await sdk.Library.GenerateThumbsAsync(req); @@ -1037,8 +1046,8 @@ var sdk = new PlexAPI( DetectCreditsRequest req = new DetectCreditsRequest() { Ids = "", - Force = BoolInt.One, - Manual = BoolInt.One, + Force = BoolInt.True, + Manual = BoolInt.True, }; var res = await sdk.Library.DetectCreditsAsync(req); @@ -1248,7 +1257,7 @@ var sdk = new PlexAPI( StartBifGenerationRequest req = new StartBifGenerationRequest() { Ids = "", - Force = BoolInt.One, + Force = BoolInt.True, }; var res = await sdk.Library.StartBifGenerationAsync(req); @@ -1301,7 +1310,7 @@ var sdk = new PlexAPI( DetectIntrosRequest req = new DetectIntrosRequest() { Ids = "", - Force = BoolInt.One, + Force = BoolInt.True, }; var res = await sdk.Library.DetectIntrosAsync(req); @@ -1461,7 +1470,7 @@ var sdk = new PlexAPI( ListMatchesRequest req = new ListMatchesRequest() { Ids = "", - Manual = BoolInt.One, + Manual = BoolInt.True, }; var res = await sdk.Library.ListMatchesAsync(req); @@ -1670,7 +1679,7 @@ var sdk = new PlexAPI( RefreshItemsMetadataRequest req = new RefreshItemsMetadataRequest() { Ids = "", - MarkUpdated = BoolInt.One, + MarkUpdated = BoolInt.True, }; var res = await sdk.Library.RefreshItemsMetadataAsync(req); @@ -1879,8 +1888,8 @@ var sdk = new PlexAPI( AddSubtitlesRequest req = new AddSubtitlesRequest() { Ids = "", - Forced = BoolInt.One, - HearingImpaired = BoolInt.One, + Forced = BoolInt.True, + HearingImpaired = BoolInt.True, }; var res = await sdk.Library.AddSubtitlesAsync(req); @@ -2089,8 +2098,8 @@ var sdk = new PlexAPI( DetectVoiceActivityRequest req = new DetectVoiceActivityRequest() { Ids = "", - Force = BoolInt.One, - Manual = BoolInt.One, + Force = BoolInt.True, + Manual = BoolInt.True, }; var res = await sdk.Library.DetectVoiceActivityAsync(req); @@ -2143,7 +2152,7 @@ var sdk = new PlexAPI( GetAugmentationStatusRequest req = new GetAugmentationStatusRequest() { AugmentationId = "", - Wait = BoolInt.One, + Wait = BoolInt.True, }; var res = await sdk.Library.GetAugmentationStatusAsync(req); @@ -2196,7 +2205,7 @@ var sdk = new PlexAPI( SetStreamSelectionRequest req = new SetStreamSelectionRequest() { PartId = 360489, - AllParts = BoolInt.One, + AllParts = BoolInt.True, }; var res = await sdk.Library.SetStreamSelectionAsync(req); @@ -2353,7 +2362,7 @@ var sdk = new PlexAPI( DeleteLibrarySectionRequest req = new DeleteLibrarySectionRequest() { SectionId = "", - Async = BoolInt.One, + Async = BoolInt.True, }; var res = await sdk.Library.DeleteLibrarySectionAsync(req); @@ -2406,7 +2415,7 @@ var sdk = new PlexAPI( GetLibraryDetailsRequest req = new GetLibraryDetailsRequest() { SectionId = "", - IncludeDetails = BoolInt.One, + IncludeDetails = BoolInt.True, }; var res = await sdk.Library.GetLibraryDetailsAsync(req); @@ -2562,7 +2571,7 @@ var sdk = new PlexAPI( UpdateItemsRequest req = new UpdateItemsRequest() { SectionId = "", - FieldLocked = BoolInt.One, + FieldLocked = BoolInt.True, }; var res = await sdk.Library.UpdateItemsAsync(req); @@ -2668,6 +2677,11 @@ var sdk = new PlexAPI( AutocompleteRequest req = new AutocompleteRequest() { SectionId = 942007, + MediaQuery = new MediaQuery() { + Type = MediaType.Episode, + SourceType = 2, + Sort = "duration:desc,index", + }, }; var res = await sdk.Library.AutocompleteAsync(req); @@ -2720,6 +2734,11 @@ var sdk = new PlexAPI( GetCollectionsRequest req = new GetCollectionsRequest() { SectionId = 348838, + MediaQuery = new MediaQuery() { + Type = MediaType.Episode, + SourceType = 2, + Sort = "duration:desc,index", + }, }; var res = await sdk.Library.GetCollectionsAsync(req); @@ -2773,6 +2792,11 @@ var sdk = new PlexAPI( GetCommonRequest req = new GetCommonRequest() { SectionId = 298154, + MediaQuery = new MediaQuery() { + Type = MediaType.Episode, + SourceType = 2, + Sort = "duration:desc,index", + }, }; var res = await sdk.Library.GetCommonAsync(req); @@ -2929,6 +2953,11 @@ var sdk = new PlexAPI( GetFirstCharactersRequest req = new GetFirstCharactersRequest() { SectionId = 3947, + MediaQuery = new MediaQuery() { + Type = MediaType.Episode, + SourceType = 2, + Sort = "duration:desc,index", + }, }; var res = await sdk.Library.GetFirstCharactersAsync(req); @@ -3242,7 +3271,7 @@ var sdk = new PlexAPI( RefreshSectionRequest req = new RefreshSectionRequest() { SectionId = 450300, - Force = BoolInt.One, + Force = BoolInt.True, }; var res = await sdk.Library.RefreshSectionAsync(req); @@ -3722,7 +3751,7 @@ var sdk = new PlexAPI( DeleteMediaItemRequest req = new DeleteMediaItemRequest() { Ids = "", MediaItem = "", - Proxy = BoolInt.One, + Proxy = BoolInt.True, }; var res = await sdk.Library.DeleteMediaItemAsync(req); @@ -3882,6 +3911,11 @@ var sdk = new PlexAPI( GetSectionImageRequest req = new GetSectionImageRequest() { SectionId = 925611, UpdatedAt = 117413, + MediaQuery = new MediaQuery() { + Type = MediaType.Episode, + SourceType = 2, + Sort = "duration:desc,index", + }, }; var res = await sdk.Library.GetSectionImageAsync(req); @@ -3988,7 +4022,7 @@ var sdk = new PlexAPI( GetStreamRequest req = new GetStreamRequest() { StreamId = 314506, Ext = "", - AutoAdjustSubtitle = BoolInt.One, + AutoAdjustSubtitle = BoolInt.True, }; var res = await sdk.Library.GetStreamAsync(req); @@ -4153,7 +4187,7 @@ GetMediaPartRequest req = new GetMediaPartRequest() { PartId = 877105, Changestamp = 970622, Filename = "example.file", - Download = BoolInt.One, + Download = BoolInt.True, }; var res = await sdk.Library.GetMediaPartAsync(req); diff --git a/docs/sdks/libraryplaylists/README.md b/docs/sdks/libraryplaylists/README.md index 9e8d725..bef513f 100644 --- a/docs/sdks/libraryplaylists/README.md +++ b/docs/sdks/libraryplaylists/README.md @@ -101,7 +101,7 @@ var sdk = new PlexAPI( UploadPlaylistRequest req = new UploadPlaylistRequest() { Path = "/home/barkley/playlist.m3u", - Force = BoolInt.One, + Force = BoolInt.True, }; var res = await sdk.LibraryPlaylists.UploadPlaylistAsync(req); diff --git a/docs/sdks/playqueue/README.md b/docs/sdks/playqueue/README.md index edfb53c..6b45c09 100644 --- a/docs/sdks/playqueue/README.md +++ b/docs/sdks/playqueue/README.md @@ -52,11 +52,11 @@ var sdk = new PlexAPI( CreatePlayQueueRequest req = new CreatePlayQueueRequest() { Type = LukeHagar.PlexAPI.SDK.Models.Requests.Type.Audio, - Shuffle = BoolInt.One, - Repeat = BoolInt.One, - Continuous = BoolInt.One, - Recursive = BoolInt.One, - OnDeck = BoolInt.One, + Shuffle = BoolInt.True, + Repeat = BoolInt.True, + Continuous = BoolInt.True, + Recursive = BoolInt.True, + OnDeck = BoolInt.True, }; var res = await sdk.PlayQueue.CreatePlayQueueAsync(req); @@ -109,9 +109,9 @@ var sdk = new PlexAPI( GetPlayQueueRequest req = new GetPlayQueueRequest() { PlayQueueId = 210646, - Own = BoolInt.One, - IncludeBefore = BoolInt.One, - IncludeAfter = BoolInt.One, + Own = BoolInt.True, + IncludeBefore = BoolInt.True, + IncludeAfter = BoolInt.True, }; var res = await sdk.PlayQueue.GetPlayQueueAsync(req); @@ -164,7 +164,7 @@ var sdk = new PlexAPI( AddToPlayQueueRequest req = new AddToPlayQueueRequest() { PlayQueueId = 919248, - Next = BoolInt.One, + Next = BoolInt.True, }; var res = await sdk.PlayQueue.AddToPlayQueueAsync(req); diff --git a/docs/sdks/plex/README.md b/docs/sdks/plex/README.md new file mode 100644 index 0000000..e86fcb6 --- /dev/null +++ b/docs/sdks/plex/README.md @@ -0,0 +1,55 @@ +# Plex +(*Plex*) + +## Overview + +### Available Operations + +* [GetServerResources](#getserverresources) - Get Server Resources + +## GetServerResources + +Get Plex server access tokens and server connections + +### Example Usage + + +```csharp +using LukeHagar.PlexAPI.SDK; +using LukeHagar.PlexAPI.SDK.Models.Components; +using LukeHagar.PlexAPI.SDK.Models.Requests; + +var sdk = new PlexAPI( + accepts: LukeHagar.PlexAPI.SDK.Models.Components.Accepts.ApplicationXml, + clientIdentifier: "3381b62b-9ab7-4e37-827b-203e9809eb58", + token: "" +); + +GetServerResourcesRequest req = new GetServerResourcesRequest() { + IncludeHttps = IncludeHttps.True, + IncludeRelay = IncludeRelay.True, + IncludeIPv6 = IncludeIPv6.True, +}; + +var res = await sdk.Plex.GetServerResourcesAsync(req); + +// handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | +| `request` | [GetServerResourcesRequest](../../Models/Requests/GetServerResourcesRequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `serverURL` | *string* | :heavy_minus_sign: | An optional server URL to use. | + +### Response + +**[GetServerResourcesResponse](../../Models/Requests/GetServerResourcesResponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| LukeHagar.PlexAPI.SDK.Models.Errors.GetServerResourcesUnauthorized | 401 | application/json | +| LukeHagar.PlexAPI.SDK.Models.Errors.SDKException | 4XX, 5XX | \*/\* | \ No newline at end of file diff --git a/docs/sdks/search/README.md b/docs/sdks/search/README.md index 9f2572f..201cb96 100644 --- a/docs/sdks/search/README.md +++ b/docs/sdks/search/README.md @@ -111,6 +111,7 @@ var sdk = new PlexAPI( VoiceSearchHubsRequest req = new VoiceSearchHubsRequest() { Query = "", + Type = MediaType.TvShow, }; var res = await sdk.Search.VoiceSearchHubsAsync(req); diff --git a/docs/sdks/subscriptions/README.md b/docs/sdks/subscriptions/README.md index e05b7bd..6afb0b9 100644 --- a/docs/sdks/subscriptions/README.md +++ b/docs/sdks/subscriptions/README.md @@ -47,8 +47,8 @@ var sdk = new PlexAPI( ); GetAllSubscriptionsRequest req = new GetAllSubscriptionsRequest() { - IncludeGrabs = BoolInt.One, - IncludeStorage = BoolInt.One, + IncludeGrabs = BoolInt.True, + IncludeStorage = BoolInt.True, }; var res = await sdk.Subscriptions.GetAllSubscriptionsAsync(req); @@ -371,8 +371,8 @@ var sdk = new PlexAPI( GetSubscriptionRequest req = new GetSubscriptionRequest() { SubscriptionId = 186713, - IncludeGrabs = BoolInt.One, - IncludeStorage = BoolInt.One, + IncludeGrabs = BoolInt.True, + IncludeStorage = BoolInt.True, }; var res = await sdk.Subscriptions.GetSubscriptionAsync(req); diff --git a/docs/sdks/timeline/README.md b/docs/sdks/timeline/README.md index 4d0a732..4aa1f1a 100644 --- a/docs/sdks/timeline/README.md +++ b/docs/sdks/timeline/README.md @@ -100,9 +100,9 @@ ReportRequest req = new ReportRequest() { PlayQueueItemID = "123", Time = 0, Duration = 10000, - Continuing = BoolInt.One, + Continuing = BoolInt.True, Updated = 14200000, - Offline = BoolInt.One, + Offline = BoolInt.True, TimeToFirstFrame = 1000, TimeStalled = 1000, Bandwidth = 100, diff --git a/docs/sdks/transcoder/README.md b/docs/sdks/transcoder/README.md index f91fc7f..08cb366 100644 --- a/docs/sdks/transcoder/README.md +++ b/docs/sdks/transcoder/README.md @@ -43,9 +43,9 @@ var sdk = new PlexAPI( TranscodeImageRequest req = new TranscodeImageRequest() { Url = "/library/metadata/265/thumb/1715112705", Background = "#ff5522", - Upscale = BoolInt.One, - MinSize = BoolInt.One, - Rotate = BoolInt.One, + Upscale = BoolInt.True, + MinSize = BoolInt.True, + Rotate = BoolInt.True, BlendColor = "#ff5522", }; @@ -102,13 +102,13 @@ MakeDecisionRequest req = new MakeDecisionRequest() { AdvancedSubtitles = LukeHagar.PlexAPI.SDK.Models.Components.AdvancedSubtitles.Burn, AudioBoost = 50, AudioChannelCount = 5, - AutoAdjustQuality = BoolInt.One, - AutoAdjustSubtitle = BoolInt.One, - DirectPlay = BoolInt.One, - DirectStream = BoolInt.One, - DirectStreamAudio = BoolInt.One, - DisableResolutionRotation = BoolInt.One, - HasMDE = BoolInt.One, + AutoAdjustQuality = BoolInt.True, + AutoAdjustSubtitle = BoolInt.True, + DirectPlay = BoolInt.True, + DirectStream = BoolInt.True, + DirectStreamAudio = BoolInt.True, + DisableResolutionRotation = BoolInt.True, + HasMDE = BoolInt.True, Location = LukeHagar.PlexAPI.SDK.Models.Requests.Location.Wan, MediaBufferSize = 102400, MediaIndex = 0, @@ -233,13 +233,13 @@ TranscodeSubtitlesRequest req = new TranscodeSubtitlesRequest() { AdvancedSubtitles = LukeHagar.PlexAPI.SDK.Models.Components.AdvancedSubtitles.Burn, AudioBoost = 50, AudioChannelCount = 5, - AutoAdjustQuality = BoolInt.One, - AutoAdjustSubtitle = BoolInt.One, - DirectPlay = BoolInt.One, - DirectStream = BoolInt.One, - DirectStreamAudio = BoolInt.One, - DisableResolutionRotation = BoolInt.One, - HasMDE = BoolInt.One, + AutoAdjustQuality = BoolInt.True, + AutoAdjustSubtitle = BoolInt.True, + DirectPlay = BoolInt.True, + DirectStream = BoolInt.True, + DirectStreamAudio = BoolInt.True, + DisableResolutionRotation = BoolInt.True, + HasMDE = BoolInt.True, Location = QueryParamLocation.Wan, MediaBufferSize = 102400, MediaIndex = 0, @@ -313,13 +313,13 @@ StartTranscodeSessionRequest req = new StartTranscodeSessionRequest() { AdvancedSubtitles = LukeHagar.PlexAPI.SDK.Models.Components.AdvancedSubtitles.Burn, AudioBoost = 50, AudioChannelCount = 5, - AutoAdjustQuality = BoolInt.One, - AutoAdjustSubtitle = BoolInt.One, - DirectPlay = BoolInt.One, - DirectStream = BoolInt.One, - DirectStreamAudio = BoolInt.One, - DisableResolutionRotation = BoolInt.One, - HasMDE = BoolInt.One, + AutoAdjustQuality = BoolInt.True, + AutoAdjustSubtitle = BoolInt.True, + DirectPlay = BoolInt.True, + DirectStream = BoolInt.True, + DirectStreamAudio = BoolInt.True, + DisableResolutionRotation = BoolInt.True, + HasMDE = BoolInt.True, Location = StartTranscodeSessionQueryParamLocation.Wan, MediaBufferSize = 102400, MediaIndex = 0, diff --git a/docs/sdks/ultrablur/README.md b/docs/sdks/ultrablur/README.md index 19486b8..32345c7 100644 --- a/docs/sdks/ultrablur/README.md +++ b/docs/sdks/ultrablur/README.md @@ -96,7 +96,7 @@ GetImageRequest req = new GetImageRequest() { BottomLeft = "1c425d", Width = 1920, Height = 1080, - Noise = BoolInt.One, + Noise = BoolInt.True, }; var res = await sdk.UltraBlur.GetImageAsync(req); diff --git a/docs/sdks/updater/README.md b/docs/sdks/updater/README.md index 3da2be7..83134d3 100644 --- a/docs/sdks/updater/README.md +++ b/docs/sdks/updater/README.md @@ -41,8 +41,8 @@ var sdk = new PlexAPI( ); ApplyUpdatesRequest req = new ApplyUpdatesRequest() { - Tonight = BoolInt.One, - Skip = BoolInt.One, + Tonight = BoolInt.True, + Skip = BoolInt.True, }; var res = await sdk.Updater.ApplyUpdatesAsync(req); @@ -94,7 +94,7 @@ var sdk = new PlexAPI( ); CheckUpdatesRequest req = new CheckUpdatesRequest() { - Download = BoolInt.One, + Download = BoolInt.True, }; var res = await sdk.Updater.CheckUpdatesAsync(req); diff --git a/docs/sdks/users/README.md b/docs/sdks/users/README.md new file mode 100644 index 0000000..faf9620 --- /dev/null +++ b/docs/sdks/users/README.md @@ -0,0 +1,61 @@ +# Users +(*Users*) + +## Overview + +### Available Operations + +* [GetUsers](#getusers) - Get list of all connected users + +## GetUsers + +Get list of all users that are friends and have library access with the provided Plex authentication token + +### Example Usage + + +```csharp +using LukeHagar.PlexAPI.SDK; +using LukeHagar.PlexAPI.SDK.Models.Components; +using LukeHagar.PlexAPI.SDK.Models.Requests; + +var sdk = new PlexAPI( + accepts: LukeHagar.PlexAPI.SDK.Models.Components.Accepts.ApplicationXml, + clientIdentifier: "3381b62b-9ab7-4e37-827b-203e9809eb58", + product: "Plex for Roku", + version: "2.4.1", + platform: "Roku", + platformVersion: "4.3 build 1057", + device: "Roku 3", + model: "4200X", + deviceVendor: "Roku", + deviceName: "Chrome", + marketplace: "googlePlay", + token: "" +); + +GetUsersRequest req = new GetUsersRequest() {}; + +var res = await sdk.Users.GetUsersAsync(req); + +// handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | +| `request` | [GetUsersRequest](../../Models/Requests/GetUsersRequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `serverURL` | *string* | :heavy_minus_sign: | An optional server URL to use. | + +### Response + +**[GetUsersResponse](../../Models/Requests/GetUsersResponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | +| LukeHagar.PlexAPI.SDK.Models.Errors.GetUsersBadRequest | 400 | application/json | +| LukeHagar.PlexAPI.SDK.Models.Errors.GetUsersUnauthorized | 401 | application/json | +| LukeHagar.PlexAPI.SDK.Models.Errors.SDKException | 4XX, 5XX | \*/\* | \ No newline at end of file