diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index ccdfbb4..2f1136e 100755 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,16 +1,16 @@ lockVersion: 2.0.0 id: 5d77204e-e413-4fd0-a14a-bad3aee2247a management: - docChecksum: f387ae03f10decba230886eaab322b20 + docChecksum: f12b653820ae77ca3b2820bc9459d866 docVersion: 0.0.3 - speakeasyVersion: 1.404.5 - generationVersion: 2.426.2 - releaseVersion: 0.8.4 - configChecksum: 533affc20b65c15402ffd92dfcb69f3b + speakeasyVersion: 1.405.6 + generationVersion: 2.428.1 + releaseVersion: 0.8.5 + configChecksum: 0397a0c86e22912a57dc87924c64e768 repoURL: https://github.com/LukeHagar/plexswift.git features: swift: - core: 3.2.16 + core: 3.2.17 deprecations: 2.81.2 enums: 2.81.1 globalSecurity: 2.81.6 @@ -975,21 +975,14 @@ examples: playlistID: "8502.01" query: playQueueID: 123 - uri: server://12345/com.plexapp.plugins.library/library/metadata/1 + uri: "server://12345/com.plexapp.plugins.library/library/metadata/1" responses: "200": - application/json: - MediaContainer: - Metadata: [] - leafCountAdded: 1 - leafCountRequested: 1 - size: 1 + application/json: {"MediaContainer": {"size": 1, "leafCountAdded": 1, "leafCountRequested": 1, "Metadata": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} applyUpdates: "": parameters: @@ -998,23 +991,19 @@ examples: tonight: 1 responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} cancelServerActivities: "": parameters: path: - activityUUID: 25b71ed5-0f9d-461c-baa7-d404e9e10d3e + activityUUID: "25b71ed5-0f9d-461c-baa7-d404e9e10d3e" responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} checkForUpdates: "": parameters: @@ -1022,11 +1011,9 @@ examples: download: 1 responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} clearPlaylistContents: speakeasy-default-clear-playlist-contents: parameters: @@ -1034,31 +1021,24 @@ examples: playlistID: "1893.18" responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} createPlaylist: speakeasy-default-create-playlist: parameters: query: smart: 1 - title: - type: photo - uri: https://inborn-brochure.biz + title: "" + type: "photo" + uri: "https://inborn-brochure.biz" responses: "200": - application/json: - MediaContainer: - Metadata: [] - size: 7 + application/json: {"MediaContainer": {"size": 7, "Metadata": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} deleteLibrary: speakeasy-default-delete-library: parameters: @@ -1066,11 +1046,9 @@ examples: sectionKey: 9518 responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} deletePlaylist: speakeasy-default-delete-playlist: parameters: @@ -1078,43 +1056,32 @@ examples: playlistID: "216.22" responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} enablePaperTrail: speakeasy-default-enable-paper-trail: responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} get-all-libraries: speakeasy-default-get-all-libraries: responses: "200": - application/json: - MediaContainer: - Directory: [] - allowSync: false - size: 5 - title1: Plex Library + application/json: {"MediaContainer": {"size": 5, "allowSync": false, "title1": "Plex Library", "Directory": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} get-banner-image: speakeasy-default-get-banner-image: parameters: path: ratingKey: 9518 query: - X-Plex-Token: CV5xoxjTpFKUzBTShsaf + X-Plex-Token: "CV5xoxjTpFKUzBTShsaf" height: 396 minSize: 1 upscale: 1 @@ -1123,11 +1090,9 @@ examples: "200": image/jpeg: "0xE5A1092305" "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} get-library-details: speakeasy-default-get-library-details: parameters: @@ -1136,29 +1101,11 @@ examples: query: {} responses: "200": - application/json: - MediaContainer: - Directory: [] - FieldType: [] - Type: [] - allowSync: false - art: /:/resources/movie-fanart.jpg - content: secondary - identifier: com.plexapp.plugins.library - librarySectionID: 1 - mediaTagPrefix: /system/bundle/media/flags/ - mediaTagVersion: 1701731894 - size: 29 - thumb: /:/resources/movie.png - title1: Movies - viewGroup: secondary - viewMode: 65592 + application/json: {"MediaContainer": {"size": 29, "allowSync": false, "art": "/:/resources/movie-fanart.jpg", "content": "secondary", "identifier": "com.plexapp.plugins.library", "librarySectionID": 1, "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1701731894, "thumb": "/:/resources/movie.png", "title1": "Movies", "viewGroup": "secondary", "viewMode": 65592, "Directory": [], "Type": [], "FieldType": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} get-library-items: "": parameters: @@ -1200,7 +1147,7 @@ examples: parameters: path: sectionKey: 9518 - tag: edition + tag: "edition" query: X-Plex-Container-Size: 50 X-Plex-Container-Start: 0 @@ -1209,743 +1156,23 @@ examples: type: 2 responses: "200": - application/json: - MediaContainer: - FieldType: - - Operator: - - key: = - title: is - - key: = - title: is - - key: = - title: is - type: tag - - Operator: - - key: = - title: is - - key: = - title: is - type: tag - - Operator: - - key: = - title: is - - key: = - title: is - type: tag - Meta: - FieldType: - - Operator: - - key: = - title: is - type: tag - - Operator: - - key: = - title: is - - key: = - title: is - type: tag - - Operator: - - key: = - title: is - - key: = - title: is - type: tag - Type: - - Field: - - key: show.title - subType: rating - title: Show Title - type: string - - key: show.title - subType: rating - title: Show Title - type: string - Filter: [] - Sort: [] - active: false - key: /library/sections/2/all?type=2 - title: TV Shows - type: show - - Field: - - key: show.title - subType: rating - title: Show Title - type: string - - key: show.title - subType: rating - title: Show Title - type: string - - key: show.title - subType: rating - title: Show Title - type: string - Filter: - - filter: genre - filterType: string - key: /library/sections/2/genre?type=2 - title: Genre - type: filter - - filter: genre - filterType: string - key: /library/sections/2/genre?type=2 - title: Genre - type: filter - - filter: genre - filterType: string - key: /library/sections/2/genre?type=2 - title: Genre - type: filter - Sort: [] - active: false - key: /library/sections/2/all?type=2 - title: TV Shows - type: show - Metadata: - - Collection: - - tag: Working NL Subs - Country: - - tag: United States of America - - tag: United States of America - Director: - - tag: James Cameron - - tag: James Cameron - Genre: - - tag: Adventure - - tag: Adventure - - tag: Adventure - Guid: - - id: imdb://tt13015952 - Image: - - alt: Episode 1 - type: background - url: /library/metadata/45521/thumb/1644710589 - - alt: Episode 1 - type: background - url: /library/metadata/45521/thumb/1644710589 - Media: - - Part: - - Stream: - - audioChannelLayout: stereo - bitDepth: 8 - bitrate: 6273 - canAutoSync: false - channels: 2 - chromaLocation: left - chromaSubsampling: "4:2:0" - closedCaptions: false - codec: h264 - codedHeight: 1088 - codedWidth: 1920 - colorPrimaries: bt709 - colorRange: tv - colorSpace: bt709 - colorTrc: bt709 - default: true - displayTitle: 1080p (H.264) - embeddedInVideo: "1" - extendedDisplayTitle: 1080p (H.264) - frameRate: 29.97 - hasScalingMatrix: false - hearingImpaired: false - height: 1080 - id: 272796 - index: 0 - language: English - languageCode: eng - languageTag: en - level: 40 - profile: main - refFrames: 4 - samplingRate: 48000 - scanType: progressive - selected: true - streamIdentifier: "2" - streamType: 1 - title: English - width: 1920 - audioProfile: dts - container: mkv - duration: 11558112 - file: /movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv - has64bitOffsets: false - hasThumbnail: "1" - id: 119542 - indexes: sd - key: /library/parts/119542/1680457526/file.mkv - optimizedForStreaming: false - size: 36158371307 - videoProfile: main 10 - - Stream: - - audioChannelLayout: stereo - bitDepth: 8 - bitrate: 6273 - canAutoSync: false - channels: 2 - chromaLocation: left - chromaSubsampling: "4:2:0" - closedCaptions: false - codec: h264 - codedHeight: 1088 - codedWidth: 1920 - colorPrimaries: bt709 - colorRange: tv - colorSpace: bt709 - colorTrc: bt709 - default: true - displayTitle: 1080p (H.264) - embeddedInVideo: "1" - extendedDisplayTitle: 1080p (H.264) - frameRate: 29.97 - hasScalingMatrix: false - hearingImpaired: false - height: 1080 - id: 272796 - index: 0 - language: English - languageCode: eng - languageTag: en - level: 40 - profile: main - refFrames: 4 - samplingRate: 48000 - scanType: progressive - selected: true - streamIdentifier: "2" - streamType: 1 - title: English - width: 1920 - - audioChannelLayout: stereo - bitDepth: 8 - bitrate: 6273 - canAutoSync: false - channels: 2 - chromaLocation: left - chromaSubsampling: "4:2:0" - closedCaptions: false - codec: h264 - codedHeight: 1088 - codedWidth: 1920 - colorPrimaries: bt709 - colorRange: tv - colorSpace: bt709 - colorTrc: bt709 - default: true - displayTitle: 1080p (H.264) - embeddedInVideo: "1" - extendedDisplayTitle: 1080p (H.264) - frameRate: 29.97 - hasScalingMatrix: false - hearingImpaired: false - height: 1080 - id: 272796 - index: 0 - language: English - languageCode: eng - languageTag: en - level: 40 - profile: main - refFrames: 4 - samplingRate: 48000 - scanType: progressive - selected: true - streamIdentifier: "2" - streamType: 1 - title: English - width: 1920 - - audioChannelLayout: stereo - bitDepth: 8 - bitrate: 6273 - canAutoSync: false - channels: 2 - chromaLocation: left - chromaSubsampling: "4:2:0" - closedCaptions: false - codec: h264 - codedHeight: 1088 - codedWidth: 1920 - colorPrimaries: bt709 - colorRange: tv - colorSpace: bt709 - colorTrc: bt709 - default: true - displayTitle: 1080p (H.264) - embeddedInVideo: "1" - extendedDisplayTitle: 1080p (H.264) - frameRate: 29.97 - hasScalingMatrix: false - hearingImpaired: false - height: 1080 - id: 272796 - index: 0 - language: English - languageCode: eng - languageTag: en - level: 40 - profile: main - refFrames: 4 - samplingRate: 48000 - scanType: progressive - selected: true - streamIdentifier: "2" - streamType: 1 - title: English - width: 1920 - audioProfile: dts - container: mkv - duration: 11558112 - file: /movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv - has64bitOffsets: false - hasThumbnail: "1" - id: 119542 - indexes: sd - key: /library/parts/119542/1680457526/file.mkv - optimizedForStreaming: false - size: 36158371307 - videoProfile: main 10 - - Stream: - - audioChannelLayout: stereo - bitDepth: 8 - bitrate: 6273 - canAutoSync: false - channels: 2 - chromaLocation: left - chromaSubsampling: "4:2:0" - closedCaptions: false - codec: h264 - codedHeight: 1088 - codedWidth: 1920 - colorPrimaries: bt709 - colorRange: tv - colorSpace: bt709 - colorTrc: bt709 - default: true - displayTitle: 1080p (H.264) - embeddedInVideo: "1" - extendedDisplayTitle: 1080p (H.264) - frameRate: 29.97 - hasScalingMatrix: false - hearingImpaired: false - height: 1080 - id: 272796 - index: 0 - language: English - languageCode: eng - languageTag: en - level: 40 - profile: main - refFrames: 4 - samplingRate: 48000 - scanType: progressive - selected: true - streamIdentifier: "2" - streamType: 1 - title: English - width: 1920 - audioProfile: dts - container: mkv - duration: 11558112 - file: /movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv - has64bitOffsets: false - hasThumbnail: "1" - id: 119542 - indexes: sd - key: /library/parts/119542/1680457526/file.mkv - optimizedForStreaming: false - size: 36158371307 - videoProfile: main 10 - aspectRatio: 1.85 - audioChannels: 6 - audioCodec: eac3 - audioProfile: dts - bitrate: 25025 - container: mkv - duration: 11558112 - has64bitOffsets: false - hasVoiceActivity: false - height: 2072 - id: 119534 - optimizedForStreaming: 1 - videoCodec: hevc - videoFrameRate: 24p - videoProfile: main 10 - videoResolution: 4k - width: 3840 - Rating: - - image: themoviedb://image.rating - type: audience - value: 3 - Role: - - filter: actor=294129 - id: 294129 - role: Self - tag: Mike Smith - tagKey: 668e7e7b22bcad9064350c91 - thumb: https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg - - filter: actor=294129 - id: 294129 - role: Self - tag: Mike Smith - tagKey: 668e7e7b22bcad9064350c91 - thumb: https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg - - filter: actor=294129 - id: 294129 - role: Self - tag: Mike Smith - tagKey: 668e7e7b22bcad9064350c91 - thumb: https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg - UltraBlurColors: - bottomLeft: 1f5066 - bottomRight: "73958" - topLeft: 11333b - topRight: 0a232d - Writer: - - tag: James Cameron - addedAt: 1556281940 - art: /library/metadata/58683/art/1703239236 - audienceRating: 9.2 - audienceRatingImage: rottentomatoes://image.rating.upright - banner: /library/metadata/58683/banner/1703239236 - chapterSource: media - childCount: 1 - contentRating: PG-13 - duration: 11558112 - flattenSeasons: "1" - grandparentArt: /library/metadata/66/art/1705716261 - grandparentGuid: plex://show/5d9c081b170e24001f2a7be4 - grandparentKey: /library/metadata/66 - grandparentRatingKey: "66" - grandparentSlug: alice-in-borderland-2020 - grandparentTheme: /library/metadata/66/theme/1705716261 - grandparentThumb: /library/metadata/66/thumb/1705716261 - grandparentTitle: Caprica - guid: plex://movie/5d7768ba96b655001fdc0408 - hasPremiumExtras: "1" - hasPremiumPrimaryExtra: "1" - index: 1 - key: /library/metadata/58683 - lastViewedAt: 1682752242 - leafCount: 14 - librarySectionID: 1 - librarySectionKey: /library/sections/1 - librarySectionTitle: Movies - originalTitle: 映画 ブラッククローバー 魔法帝の剣 - originallyAvailableAt: "2022-12-14T00:00:00Z" - parentGuid: plex://show/5d9c081b170e24001f2a7be4 - parentIndex: 1 - parentKey: /library/metadata/66 - parentRatingKey: "66" - parentSlug: alice-in-borderland-2020 - parentStudio: UCP - parentTheme: /library/metadata/66/theme/1705716261 - parentThumb: /library/metadata/66/thumb/1705716261 - parentTitle: Caprica - parentYear: 2010 - primaryExtraKey: /library/metadata/58684 - rating: 7.6 - ratingImage: rottentomatoes://image.rating.ripe - ratingKey: "58683" - seasonCount: 2022 - showOrdering: dvd - skipChildren: false - skipCount: 1 - slug: 4-for-texas - studio: 20th Century Studios - summary: Jake Sully lives with his newfound family formed on the extrasolar moon Pandora. Once a familiar threat returns to finish what was previously started, Jake must work with Neytiri and the army of the Na'vi race to protect their home. - tagline: Return to Pandora. - theme: /library/metadata/1/theme/1705636920 - thumb: /library/metadata/58683/thumb/1703239236 - title: 'Avatar: The Way of Water' - titleSort: Whale - type: movie - updatedAt: 1556281940 - viewCount: 1 - viewOffset: 5222500 - viewedLeafCount: 0 - year: 2022 - - Collection: - - tag: Working NL Subs - - tag: Working NL Subs - Country: - - tag: United States of America - Director: - - tag: James Cameron - - tag: James Cameron - - tag: James Cameron - Genre: [] - Guid: - - id: imdb://tt13015952 - Image: - - alt: Episode 1 - type: background - url: /library/metadata/45521/thumb/1644710589 - Media: - - Part: - - Stream: - - audioChannelLayout: stereo - bitDepth: 8 - bitrate: 6273 - canAutoSync: false - channels: 2 - chromaLocation: left - chromaSubsampling: "4:2:0" - closedCaptions: false - codec: h264 - codedHeight: 1088 - codedWidth: 1920 - colorPrimaries: bt709 - colorRange: tv - colorSpace: bt709 - colorTrc: bt709 - default: true - displayTitle: 1080p (H.264) - embeddedInVideo: "1" - extendedDisplayTitle: 1080p (H.264) - frameRate: 29.97 - hasScalingMatrix: false - hearingImpaired: false - height: 1080 - id: 272796 - index: 0 - language: English - languageCode: eng - languageTag: en - level: 40 - profile: main - refFrames: 4 - samplingRate: 48000 - scanType: progressive - selected: true - streamIdentifier: "2" - streamType: 1 - title: English - width: 1920 - audioProfile: dts - container: mkv - duration: 11558112 - file: /movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv - has64bitOffsets: false - hasThumbnail: "1" - id: 119542 - indexes: sd - key: /library/parts/119542/1680457526/file.mkv - optimizedForStreaming: false - size: 36158371307 - videoProfile: main 10 - aspectRatio: 1.85 - audioChannels: 6 - audioCodec: eac3 - audioProfile: dts - bitrate: 25025 - container: mkv - duration: 11558112 - has64bitOffsets: false - hasVoiceActivity: false - height: 2072 - id: 119534 - optimizedForStreaming: 1 - videoCodec: hevc - videoFrameRate: 24p - videoProfile: main 10 - videoResolution: 4k - width: 3840 - Rating: [] - Role: - - filter: actor=294129 - id: 294129 - role: Self - tag: Mike Smith - tagKey: 668e7e7b22bcad9064350c91 - thumb: https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg - - filter: actor=294129 - id: 294129 - role: Self - tag: Mike Smith - tagKey: 668e7e7b22bcad9064350c91 - thumb: https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg - - filter: actor=294129 - id: 294129 - role: Self - tag: Mike Smith - tagKey: 668e7e7b22bcad9064350c91 - thumb: https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg - UltraBlurColors: - bottomLeft: 1f5066 - bottomRight: "73958" - topLeft: 11333b - topRight: 0a232d - Writer: - - tag: James Cameron - addedAt: 1556281940 - art: /library/metadata/58683/art/1703239236 - audienceRating: 9.2 - audienceRatingImage: rottentomatoes://image.rating.upright - banner: /library/metadata/58683/banner/1703239236 - chapterSource: media - childCount: 1 - contentRating: PG-13 - duration: 11558112 - flattenSeasons: "1" - grandparentArt: /library/metadata/66/art/1705716261 - grandparentGuid: plex://show/5d9c081b170e24001f2a7be4 - grandparentKey: /library/metadata/66 - grandparentRatingKey: "66" - grandparentSlug: alice-in-borderland-2020 - grandparentTheme: /library/metadata/66/theme/1705716261 - grandparentThumb: /library/metadata/66/thumb/1705716261 - grandparentTitle: Caprica - guid: plex://movie/5d7768ba96b655001fdc0408 - hasPremiumExtras: "1" - hasPremiumPrimaryExtra: "1" - index: 1 - key: /library/metadata/58683 - lastViewedAt: 1682752242 - leafCount: 14 - librarySectionID: 1 - librarySectionKey: /library/sections/1 - librarySectionTitle: Movies - originalTitle: 映画 ブラッククローバー 魔法帝の剣 - originallyAvailableAt: "2022-12-14T00:00:00Z" - parentGuid: plex://show/5d9c081b170e24001f2a7be4 - parentIndex: 1 - parentKey: /library/metadata/66 - parentRatingKey: "66" - parentSlug: alice-in-borderland-2020 - parentStudio: UCP - parentTheme: /library/metadata/66/theme/1705716261 - parentThumb: /library/metadata/66/thumb/1705716261 - parentTitle: Caprica - parentYear: 2010 - primaryExtraKey: /library/metadata/58684 - rating: 7.6 - ratingImage: rottentomatoes://image.rating.ripe - ratingKey: "58683" - seasonCount: 2022 - showOrdering: dvd - skipChildren: false - skipCount: 1 - slug: 4-for-texas - studio: 20th Century Studios - summary: Jake Sully lives with his newfound family formed on the extrasolar moon Pandora. Once a familiar threat returns to finish what was previously started, Jake must work with Neytiri and the army of the Na'vi race to protect their home. - tagline: Return to Pandora. - theme: /library/metadata/1/theme/1705636920 - thumb: /library/metadata/58683/thumb/1703239236 - title: 'Avatar: The Way of Water' - titleSort: Whale - type: movie - updatedAt: 1556281940 - viewCount: 1 - viewOffset: 5222500 - viewedLeafCount: 0 - year: 2022 - Type: - - Field: - - key: show.title - subType: rating - title: Show Title - type: string - Filter: - - filter: genre - filterType: string - key: /library/sections/2/genre?type=2 - title: Genre - type: filter - - filter: genre - filterType: string - key: /library/sections/2/genre?type=2 - title: Genre - type: filter - Sort: - - active: false - activeDirection: asc - default: asc - defaultDirection: asc - descKey: titleSort:desc - firstCharacterKey: /library/sections/2/firstCharacter - key: titleSort - title: Title - - active: false - activeDirection: asc - default: asc - defaultDirection: asc - descKey: titleSort:desc - firstCharacterKey: /library/sections/2/firstCharacter - key: titleSort - title: Title - active: false - key: /library/sections/2/all?type=2 - title: TV Shows - type: show - allowSync: true - art: /:/resources/movie-fanart.jpg - content: secondary - identifier: com.plexapp.plugins.library - librarySectionID: 1 - librarySectionTitle: Movies - librarySectionUUID: 322a231a-b7f7-49f5-920f-14c61199cd30 - mediaTagPrefix: /system/bundle/media/flags/ - mediaTagVersion: 1701731894 - mixedParents: true - nocache: true - offset: 0 - size: 70 - thumb: /:/resources/movie.png - title1: Movies - title2: Recently Released - totalSize: 170 - viewGroup: movie - viewMode: 65592 + application/json: {"MediaContainer": {"Type": [{"key": "/library/sections/2/all?type=2", "type": "show", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}], "FieldType": [{"type": "tag", "Operator": [{"key": "=", "title": "is"}, {"key": "=", "title": "is"}, {"key": "=", "title": "is"}]}, {"type": "tag", "Operator": [{"key": "=", "title": "is"}, {"key": "=", "title": "is"}]}, {"type": "tag", "Operator": [{"key": "=", "title": "is"}, {"key": "=", "title": "is"}]}], "size": 70, "totalSize": 170, "offset": 0, "content": "secondary", "allowSync": true, "nocache": true, "art": "/:/resources/movie-fanart.jpg", "identifier": "com.plexapp.plugins.library", "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionUUID": "322a231a-b7f7-49f5-920f-14c61199cd30", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1701731894, "thumb": "/:/resources/movie.png", "title1": "Movies", "title2": "Recently Released", "viewGroup": "movie", "viewMode": 65592, "mixedParents": true, "Metadata": [{"ratingKey": "58683", "key": "/library/metadata/58683", "guid": "plex://movie/5d7768ba96b655001fdc0408", "studio": "20th Century Studios", "skipChildren": false, "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionKey": "/library/sections/1", "type": "movie", "title": "Avatar: The Way of Water", "slug": "4-for-texas", "contentRating": "PG-13", "summary": "Jake Sully lives with his newfound family formed on the extrasolar moon Pandora. Once a familiar threat returns to finish what was previously started, Jake must work with Neytiri and the army of the Na'vi race to protect their home.", "rating": 7.6, "audienceRating": 9.2, "year": 2022, "seasonCount": 2022, "tagline": "Return to Pandora.", "flattenSeasons": "1", "showOrdering": "dvd", "thumb": "/library/metadata/58683/thumb/1703239236", "art": "/library/metadata/58683/art/1703239236", "banner": "/library/metadata/58683/banner/1703239236", "duration": 11558112, "originallyAvailableAt": "2022-12-14T00:00:00Z", "addedAt": 1556281940, "updatedAt": 1556281940, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/58684", "ratingImage": "rottentomatoes://image.rating.ripe", "grandparentRatingKey": "66", "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentKey": "/library/metadata/66", "grandparentTitle": "Caprica", "grandparentThumb": "/library/metadata/66/thumb/1705716261", "parentSlug": "alice-in-borderland-2020", "grandparentSlug": "alice-in-borderland-2020", "grandparentArt": "/library/metadata/66/art/1705716261", "grandparentTheme": "/library/metadata/66/theme/1705716261", "Media": [{"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 1, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}, {"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}, {"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}], "Genre": [{"tag": "Adventure"}, {"tag": "Adventure"}, {"tag": "Adventure"}], "Country": [{"tag": "United States of America"}, {"tag": "United States of America"}], "Director": [{"tag": "James Cameron"}, {"tag": "James Cameron"}], "Writer": [{"tag": "James Cameron"}], "Collection": [{"tag": "Working NL Subs"}], "Role": [{"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}, {"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}, {"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}], "Guid": [{"id": "imdb://tt13015952"}], "UltraBlurColors": {"topLeft": "11333b", "topRight": "0a232d", "bottomRight": "73958", "bottomLeft": "1f5066"}, "Rating": [{"image": "themoviedb://image.rating", "value": 3, "type": "audience"}], "Image": [{"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}, {"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}], "titleSort": "Whale", "viewCount": 1, "lastViewedAt": 1682752242, "originalTitle": "映画 ブラッククローバー 魔法帝の剣", "viewOffset": 5222500, "skipCount": 1, "index": 1, "theme": "/library/metadata/1/theme/1705636920", "leafCount": 14, "viewedLeafCount": 0, "childCount": 1, "hasPremiumExtras": "1", "hasPremiumPrimaryExtra": "1", "parentRatingKey": "66", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "parentStudio": "UCP", "parentKey": "/library/metadata/66", "parentTitle": "Caprica", "parentIndex": 1, "parentYear": 2010, "parentThumb": "/library/metadata/66/thumb/1705716261", "parentTheme": "/library/metadata/66/theme/1705716261"}, {"ratingKey": "58683", "key": "/library/metadata/58683", "guid": "plex://movie/5d7768ba96b655001fdc0408", "studio": "20th Century Studios", "skipChildren": false, "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionKey": "/library/sections/1", "type": "movie", "title": "Avatar: The Way of Water", "slug": "4-for-texas", "contentRating": "PG-13", "summary": "Jake Sully lives with his newfound family formed on the extrasolar moon Pandora. Once a familiar threat returns to finish what was previously started, Jake must work with Neytiri and the army of the Na'vi race to protect their home.", "rating": 7.6, "audienceRating": 9.2, "year": 2022, "seasonCount": 2022, "tagline": "Return to Pandora.", "flattenSeasons": "1", "showOrdering": "dvd", "thumb": "/library/metadata/58683/thumb/1703239236", "art": "/library/metadata/58683/art/1703239236", "banner": "/library/metadata/58683/banner/1703239236", "duration": 11558112, "originallyAvailableAt": "2022-12-14T00:00:00Z", "addedAt": 1556281940, "updatedAt": 1556281940, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/58684", "ratingImage": "rottentomatoes://image.rating.ripe", "grandparentRatingKey": "66", "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentKey": "/library/metadata/66", "grandparentTitle": "Caprica", "grandparentThumb": "/library/metadata/66/thumb/1705716261", "parentSlug": "alice-in-borderland-2020", "grandparentSlug": "alice-in-borderland-2020", "grandparentArt": "/library/metadata/66/art/1705716261", "grandparentTheme": "/library/metadata/66/theme/1705716261", "Media": [{"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 1, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}], "Genre": [], "Country": [{"tag": "United States of America"}], "Director": [{"tag": "James Cameron"}, {"tag": "James Cameron"}, {"tag": "James Cameron"}], "Writer": [{"tag": "James Cameron"}], "Collection": [{"tag": "Working NL Subs"}, {"tag": "Working NL Subs"}], "Role": [{"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}, {"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}, {"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}], "Guid": [{"id": "imdb://tt13015952"}], "UltraBlurColors": {"topLeft": "11333b", "topRight": "0a232d", "bottomRight": "73958", "bottomLeft": "1f5066"}, "Rating": [], "Image": [{"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}], "titleSort": "Whale", "viewCount": 1, "lastViewedAt": 1682752242, "originalTitle": "映画 ブラッククローバー 魔法帝の剣", "viewOffset": 5222500, "skipCount": 1, "index": 1, "theme": "/library/metadata/1/theme/1705636920", "leafCount": 14, "viewedLeafCount": 0, "childCount": 1, "hasPremiumExtras": "1", "hasPremiumPrimaryExtra": "1", "parentRatingKey": "66", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "parentStudio": "UCP", "parentKey": "/library/metadata/66", "parentTitle": "Caprica", "parentIndex": 1, "parentYear": 2010, "parentThumb": "/library/metadata/66/thumb/1705716261", "parentTheme": "/library/metadata/66/theme/1705716261"}], "Meta": {"Type": [{"key": "/library/sections/2/all?type=2", "type": "show", "title": "TV Shows", "active": false, "Filter": [], "Sort": [], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}, {"key": "/library/sections/2/all?type=2", "type": "show", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}], "Sort": [], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}], "FieldType": [{"type": "tag", "Operator": [{"key": "=", "title": "is"}]}, {"type": "tag", "Operator": [{"key": "=", "title": "is"}, {"key": "=", "title": "is"}]}, {"type": "tag", "Operator": [{"key": "=", "title": "is"}, {"key": "=", "title": "is"}]}]}}} "400": - application/json: - errors: - - code: 1000 - message: X-Plex-Client-Identifier is missing - status: 400 + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: - errors: - - code: 1001 - message: User could not be authenticated - status: 401 + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}]} get-media-providers: speakeasy-default-get-media-providers: parameters: query: - X-Plex-Token: CV5xoxjTpFKUzBTShsaf + X-Plex-Token: "CV5xoxjTpFKUzBTShsaf" responses: "200": - application/json: - MediaContainer: - MediaProvider: - - Feature: - - Action: [] - flavor: global - scrobbleKey: /:/scrobble/new - type: - unscrobbleKey: /:/unscrobble/new - - Action: - - id: addToContinueWatching - key: /actions/addToContinueWatching - - id: addToContinueWatching - key: /actions/addToContinueWatching - flavor: global - scrobbleKey: /:/scrobble/new - type: - unscrobbleKey: /:/unscrobble/new - - Action: - - id: addToContinueWatching - key: /actions/addToContinueWatching - - id: addToContinueWatching - key: /actions/addToContinueWatching - flavor: global - scrobbleKey: /:/scrobble/new - type: - unscrobbleKey: /:/unscrobble/new + application/json: {"MediaContainer": {"MediaProvider": [{"Feature": [{"type": "", "flavor": "global", "scrobbleKey": "/:/scrobble/new", "unscrobbleKey": "/:/unscrobble/new", "Action": []}, {"type": "", "flavor": "global", "scrobbleKey": "/:/scrobble/new", "unscrobbleKey": "/:/unscrobble/new", "Action": [{"id": "addToContinueWatching", "key": "/actions/addToContinueWatching"}, {"id": "addToContinueWatching", "key": "/actions/addToContinueWatching"}]}, {"type": "", "flavor": "global", "scrobbleKey": "/:/scrobble/new", "unscrobbleKey": "/:/unscrobble/new", "Action": [{"id": "addToContinueWatching", "key": "/actions/addToContinueWatching"}, {"id": "addToContinueWatching", "key": "/actions/addToContinueWatching"}]}]}]}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} get-meta-data-by-rating-key: speakeasy-default-get-meta-data-by-rating-key: parameters: @@ -1953,23 +1180,11 @@ examples: ratingKey: 9518 responses: "200": - application/json: - MediaContainer: - Metadata: [] - allowSync: true - identifier: com.plexapp.plugins.library - librarySectionID: 1 - librarySectionTitle: Movies - librarySectionUUID: cfc899d7-3000-46f6-8489-b9592714ada5 - mediaTagPrefix: /system/bundle/media/flags/ - mediaTagVersion: 1698860922 - size: 1 + application/json: {"MediaContainer": {"size": 1, "allowSync": true, "identifier": "com.plexapp.plugins.library", "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionUUID": "cfc899d7-3000-46f6-8489-b9592714ada5", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1698860922, "Metadata": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} get-recently-added: speakeasy-default-get-recently-added: parameters: @@ -1982,364 +1197,7 @@ examples: type: 2 responses: "200": - application/json: - MediaContainer: - Meta: - FieldType: - - Operator: - - key: = - title: is - type: tag - - Operator: [] - type: tag - - Operator: [] - type: tag - Type: - - Field: - - key: show.title - subType: rating - title: Show Title - type: string - - key: show.title - subType: rating - title: Show Title - type: string - - key: show.title - subType: rating - title: Show Title - type: string - Filter: - - filter: genre - filterType: string - key: /library/sections/2/genre?type=2 - title: Genre - type: filter - - filter: genre - filterType: string - key: /library/sections/2/genre?type=2 - title: Genre - type: filter - - filter: genre - filterType: string - key: /library/sections/2/genre?type=2 - title: Genre - type: filter - Sort: - - active: false - activeDirection: asc - default: asc - defaultDirection: asc - descKey: titleSort:desc - firstCharacterKey: /library/sections/2/firstCharacter - key: titleSort - title: Title - active: false - key: /library/sections/2/all?type=2 - title: TV Shows - type: show - - Field: - - key: show.title - subType: rating - title: Show Title - type: string - - key: show.title - subType: rating - title: Show Title - type: string - - key: show.title - subType: rating - title: Show Title - type: string - Filter: - - filter: genre - filterType: string - key: /library/sections/2/genre?type=2 - title: Genre - type: filter - - filter: genre - filterType: string - key: /library/sections/2/genre?type=2 - title: Genre - type: filter - - filter: genre - filterType: string - key: /library/sections/2/genre?type=2 - title: Genre - type: filter - Sort: - - active: false - activeDirection: asc - default: asc - defaultDirection: asc - descKey: titleSort:desc - firstCharacterKey: /library/sections/2/firstCharacter - key: titleSort - title: Title - - active: false - activeDirection: asc - default: asc - defaultDirection: asc - descKey: titleSort:desc - firstCharacterKey: /library/sections/2/firstCharacter - key: titleSort - title: Title - - active: false - activeDirection: asc - default: asc - defaultDirection: asc - descKey: titleSort:desc - firstCharacterKey: /library/sections/2/firstCharacter - key: titleSort - title: Title - active: false - key: /library/sections/2/all?type=2 - title: TV Shows - type: show - - Field: - - key: show.title - subType: rating - title: Show Title - type: string - - key: show.title - subType: rating - title: Show Title - type: string - - key: show.title - subType: rating - title: Show Title - type: string - Filter: - - filter: genre - filterType: string - key: /library/sections/2/genre?type=2 - title: Genre - type: filter - - filter: genre - filterType: string - key: /library/sections/2/genre?type=2 - title: Genre - type: filter - - filter: genre - filterType: string - key: /library/sections/2/genre?type=2 - title: Genre - type: filter - Sort: - - active: false - activeDirection: asc - default: asc - defaultDirection: asc - descKey: titleSort:desc - firstCharacterKey: /library/sections/2/firstCharacter - key: titleSort - title: Title - - active: false - activeDirection: asc - default: asc - defaultDirection: asc - descKey: titleSort:desc - firstCharacterKey: /library/sections/2/firstCharacter - key: titleSort - title: Title - active: false - key: /library/sections/2/all?type=2 - title: TV Shows - type: show - Metadata: - - Collection: [] - Country: [] - Director: - - tag: James Cameron - - tag: James Cameron - Genre: - - tag: Adventure - Guid: - - id: imdb://tt13015952 - - id: imdb://tt13015952 - - id: imdb://tt13015952 - Image: - - alt: Episode 1 - type: background - url: /library/metadata/45521/thumb/1644710589 - - alt: Episode 1 - type: background - url: /library/metadata/45521/thumb/1644710589 - - alt: Episode 1 - type: background - url: /library/metadata/45521/thumb/1644710589 - Media: - - Part: - - Stream: - - audioChannelLayout: stereo - bitDepth: 8 - bitrate: 6273 - canAutoSync: false - channels: 2 - chromaLocation: left - chromaSubsampling: "4:2:0" - closedCaptions: false - codec: h264 - codedHeight: 1088 - codedWidth: 1920 - colorPrimaries: bt709 - colorRange: tv - colorSpace: bt709 - colorTrc: bt709 - default: true - displayTitle: 1080p (H.264) - embeddedInVideo: "1" - extendedDisplayTitle: 1080p (H.264) - frameRate: 29.97 - hasScalingMatrix: false - hearingImpaired: false - height: 1080 - id: 272796 - index: 0 - language: English - languageCode: eng - languageTag: en - level: 40 - profile: main - refFrames: 4 - samplingRate: 48000 - scanType: progressive - selected: true - streamIdentifier: "2" - streamType: 1 - title: English - width: 1920 - audioProfile: dts - container: mkv - duration: 11558112 - file: /movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv - has64bitOffsets: false - hasThumbnail: "1" - id: 119542 - indexes: sd - key: /library/parts/119542/1680457526/file.mkv - optimizedForStreaming: false - size: 36158371307 - videoProfile: main 10 - - Stream: [] - audioProfile: dts - container: mkv - duration: 11558112 - file: /movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv - has64bitOffsets: false - hasThumbnail: "1" - id: 119542 - indexes: sd - key: /library/parts/119542/1680457526/file.mkv - optimizedForStreaming: false - size: 36158371307 - videoProfile: main 10 - aspectRatio: 1.85 - audioChannels: 6 - audioCodec: eac3 - audioProfile: dts - bitrate: 25025 - container: mkv - duration: 11558112 - has64bitOffsets: false - hasVoiceActivity: false - height: 2072 - id: 119534 - optimizedForStreaming: 1 - videoCodec: hevc - videoFrameRate: 24p - videoProfile: main 10 - videoResolution: 4k - width: 3840 - Rating: [] - Role: - - filter: actor=294129 - id: 294129 - role: Self - tag: Mike Smith - tagKey: 668e7e7b22bcad9064350c91 - thumb: https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg - - filter: actor=294129 - id: 294129 - role: Self - tag: Mike Smith - tagKey: 668e7e7b22bcad9064350c91 - thumb: https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg - - filter: actor=294129 - id: 294129 - role: Self - tag: Mike Smith - tagKey: 668e7e7b22bcad9064350c91 - thumb: https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg - UltraBlurColors: - bottomLeft: 1f5066 - bottomRight: "73958" - topLeft: 11333b - topRight: 0a232d - Writer: [] - addedAt: 1556281940 - art: /library/metadata/58683/art/1703239236 - audienceRating: 9.2 - audienceRatingImage: rottentomatoes://image.rating.upright - banner: /library/metadata/58683/banner/1703239236 - chapterSource: media - childCount: 1 - contentRating: PG-13 - duration: 11558112 - flattenSeasons: "1" - grandparentArt: /library/metadata/66/art/1705716261 - grandparentGuid: plex://show/5d9c081b170e24001f2a7be4 - grandparentKey: /library/metadata/66 - grandparentRatingKey: "66" - grandparentSlug: alice-in-borderland-2020 - grandparentTheme: /library/metadata/66/theme/1705716261 - grandparentThumb: /library/metadata/66/thumb/1705716261 - grandparentTitle: Caprica - guid: plex://movie/5d7768ba96b655001fdc0408 - hasPremiumExtras: "1" - hasPremiumPrimaryExtra: "1" - index: 1 - key: /library/metadata/58683 - lastViewedAt: 1682752242 - leafCount: 14 - librarySectionID: 1 - librarySectionKey: /library/sections/1 - librarySectionTitle: Movies - originalTitle: 映画 ブラッククローバー 魔法帝の剣 - originallyAvailableAt: "2022-12-14T00:00:00Z" - parentGuid: plex://show/5d9c081b170e24001f2a7be4 - parentIndex: 1 - parentKey: /library/metadata/66 - parentRatingKey: "66" - parentSlug: alice-in-borderland-2020 - parentStudio: UCP - parentTheme: /library/metadata/66/theme/1705716261 - parentThumb: /library/metadata/66/thumb/1705716261 - parentTitle: Caprica - parentYear: 2010 - primaryExtraKey: /library/metadata/58684 - rating: 7.6 - ratingImage: rottentomatoes://image.rating.ripe - ratingKey: "58683" - seasonCount: 2022 - showOrdering: dvd - skipChildren: false - skipCount: 1 - slug: 4-for-texas - studio: 20th Century Studios - summary: Jake Sully lives with his newfound family formed on the extrasolar moon Pandora. Once a familiar threat returns to finish what was previously started, Jake must work with Neytiri and the army of the Na'vi race to protect their home. - tagline: Return to Pandora. - theme: /library/metadata/1/theme/1705636920 - thumb: /library/metadata/58683/thumb/1703239236 - title: 'Avatar: The Way of Water' - titleSort: Whale - type: movie - updatedAt: 1556281940 - viewCount: 1 - viewOffset: 5222500 - viewedLeafCount: 0 - year: 2022 - identifier: com.plexapp.plugins.library - size: 50 + application/json: {"MediaContainer": {"size": 50, "identifier": "com.plexapp.plugins.library", "Meta": {"Type": [{"key": "/library/sections/2/all?type=2", "type": "show", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}, {"key": "/library/sections/2/all?type=2", "type": "show", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}, {"key": "/library/sections/2/all?type=2", "type": "show", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}], "FieldType": [{"type": "tag", "Operator": [{"key": "=", "title": "is"}]}, {"type": "tag", "Operator": []}, {"type": "tag", "Operator": []}]}, "Metadata": [{"ratingKey": "58683", "key": "/library/metadata/58683", "guid": "plex://movie/5d7768ba96b655001fdc0408", "studio": "20th Century Studios", "skipChildren": false, "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionKey": "/library/sections/1", "type": "movie", "title": "Avatar: The Way of Water", "slug": "4-for-texas", "contentRating": "PG-13", "summary": "Jake Sully lives with his newfound family formed on the extrasolar moon Pandora. Once a familiar threat returns to finish what was previously started, Jake must work with Neytiri and the army of the Na'vi race to protect their home.", "rating": 7.6, "audienceRating": 9.2, "year": 2022, "seasonCount": 2022, "tagline": "Return to Pandora.", "flattenSeasons": "1", "showOrdering": "dvd", "thumb": "/library/metadata/58683/thumb/1703239236", "art": "/library/metadata/58683/art/1703239236", "banner": "/library/metadata/58683/banner/1703239236", "duration": 11558112, "originallyAvailableAt": "2022-12-14T00:00:00Z", "addedAt": 1556281940, "updatedAt": 1556281940, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/58684", "ratingImage": "rottentomatoes://image.rating.ripe", "grandparentRatingKey": "66", "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentKey": "/library/metadata/66", "grandparentTitle": "Caprica", "grandparentThumb": "/library/metadata/66/thumb/1705716261", "parentSlug": "alice-in-borderland-2020", "grandparentSlug": "alice-in-borderland-2020", "grandparentArt": "/library/metadata/66/art/1705716261", "grandparentTheme": "/library/metadata/66/theme/1705716261", "Media": [{"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 1, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}, {"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": []}]}], "Genre": [{"tag": "Adventure"}], "Country": [], "Director": [{"tag": "James Cameron"}, {"tag": "James Cameron"}], "Writer": [], "Collection": [], "Role": [{"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}, {"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}, {"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}], "Guid": [{"id": "imdb://tt13015952"}, {"id": "imdb://tt13015952"}, {"id": "imdb://tt13015952"}], "UltraBlurColors": {"topLeft": "11333b", "topRight": "0a232d", "bottomRight": "73958", "bottomLeft": "1f5066"}, "Rating": [], "Image": [{"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}, {"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}, {"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}], "titleSort": "Whale", "viewCount": 1, "lastViewedAt": 1682752242, "originalTitle": "映画 ブラッククローバー 魔法帝の剣", "viewOffset": 5222500, "skipCount": 1, "index": 1, "theme": "/library/metadata/1/theme/1705636920", "leafCount": 14, "viewedLeafCount": 0, "childCount": 1, "hasPremiumExtras": "1", "hasPremiumPrimaryExtra": "1", "parentRatingKey": "66", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "parentStudio": "UCP", "parentKey": "/library/metadata/66", "parentTitle": "Caprica", "parentIndex": 1, "parentYear": 2010, "parentThumb": "/library/metadata/66/thumb/1705716261", "parentTheme": "/library/metadata/66/theme/1705716261"}]}} get-recently-added-library: speakeasy-default-get-recently-added-library: parameters: @@ -2348,188 +1206,16 @@ examples: X-Plex-Container-Start: 0 contentDirectoryID: 2 includeMeta: 1 - pinnedContentDirectoryID: - - 3 - - 5 - - 7 - - 13 - - 12 - - 1 - - 6 - - 14 - - 2 - - 10 - - 16 - - 17 + pinnedContentDirectoryID: [3, 5, 7, 13, 12, 1, 6, 14, 2, 10, 16, 17] sectionID: 2 type: 2 responses: "200": - application/json: - MediaContainer: - FieldType: [] - Metadata: - - Country: [] - Director: - - tag: Peyton Reed - Genre: [] - Media: - - Part: [] - aspectRatio: 2.35 - audioChannels: 6 - audioCodec: ac3 - bitrate: 3623 - container: mp4 - duration: 7474422 - height: 804 - id: 120345 - optimizedForStreaming: 0 - videoCodec: h264 - videoFrameRate: 24p - videoProfile: high - videoResolution: 1080 - width: 1920 - Role: - - tag: Paul Rudd - - tag: Paul Rudd - - tag: Paul Rudd - Writer: [] - addedAt: 1681803215 - art: /library/metadata/59398/art/1681888010 - audienceRating: 8.3 - audienceRatingImage: rottentomatoes://image.rating.upright - chapterSource: media - contentRating: PG-13 - duration: 7474422 - guid: plex://movie/5e161a83bea6ac004126e148 - key: /library/metadata/59398 - librarySectionID: 1 - librarySectionTitle: Movies - librarySectionUUID: 322a231a-b7f7-49f5-920f-14c61199cd30 - originallyAvailableAt: "2023-02-15T00:00:00Z" - primaryExtraKey: /library/metadata/59399 - rating: 4.7 - ratingImage: rottentomatoes://image.rating.rotten - ratingKey: 59398 - studio: Marvel Studios - summary: Scott Lang and Hope Van Dyne along with Hank Pym and Janet Van Dyne explore the Quantum Realm where they interact with strange creatures and embark on an adventure that goes beyond the limits of what they thought was possible. - tagline: Witness the beginning of a new dynasty. - thumb: /library/metadata/59398/thumb/1681888010 - title: 'Ant-Man and the Wasp: Quantumania' - type: movie - updatedAt: 1681888010 - year: 2023 - Type: - - Field: - - key: show.title - subType: rating - title: Show Title - type: string - - key: show.title - subType: rating - title: Show Title - type: string - Filter: - - filter: genre - filterType: string - key: /library/sections/2/genre?type=2 - title: Genre - type: filter - Sort: - - active: false - activeDirection: asc - default: asc - defaultDirection: asc - descKey: titleSort:desc - firstCharacterKey: /library/sections/2/firstCharacter - key: titleSort - title: Title - - active: false - activeDirection: asc - default: asc - defaultDirection: asc - descKey: titleSort:desc - firstCharacterKey: /library/sections/2/firstCharacter - key: titleSort - title: Title - - active: false - activeDirection: asc - default: asc - defaultDirection: asc - descKey: titleSort:desc - firstCharacterKey: /library/sections/2/firstCharacter - key: titleSort - title: Title - active: false - key: /library/sections/2/all?type=2 - title: TV Shows - type: show - - Field: - - key: show.title - subType: rating - title: Show Title - type: string - - key: show.title - subType: rating - title: Show Title - type: string - Filter: - - filter: genre - filterType: string - key: /library/sections/2/genre?type=2 - title: Genre - type: filter - Sort: - - active: false - activeDirection: asc - default: asc - defaultDirection: asc - descKey: titleSort:desc - firstCharacterKey: /library/sections/2/firstCharacter - key: titleSort - title: Title - - active: false - activeDirection: asc - default: asc - defaultDirection: asc - descKey: titleSort:desc - firstCharacterKey: /library/sections/2/firstCharacter - key: titleSort - title: Title - - active: false - activeDirection: asc - default: asc - defaultDirection: asc - descKey: titleSort:desc - firstCharacterKey: /library/sections/2/firstCharacter - key: titleSort - title: Title - active: false - key: /library/sections/2/all?type=2 - title: TV Shows - type: show - identifier: com.plexapp.plugins.library - mediaTagPrefix: /system/bundle/media/flags/ - mediaTagVersion: 1680021154 - size: 50 + application/json: {"MediaContainer": {"Type": [{"key": "/library/sections/2/all?type=2", "type": "show", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}, {"key": "/library/sections/2/all?type=2", "type": "show", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}], "FieldType": [], "size": 50, "identifier": "com.plexapp.plugins.library", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1680021154, "Metadata": [{"librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionUUID": "322a231a-b7f7-49f5-920f-14c61199cd30", "ratingKey": 59398, "key": "/library/metadata/59398", "guid": "plex://movie/5e161a83bea6ac004126e148", "studio": "Marvel Studios", "type": "movie", "title": "Ant-Man and the Wasp: Quantumania", "contentRating": "PG-13", "summary": "Scott Lang and Hope Van Dyne along with Hank Pym and Janet Van Dyne explore the Quantum Realm where they interact with strange creatures and embark on an adventure that goes beyond the limits of what they thought was possible.", "rating": 4.7, "audienceRating": 8.3, "year": 2023, "tagline": "Witness the beginning of a new dynasty.", "thumb": "/library/metadata/59398/thumb/1681888010", "art": "/library/metadata/59398/art/1681888010", "duration": 7474422, "originallyAvailableAt": "2023-02-15T00:00:00Z", "addedAt": 1681803215, "updatedAt": 1681888010, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/59399", "ratingImage": "rottentomatoes://image.rating.rotten", "Media": [{"id": 120345, "duration": 7474422, "bitrate": 3623, "width": 1920, "height": 804, "aspectRatio": 2.35, "audioChannels": 6, "audioCodec": "ac3", "videoCodec": "h264", "videoResolution": 1080, "container": "mp4", "videoFrameRate": "24p", "optimizedForStreaming": 0, "videoProfile": "high", "Part": []}], "Genre": [], "Director": [{"tag": "Peyton Reed"}], "Writer": [], "Country": [], "Role": [{"tag": "Paul Rudd"}, {"tag": "Paul Rudd"}, {"tag": "Paul Rudd"}]}]}} "400": - application/json: - errors: - - code: 1000 - message: X-Plex-Client-Identifier is missing - status: 400 + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: - errors: - - code: 1001 - message: User could not be authenticated - status: 401 - - code: 1001 - message: User could not be authenticated - status: 401 - - code: 1001 - message: User could not be authenticated - status: 401 + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} get-refresh-library-metadata: speakeasy-default-get-refresh-library-metadata: parameters: @@ -2539,11 +1225,9 @@ examples: force: 0 responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} get-search-library: speakeasy-default-get-search-library: parameters: @@ -2553,45 +1237,23 @@ examples: type: 2 responses: "200": - application/json: - MediaContainer: - Metadata: [] - allowSync: false - art: /:/resources/show-fanart.jpg - identifier: com.plexapp.plugins.library - mediaTagPrefix: /system/bundle/media/flags/ - mediaTagVersion: 1698860922 - nocache: true - size: 2 - thumb: /:/resources/show.png - title1: TV Shows - title2: Search for '' - viewGroup: season - viewMode: 65593 + application/json: {"MediaContainer": {"size": 2, "allowSync": false, "art": "/:/resources/show-fanart.jpg", "identifier": "com.plexapp.plugins.library", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1698860922, "nocache": true, "thumb": "/:/resources/show.png", "title1": "TV Shows", "title2": "Search for ''", "viewGroup": "season", "viewMode": 65593, "Metadata": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} get-server-identity: speakeasy-default-get-server-identity: responses: "200": - application/json: - MediaContainer: - machineIdentifier: 96f2fe7a78c9dc1f16a16bedbe90f98149be16b4 - size: 0 - version: 1.31.3.6868-28fc46b27 + application/json: {"MediaContainer": {"size": 0, "machineIdentifier": "96f2fe7a78c9dc1f16a16bedbe90f98149be16b4", "version": "1.31.3.6868-28fc46b27"}} "408": - application/json: - code: 408 - message: The server timed out waiting for the request. + application/json: {"code": 408, "message": "The server timed out waiting for the request."} get-server-resources: speakeasy-default-get-server-resources: parameters: query: - X-Plex-Client-Identifier: gcgzw5rz2xovp84b4vha3a40 + X-Plex-Client-Identifier: "gcgzw5rz2xovp84b4vha3a40" includeHttps: 1 includeIPv6: 1 includeRelay: 1 @@ -2599,18 +1261,16 @@ examples: "200": application/json: [] "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} get-thumb-image: speakeasy-default-get-thumb-image: parameters: path: ratingKey: 9518 query: - X-Plex-Token: CV5xoxjTpFKUzBTShsaf + X-Plex-Token: "CV5xoxjTpFKUzBTShsaf" height: 396 minSize: 1 upscale: 1 @@ -2619,42 +1279,33 @@ examples: "200": image/jpeg: "0x4f576BaCaA" "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} get-watch-list: speakeasy-default-get-watch-list: parameters: path: - filter: available + filter: "available" query: X-Plex-Container-Size: 50 X-Plex-Container-Start: 0 - X-Plex-Token: CV5xoxjTpFKUzBTShsaf + X-Plex-Token: "CV5xoxjTpFKUzBTShsaf" responses: "200": {} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getAvailableClients: speakeasy-default-get-available-clients: responses: "200": - application/json: - MediaContainer: - Server: [] - size: 1 + application/json: {"MediaContainer": {"size": 1, "Server": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getBandwidthStatistics: "": parameters: @@ -2662,122 +1313,75 @@ examples: Timespan: 4 responses: "200": - application/json: - MediaContainer: - Account: [] - Device: [] - StatisticsBandwidth: [] - size: 5497 + application/json: {"MediaContainer": {"size": 5497, "Device": [], "Account": [], "StatisticsBandwidth": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getButlerTasks: speakeasy-default-get-butler-tasks: responses: "200": - application/json: - ButlerTasks: - ButlerTask: [] + application/json: {"ButlerTasks": {"ButlerTask": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getCompanionsData: speakeasy-default-get-companions-data: responses: "200": application/json: [] "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getDevices: speakeasy-default-get-devices: responses: "200": - application/json: - MediaContainer: - Device: [] - identifier: com.plexapp.system.devices - size: 151 + application/json: {"MediaContainer": {"size": 151, "identifier": "com.plexapp.system.devices", "Device": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getFileHash: speakeasy-default-get-file-hash: parameters: query: - url: file://C:\Image.png&type=13 + url: "file://C:\\Image.png&type=13" responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getGeoData: speakeasy-default-get-geo-data: responses: "200": - application/json: - city: Amsterdam - code: VI - continent_code: NA - coordinates: 18.3381, -64.8941 - country: United States Virgin Islands - european_union_member: true - in_privacy_restricted_country: true - in_privacy_restricted_region: true - postal_code: "802" - subdivisions: Saint Thomas - time_zone: America/St_Thomas + application/json: {"code": "VI", "continent_code": "NA", "country": "United States Virgin Islands", "city": "Amsterdam", "european_union_member": true, "time_zone": "America/St_Thomas", "postal_code": "802", "in_privacy_restricted_country": true, "in_privacy_restricted_region": true, "subdivisions": "Saint Thomas", "coordinates": "18.3381, -64.8941"} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getGlobalHubs: speakeasy-default-get-global-hubs: responses: "200": - application/json: - MediaContainer: - Hub: [] - allowSync: true - identifier: com.plexapp.plugins.library - size: 8 + application/json: {"MediaContainer": {"size": 8, "allowSync": true, "identifier": "com.plexapp.plugins.library", "Hub": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getHomeData: speakeasy-default-get-home-data: responses: "200": - application/json: - guestUserID: 58815432 - guestUserUUID: f3df4e01bfca0787 - id: 1841489 - name: Blindkitty38's home + application/json: {"id": 1841489, "name": "Blindkitty38's home", "guestUserID": 58815432, "guestUserUUID": "f3df4e01bfca0787"} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getLibraryHubs: speakeasy-default-get-library-hubs: parameters: @@ -2786,202 +1390,78 @@ examples: query: {} responses: "200": - application/json: - MediaContainer: - Hub: [] - allowSync: true - identifier: com.plexapp.plugins.library - librarySectionID: 1 - librarySectionTitle: Movies - librarySectionUUID: 322a231a-b7f7-49f5-920f-14c61199cd30 - size: 7 + application/json: {"MediaContainer": {"size": 7, "allowSync": true, "identifier": "com.plexapp.plugins.library", "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionUUID": "322a231a-b7f7-49f5-920f-14c61199cd30", "Hub": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getMetadataChildren: include-stream: parameters: path: ratingKey: "1539.14" query: - includeElements: Stream + includeElements: "Stream" responses: "200": - application/json: - MediaContainer: - Directory: - - key: /library/metadata/30072/allLeaves - leafCount: 16 - thumb: /library/metadata/30072/thumb/1705739923 - title: All episodes - viewedLeafCount: 16 - Metadata: [] - allowSync: true - art: /library/metadata/30072/art/1705739923 - identifier: com.plexapp.plugins.library - key: "30072" - librarySectionID: 2 - librarySectionTitle: TV Shows - librarySectionUUID: 4bb2521c-8ba9-459b-aaee-8ab8bc35eabd - mediaTagPrefix: /system/bundle/media/flags/ - mediaTagVersion: 1701731894 - nocache: true - parentIndex: 1 - parentTitle: Reacher - parentYear: 2022 - size: 3 - summary: When retired Military Police Officer Jack Reacher is arrested for a murder he did not commit, he finds himself in the middle of a deadly conspiracy full of dirty cops, shady businessmen, and scheming politicians. With nothing but his wits, he must figure out what is happening in Margrave, Georgia. - theme: /library/metadata/30072/theme/1705739923 - thumb: /library/metadata/30072/thumb/1705739923 - title1: TV Shows - title2: Reacher - viewGroup: season - viewMode: 65593 + application/json: {"MediaContainer": {"size": 3, "allowSync": true, "art": "/library/metadata/30072/art/1705739923", "identifier": "com.plexapp.plugins.library", "key": "30072", "librarySectionID": 2, "librarySectionTitle": "TV Shows", "librarySectionUUID": "4bb2521c-8ba9-459b-aaee-8ab8bc35eabd", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1701731894, "nocache": true, "parentIndex": 1, "parentTitle": "Reacher", "parentYear": 2022, "summary": "When retired Military Police Officer Jack Reacher is arrested for a murder he did not commit, he finds himself in the middle of a deadly conspiracy full of dirty cops, shady businessmen, and scheming politicians. With nothing but his wits, he must figure out what is happening in Margrave, Georgia.", "theme": "/library/metadata/30072/theme/1705739923", "thumb": "/library/metadata/30072/thumb/1705739923", "title1": "TV Shows", "title2": "Reacher", "viewGroup": "season", "viewMode": 65593, "Directory": [{"leafCount": 16, "thumb": "/library/metadata/30072/thumb/1705739923", "viewedLeafCount": 16, "key": "/library/metadata/30072/allLeaves", "title": "All episodes"}], "Metadata": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} include-stream-otheritem: parameters: path: ratingKey: "8449.64" query: - includeElements: Stream,OtherItem + includeElements: "Stream,OtherItem" responses: "200": - application/json: - MediaContainer: - Directory: - - key: /library/metadata/30072/allLeaves - leafCount: 16 - thumb: /library/metadata/30072/thumb/1705739923 - title: All episodes - viewedLeafCount: 16 - Metadata: [] - allowSync: true - art: /library/metadata/30072/art/1705739923 - identifier: com.plexapp.plugins.library - key: "30072" - librarySectionID: 2 - librarySectionTitle: TV Shows - librarySectionUUID: 4bb2521c-8ba9-459b-aaee-8ab8bc35eabd - mediaTagPrefix: /system/bundle/media/flags/ - mediaTagVersion: 1701731894 - nocache: true - parentIndex: 1 - parentTitle: Reacher - parentYear: 2022 - size: 3 - summary: When retired Military Police Officer Jack Reacher is arrested for a murder he did not commit, he finds himself in the middle of a deadly conspiracy full of dirty cops, shady businessmen, and scheming politicians. With nothing but his wits, he must figure out what is happening in Margrave, Georgia. - theme: /library/metadata/30072/theme/1705739923 - thumb: /library/metadata/30072/thumb/1705739923 - title1: TV Shows - title2: Reacher - viewGroup: season - viewMode: 65593 + application/json: {"MediaContainer": {"size": 3, "allowSync": true, "art": "/library/metadata/30072/art/1705739923", "identifier": "com.plexapp.plugins.library", "key": "30072", "librarySectionID": 2, "librarySectionTitle": "TV Shows", "librarySectionUUID": "4bb2521c-8ba9-459b-aaee-8ab8bc35eabd", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1701731894, "nocache": true, "parentIndex": 1, "parentTitle": "Reacher", "parentYear": 2022, "summary": "When retired Military Police Officer Jack Reacher is arrested for a murder he did not commit, he finds himself in the middle of a deadly conspiracy full of dirty cops, shady businessmen, and scheming politicians. With nothing but his wits, he must figure out what is happening in Margrave, Georgia.", "theme": "/library/metadata/30072/theme/1705739923", "thumb": "/library/metadata/30072/thumb/1705739923", "title1": "TV Shows", "title2": "Reacher", "viewGroup": "season", "viewMode": 65593, "Directory": [{"leafCount": 16, "thumb": "/library/metadata/30072/thumb/1705739923", "viewedLeafCount": 16, "key": "/library/metadata/30072/allLeaves", "title": "All episodes"}], "Metadata": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} include-stream-otheritem-anotheritem: parameters: path: ratingKey: "5800.4" query: - includeElements: Stream,OtherItem,AnotherItem + includeElements: "Stream,OtherItem,AnotherItem" responses: "200": - application/json: - MediaContainer: - Directory: - - key: /library/metadata/30072/allLeaves - leafCount: 16 - thumb: /library/metadata/30072/thumb/1705739923 - title: All episodes - viewedLeafCount: 16 - Metadata: [] - allowSync: true - art: /library/metadata/30072/art/1705739923 - identifier: com.plexapp.plugins.library - key: "30072" - librarySectionID: 2 - librarySectionTitle: TV Shows - librarySectionUUID: 4bb2521c-8ba9-459b-aaee-8ab8bc35eabd - mediaTagPrefix: /system/bundle/media/flags/ - mediaTagVersion: 1701731894 - nocache: true - parentIndex: 1 - parentTitle: Reacher - parentYear: 2022 - size: 3 - summary: When retired Military Police Officer Jack Reacher is arrested for a murder he did not commit, he finds himself in the middle of a deadly conspiracy full of dirty cops, shady businessmen, and scheming politicians. With nothing but his wits, he must figure out what is happening in Margrave, Georgia. - theme: /library/metadata/30072/theme/1705739923 - thumb: /library/metadata/30072/thumb/1705739923 - title1: TV Shows - title2: Reacher - viewGroup: season - viewMode: 65593 + application/json: {"MediaContainer": {"size": 3, "allowSync": true, "art": "/library/metadata/30072/art/1705739923", "identifier": "com.plexapp.plugins.library", "key": "30072", "librarySectionID": 2, "librarySectionTitle": "TV Shows", "librarySectionUUID": "4bb2521c-8ba9-459b-aaee-8ab8bc35eabd", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1701731894, "nocache": true, "parentIndex": 1, "parentTitle": "Reacher", "parentYear": 2022, "summary": "When retired Military Police Officer Jack Reacher is arrested for a murder he did not commit, he finds himself in the middle of a deadly conspiracy full of dirty cops, shady businessmen, and scheming politicians. With nothing but his wits, he must figure out what is happening in Margrave, Georgia.", "theme": "/library/metadata/30072/theme/1705739923", "thumb": "/library/metadata/30072/thumb/1705739923", "title1": "TV Shows", "title2": "Reacher", "viewGroup": "season", "viewMode": 65593, "Directory": [{"leafCount": 16, "thumb": "/library/metadata/30072/thumb/1705739923", "viewedLeafCount": 16, "key": "/library/metadata/30072/allLeaves", "title": "All episodes"}], "Metadata": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getMyPlexAccount: speakeasy-default-get-my-plex-account: responses: "200": - application/json: - MyPlex: - authToken: Z5v-PrNASDFpsaCi3CPK7 - mappingState: mapped - privateAddress: 10.10.10.47 - privatePort: 32400 - publicAddress: 140.20.68.140 - publicPort: 32400 - signInState: ok - subscriptionFeatures: federated-auth,hardware_transcoding,home,hwtranscode,item_clusters,kevin-bacon,livetv,loudness,lyrics,music-analysis,music_videos,pass,photo_autotags,photos-v5,photosV6-edit,photosV6-tv-albums,premium_music_metadata,radio,server-manager,session_bandwidth_restrictions,session_kick,shared-radio,sync,trailers,tuner-sharing,type-first,unsupportedtuners,webhooks - subscriptionState: Active - username: example.email@mail.com + application/json: {"MyPlex": {"authToken": "Z5v-PrNASDFpsaCi3CPK7", "username": "example.email@mail.com", "mappingState": "mapped", "signInState": "ok", "publicAddress": "140.20.68.140", "publicPort": 32400, "privateAddress": "10.10.10.47", "privatePort": 32400, "subscriptionFeatures": "federated-auth,hardware_transcoding,home,hwtranscode,item_clusters,kevin-bacon,livetv,loudness,lyrics,music-analysis,music_videos,pass,photo_autotags,photos-v5,photosV6-edit,photosV6-tv-albums,premium_music_metadata,radio,server-manager,session_bandwidth_restrictions,session_kick,shared-radio,sync,trailers,tuner-sharing,type-first,unsupportedtuners,webhooks", "subscriptionState": "Active"}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getOnDeck: speakeasy-default-get-on-deck: responses: "200": - application/json: - MediaContainer: - Metadata: [] - identifier: com.plexapp.plugins.library - mediaTagPrefix: /system/bundle/media/flags/ - mediaTagVersion: 1680021154 - size: 16 + application/json: {"MediaContainer": {"size": 16, "identifier": "com.plexapp.plugins.library", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1680021154, "Metadata": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getPin: "": parameters: query: - X-Plex-Client-Identifier: gcgzw5rz2xovp84b4vha3a40 - X-Plex-Device: Linux - X-Plex-Platform: Chrome - X-Plex-Product: Plex Web - X-Plex-Version: 4.133.0 + X-Plex-Client-Identifier: "gcgzw5rz2xovp84b4vha3a40" + X-Plex-Device: "Linux" + X-Plex-Platform: "Chrome" + X-Plex-Product: "Plex Web" + X-Plex-Version: "4.133.0" responses: "200": application/json: @@ -3009,33 +1489,9 @@ examples: qr: https://plex.tv/api/v2/pins/qr/7RQZ trusted: false "201": - application/json: - authToken: null - clientIdentifier: string - code: 7RQZ - createdAt: "2024-07-16T17:03:05Z" - expiresAt: "2024-07-16T17:18:05Z" - expiresIn: 876 - id: 308667304 - location: - city: Amsterdam - code: VI - continent_code: NA - coordinates: 18.3381, -64.8941 - country: United States Virgin Islands - european_union_member: true - in_privacy_restricted_country: true - in_privacy_restricted_region: true - postal_code: "802" - subdivisions: Saint Thomas - time_zone: America/St_Thomas - newRegistration: null - product: "0" - qr: https://plex.tv/api/v2/pins/qr/7RQZ - trusted: false + application/json: {"id": 308667304, "code": "7RQZ", "product": "0", "trusted": false, "qr": "https://plex.tv/api/v2/pins/qr/7RQZ", "clientIdentifier": "string", "location": {"code": "VI", "continent_code": "NA", "country": "United States Virgin Islands", "city": "Amsterdam", "european_union_member": true, "time_zone": "America/St_Thomas", "postal_code": "802", "in_privacy_restricted_country": true, "in_privacy_restricted_region": true, "subdivisions": "Saint Thomas", "coordinates": "18.3381, -64.8941"}, "expiresIn": 876, "createdAt": "2024-07-16T17:03:05Z", "expiresAt": "2024-07-16T17:18:05Z", "authToken": null, "newRegistration": null} "400": - application/json: - errors: [] + application/json: {"errors": []} getPlaylist: speakeasy-default-get-playlist: parameters: @@ -3043,16 +1499,11 @@ examples: playlistID: "4109.48" responses: "200": - application/json: - MediaContainer: - Metadata: [] - size: 1 + application/json: {"MediaContainer": {"size": 1, "Metadata": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getPlaylistContents: speakeasy-default-get-playlist-contents: parameters: @@ -3062,37 +1513,20 @@ examples: type: 2 responses: "200": - application/json: - MediaContainer: - Metadata: [] - composite: /playlists/95/composite/1705717521 - duration: 282 - leafCount: 2 - playlistType: video - ratingKey: "95" - size: 2 - smart: true - title: Smart Movie Playlist + application/json: {"MediaContainer": {"size": 2, "composite": "/playlists/95/composite/1705717521", "duration": 282, "leafCount": 2, "playlistType": "video", "ratingKey": "95", "smart": true, "title": "Smart Movie Playlist", "Metadata": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getPlaylists: speakeasy-default-get-playlists: responses: "200": - application/json: - MediaContainer: - Metadata: [] - size: 4 + application/json: {"MediaContainer": {"size": 4, "Metadata": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getRecentlyAdded: speakeasy-default-get-recently-added: parameters: @@ -3123,15 +1557,13 @@ examples: minSize: 0 opacity: 643869 upscale: 0 - url: /library/metadata/49564/thumb/1654258204 + url: "/library/metadata/49564/thumb/1654258204" width: 110 responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getResourcesStatistics: "": parameters: @@ -3139,16 +1571,11 @@ examples: Timespan: 4 responses: "200": - application/json: - MediaContainer: - StatisticsResources: [] - size: 5497 + application/json: {"MediaContainer": {"size": 5497, "StatisticsResources": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getSearchResults: speakeasy-default-get-search-results: parameters: @@ -3156,68 +1583,45 @@ examples: query: "110" responses: "200": - application/json: - MediaContainer: - Metadata: [] - Provider: [] - identifier: com.plexapp.plugins.library - mediaTagPrefix: /system/bundle/media/flags/ - mediaTagVersion: 1680021154 - size: 26 + application/json: {"MediaContainer": {"size": 26, "identifier": "com.plexapp.plugins.library", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1680021154, "Metadata": [], "Provider": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getServerActivities: speakeasy-default-get-server-activities: responses: "200": {} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getServerCapabilities: speakeasy-default-get-server-capabilities: responses: "200": {} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getServerList: speakeasy-default-get-server-list: responses: "200": - application/json: - MediaContainer: - Server: [] - size: 1 + application/json: {"MediaContainer": {"size": 1, "Server": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getServerPreferences: speakeasy-default-get-server-preferences: responses: "200": - application/json: - MediaContainer: - Setting: [] - size: 161 + application/json: {"MediaContainer": {"size": 161, "Setting": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getSessionHistory: "": parameters: @@ -3226,16 +1630,11 @@ examples: librarySectionID: 12 responses: "200": - application/json: - MediaContainer: - Metadata: [] - size: 10855 + application/json: {"MediaContainer": {"size": 10855, "Metadata": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} ViewedAt: parameters: query: @@ -3244,114 +1643,82 @@ examples: librarySectionID: 12 responses: "200": - application/json: - MediaContainer: - Metadata: [] - size: 10855 + application/json: {"MediaContainer": {"size": 10855, "Metadata": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} rating-ascending: parameters: query: accountId: 1 librarySectionID: 12 - sort: rating:asc + sort: "rating:asc" responses: "200": - application/json: - MediaContainer: - Metadata: [] - size: 10855 + application/json: {"MediaContainer": {"size": 10855, "Metadata": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} rating-descending: parameters: query: accountId: 1 librarySectionID: 12 - sort: rating:desc + sort: "rating:desc" responses: "200": - application/json: - MediaContainer: - Metadata: [] - size: 10855 + application/json: {"MediaContainer": {"size": 10855, "Metadata": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} viewed-at-ascending: parameters: query: accountId: 1 librarySectionID: 12 - sort: viewedAt:asc + sort: "viewedAt:asc" responses: "200": - application/json: - MediaContainer: - Metadata: [] - size: 10855 + application/json: {"MediaContainer": {"size": 10855, "Metadata": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} viewed-at-descending: parameters: query: accountId: 1 librarySectionID: 12 - sort: viewedAt:desc + sort: "viewedAt:desc" responses: "200": - application/json: - MediaContainer: - Metadata: [] - size: 10855 + application/json: {"MediaContainer": {"size": 10855, "Metadata": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getSessions: speakeasy-default-get-sessions: responses: "200": - application/json: - MediaContainer: - Metadata: [] - size: 1 + application/json: {"MediaContainer": {"size": 1, "Metadata": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getSourceConnectionInformation: speakeasy-default-get-source-connection-information: parameters: query: - source: provider://provider-identifier + source: "provider://provider-identifier" responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getStatistics: "": parameters: @@ -3359,137 +1726,53 @@ examples: Timespan: 4 responses: "200": - application/json: - MediaContainer: - Account: [] - Device: [] - StatisticsMedia: [] - size: 5497 + application/json: {"MediaContainer": {"size": 5497, "Device": [], "Account": [], "StatisticsMedia": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getTimeline: "": parameters: query: - context: home:hub.continueWatching + context: "home:hub.continueWatching" duration: 10000 hasMDE: 1 - key: /library/metadata/23409 + key: "/library/metadata/23409" playBackTime: 2000 playQueueItemID: 1 ratingKey: 23409 row: 1 - state: playing + state: "playing" time: 2000 responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getTokenByPinId: "": parameters: path: pinID: 408895 query: - X-Plex-Client-Identifier: gcgzw5rz2xovp84b4vha3a40 - X-Plex-Device: Linux - X-Plex-Platform: Chrome - X-Plex-Product: Plex Web - X-Plex-Version: 4.133.0 + X-Plex-Client-Identifier: "gcgzw5rz2xovp84b4vha3a40" + X-Plex-Device: "Linux" + X-Plex-Platform: "Chrome" + X-Plex-Product: "Plex Web" + X-Plex-Version: "4.133.0" responses: "404": - application/json: - errors: - - code: 1020 - message: Code not found or expired + application/json: {"errors": [{"code": 1020, "message": "Code not found or expired"}]} getTokenDetails: speakeasy-default-get-token-details: responses: "200": - application/json: - adsConsent: true - adsConsentReminderAt: "2019-08-24T14:15:22Z" - adsConsentSetAt: "2019-08-24T14:15:22Z" - anonymous: false - attributionPartner: null - authToken: CxoUzBTSV5hsxjTpFKaf - backupCodesCreated: false - confirmed: false - country: US - email: username@email.com - emailOnlyAuth: false - entitlements: - - '[]' - experimentalFeatures: false - friendlyName: friendlyUsername - guest: false - hasPassword: true - home: false - homeAdmin: false - homeSize: 1 - id: 13692262 - joinedAt: 1556281940 - locale: null - mailingListActive: false - mailingListStatus: active - maxHomeSize: 15 - pin: string - profile: - autoSelectAudio: true - autoSelectSubtitle: 1 - defaultAudioLanguage: ja - defaultSubtitleAccessibility: 1 - defaultSubtitleForced: 1 - defaultSubtitleLanguage: en - mediaReviewsVisibility: 1 - watchedIndicator: 1 - protected: false - rememberExpiresAt: 1556281940 - restricted: false - roles: - - string - scrobbleTypes: "" - services: - - endpoint: https://epg.provider.plex.tv - identifier: metadata-dev - secret: string - status: online - token: DjoMtqFAGRL1uVtCyF1dKIorTbShJeqv - subscription: - active: true - features: - - Android - Dolby Vision - paymentService: string - plan: string - status: Inactive - subscribedAt: "2021-04-12T18:21:12Z" - subscriptionDescription: string - subscriptions: - - active: true - features: - - Android - Dolby Vision - paymentService: string - plan: string - status: Inactive - subscribedAt: "2021-04-12T18:21:12Z" - thumb: https://plex.tv/users/a4f43c1ebfde43a5/avatar?c=8372075101 - title: UsernameTitle - twoFactorEnabled: false - username: Username - uuid: dae343c1f45beb4f + application/json: {"adsConsent": true, "adsConsentReminderAt": "2019-08-24T14:15:22Z", "adsConsentSetAt": "2019-08-24T14:15:22Z", "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": null, "mailingListActive": false, "mailingListStatus": "active", "maxHomeSize": 15, "pin": "string", "profile": {"autoSelectAudio": true, "defaultAudioLanguage": "ja", "defaultSubtitleLanguage": "en", "autoSelectSubtitle": 1, "defaultSubtitleAccessibility": 1, "defaultSubtitleForced": 1, "watchedIndicator": 1, "mediaReviewsVisibility": 1}, "protected": false, "rememberExpiresAt": 1556281940, "restricted": false, "roles": ["string"], "scrobbleTypes": "", "services": [{"identifier": "metadata-dev", "endpoint": "https://epg.provider.plex.tv", "token": "DjoMtqFAGRL1uVtCyF1dKIorTbShJeqv", "secret": "string", "status": "online"}], "subscription": {"features": ["Android - Dolby Vision"], "active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive", "paymentService": "string", "plan": "string"}, "subscriptionDescription": "string", "subscriptions": [{"features": ["Android - Dolby Vision"], "active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive", "paymentService": "string", "plan": "string"}], "thumb": "https://plex.tv/users/a4f43c1ebfde43a5/avatar?c=8372075101", "title": "UsernameTitle", "twoFactorEnabled": false, "username": "Username", "uuid": "dae343c1f45beb4f", "attributionPartner": null} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getTopWatchedContent: "": parameters: @@ -3498,163 +1781,70 @@ examples: type: 2 responses: "200": - application/json: - MediaContainer: - Metadata: [] - allowSync: true - identifier: com.plexapp.plugins.library - mediaTagPrefix: /system/bundle/media/flags/ - mediaTagVersion: 1698860922 - size: 1 + application/json: {"MediaContainer": {"size": 1, "allowSync": true, "identifier": "com.plexapp.plugins.library", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1698860922, "Metadata": []}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getTranscodeSessions: speakeasy-default-get-transcode-sessions: responses: "200": - application/json: - MediaContainer: - TranscodeSession: - - audioChannels: 1 - audioCodec: opus - audioDecision: transcode - complete: false - container: mkv - context: streaming - duration: 1445695 - error: false - key: vv3i2q2lax92qlzul1hbd4bx - maxOffsetAvailable: 29.53 - minOffsetAvailable: 3.003000020980835 - progress: 1.7999999523162842 - protocol: http - remaining: 53 - size: -22 - sourceAudioCodec: aac - sourceVideoCodec: h264 - speed: 25.100000381469727 - subtitleDecision: burn - throttled: false - timeStamp: 1.7058958054919229e+09 - transcodeHwRequested: true - videoCodec: h264 - videoDecision: transcode - size: 1 + application/json: {"MediaContainer": {"size": 1, "TranscodeSession": [{"key": "vv3i2q2lax92qlzul1hbd4bx", "throttled": false, "complete": false, "progress": 1.7999999523162842, "size": -22, "speed": 25.100000381469727, "error": false, "duration": 1445695, "remaining": 53, "context": "streaming", "sourceVideoCodec": "h264", "sourceAudioCodec": "aac", "videoDecision": "transcode", "audioDecision": "transcode", "subtitleDecision": "burn", "protocol": "http", "container": "mkv", "videoCodec": "h264", "audioCodec": "opus", "audioChannels": 1, "transcodeHwRequested": true, "timeStamp": 1705895805.4919229, "maxOffsetAvailable": 29.53, "minOffsetAvailable": 3.003000020980835}]}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getTransientToken: speakeasy-default-get-transient-token: parameters: query: - scope: all - type: delegation + scope: "all" + type: "delegation" responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getUpdateStatus: speakeasy-default-get-update-status: responses: "200": - application/json: - MediaContainer: - Release: - - added: |- - (PLEASE NOTE) This version makes changes to the database which will make it compatible only with server versions 1.31.2 or higher (released March 14). You will not be able to use your database on Plex Media Server versions lower than this after this update. Please also be patient when updating to this version if you have a very large database and allow the upgrade process to finish. - (Collections) Items added to a collection from the item context menu will now lock the collection field on the items (#12793) - (Music) Store track genres and add filtering options (#14653) - (Music) Support ID3v2.4 null-separated tags for genres and release type (#14653) - (View History) No longer create a view history entry for items marked as played (#10888) - (Web) Updated to 4.118.0 - downloadURL: https://plex.tv/downloads/latest/5?channel=8&build=linux-x86_64&distro=redhat&X-Plex-Token=xxxxxxxxxxxxxxxxxxxx - fixed: |- - (Agents) Changing a 'Other Videos' type library to the modern movie agent would fail (#14483) - (Agents) It is possible that agents are not initialised during startup on rare occasions (#14654) - (Agents) Remove the legacy OpenSubtitles agent which is no longer supported upstream (#14667) - (Collection) Server could become unresponsive when collection membership changes (#14612) - (DVR) Previously watched recordings could be deleted without being watched again (#13779) - (Libraries) When performing fix match on items from certain music libraries the language would default to Arabic (#14501) - (Library) The Content Rating not equal to None filter does not work (#14620) - (Search) Album search results could contain all the album's tracks too (#14486) - (Subtitles) In some circumstances, sidecar subtitles can show up for media when they're no longer available (#14674) - (Transcoder) HW encoding would fail on devices with no rate control (#14222) - (Transcoder) Software transcoding on Ubuntu could cause unexpected behavior (#14605) - key: https://plex.tv/updater/releases/5136 - state: notify - version: 1.40.0.7775-456fbaf97 - canInstall: false - checkedAt: 1705801232 - downloadURL: https://plex.tv/downloads/latest/5?channel=8&build=linux-x86_64&distro=redhat&X-Plex-Token=xxxxxxxxxxxxxxxxxxxx - size: 1 - status: 0 + application/json: {"MediaContainer": {"size": 1, "canInstall": false, "checkedAt": 1705801232, "downloadURL": "https://plex.tv/downloads/latest/5?channel=8&build=linux-x86_64&distro=redhat&X-Plex-Token=xxxxxxxxxxxxxxxxxxxx", "status": 0, "Release": [{"key": "https://plex.tv/updater/releases/5136", "version": "1.40.0.7775-456fbaf97", "added": "(PLEASE NOTE) This version makes changes to the database which will make it compatible only with server versions 1.31.2 or higher (released March 14). You will not be able to use your database on Plex Media Server versions lower than this after this update. Please also be patient when updating to this version if you have a very large database and allow the upgrade process to finish.\n(Collections) Items added to a collection from the item context menu will now lock the collection field on the items (#12793)\n(Music) Store track genres and add filtering options (#14653)\n(Music) Support ID3v2.4 null-separated tags for genres and release type (#14653)\n(View History) No longer create a view history entry for items marked as played (#10888)\n(Web) Updated to 4.118.0", "fixed": "(Agents) Changing a 'Other Videos' type library to the modern movie agent would fail (#14483)\n(Agents) It is possible that agents are not initialised during startup on rare occasions (#14654)\n(Agents) Remove the legacy OpenSubtitles agent which is no longer supported upstream (#14667)\n(Collection) Server could become unresponsive when collection membership changes (#14612)\n(DVR) Previously watched recordings could be deleted without being watched again (#13779)\n(Libraries) When performing fix match on items from certain music libraries the language would default to Arabic (#14501)\n(Library) The Content Rating not equal to None filter does not work (#14620)\n(Search) Album search results could contain all the album's tracks too (#14486)\n(Subtitles) In some circumstances, sidecar subtitles can show up for media when they're no longer available (#14674)\n(Transcoder) HW encoding would fail on devices with no rate control (#14222)\n(Transcoder) Software transcoding on Ubuntu could cause unexpected behavior (#14605)", "downloadURL": "https://plex.tv/downloads/latest/5?channel=8&build=linux-x86_64&distro=redhat&X-Plex-Token=xxxxxxxxxxxxxxxxxxxx", "state": "notify"}]}} "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} getUserFriends: speakeasy-default-get-user-friends: responses: "200": - application/json: - - email: username@email.com - friendlyName: exampleUser - home: true - id: 0 - restricted: false - sharedServers: [] - sharedSources: [] - status: accepted - thumb: https://plex.tv/users/7d1916e0d8f6e76b/avatar?c=1694481578 - title: username123 - username: username123 - uuid: 7d1916e0d8f6e76b + application/json: [{"email": "username@email.com", "friendlyName": "exampleUser", "home": true, "id": 0, "restricted": false, "sharedServers": [], "sharedSources": [], "status": "accepted", "thumb": "https://plex.tv/users/7d1916e0d8f6e76b/avatar?c=1694481578", "title": "username123", "username": "username123", "uuid": "7d1916e0d8f6e76b"}] "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} logLine: speakeasy-default-log-line: parameters: query: level: 3 - message: Test log message - source: Postman + message: "Test log message" + source: "Postman" responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} logMultiLine: speakeasy-default-log-multi-line: requestBody: - text/plain: |- - level=4&message=Test%20message%201&source=postman - level=3&message=Test%20message%202&source=postman - level=1&message=Test%20message%203&source=postman + text/plain: "level=4&message=Test%20message%201&source=postman\nlevel=3&message=Test%20message%202&source=postman\nlevel=1&message=Test%20message%203&source=postman" responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} markPlayed: speakeasy-default-mark-played: parameters: @@ -3662,11 +1852,9 @@ examples: key: 59398 responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} markUnplayed: speakeasy-default-mark-unplayed: parameters: @@ -3674,157 +1862,49 @@ examples: key: 59398 responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} performSearch: speakeasy-default-perform-search: parameters: query: limit: 5 - query: dylan + query: "dylan" responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} performVoiceSearch: speakeasy-default-perform-voice-search: parameters: query: limit: 5 - query: dead+poop + query: "dead+poop" responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} post-users-sign-in-data: "": parameters: query: - X-Plex-Client-Identifier: gcgzw5rz2xovp84b4vha3a40 - X-Plex-Device: Linux - X-Plex-Platform: Chrome - X-Plex-Product: Plex Web - X-Plex-Version: 4.133.0 + X-Plex-Client-Identifier: "gcgzw5rz2xovp84b4vha3a40" + X-Plex-Device: "Linux" + X-Plex-Platform: "Chrome" + X-Plex-Product: "Plex Web" + X-Plex-Version: "4.133.0" requestBody: - application/x-www-form-urlencoded: - login: username@email.com - password: password123 - verificationCode: "123456" + application/x-www-form-urlencoded: {"login": "username@email.com", "password": "password123", "verificationCode": "123456"} responses: "201": - application/json: - adsConsent: true - adsConsentReminderAt: "2019-08-24T14:15:22Z" - adsConsentSetAt: "2019-08-24T14:15:22Z" - anonymous: false - attributionPartner: null - authToken: CxoUzBTSV5hsxjTpFKaf - backupCodesCreated: false - confirmed: false - country: US - email: username@email.com - emailOnlyAuth: false - entitlements: [] - experimentalFeatures: false - friendlyName: friendlyUsername - guest: false - hasPassword: true - home: false - homeAdmin: false - homeSize: 1 - id: 13692262 - joinedAt: 1721154902 - locale: null - mailingListActive: false - mailingListStatus: unsubscribed - maxHomeSize: 15 - pastSubscriptions: - - billing: - paymentMethodId: 481656 - canConvert: "0" - canDowngrade: "0" - canReactivate: "0" - canUpgrade: "0" - canceled: "0" - endsAt: "1556281940" - gracePeriod: "0" - id: string - mode: string - onHold: "0" - renewsAt: string - state: ended - transfer: string - type: plexpass - pin: string - profile: - autoSelectAudio: true - autoSelectSubtitle: 1 - defaultAudioLanguage: ja - defaultSubtitleAccessibility: 1 - defaultSubtitleForced: 1 - defaultSubtitleLanguage: en - mediaReviewsVisibility: 1 - watchedIndicator: 1 - protected: false - rememberExpiresAt: 1722364046 - restricted: false - roles: - - string - scrobbleTypes: "" - services: - - endpoint: https://epg.provider.plex.tv - identifier: metadata-dev - secret: string - status: online - token: DjoMtqFAGRL1uVtCyF1dKIorTbShJeqv - subscription: - active: true - features: - - Android - Dolby Vision - paymentService: string - plan: string - status: Inactive - subscribedAt: "2021-04-12T18:21:12Z" - subscriptionDescription: string - subscriptions: - - active: true - features: - - Android - Dolby Vision - paymentService: string - plan: string - status: Inactive - subscribedAt: "2021-04-12T18:21:12Z" - thumb: https://plex.tv/users/a4f43c1ebfde43a5/avatar?c=8372075101 - title: UsernameTitle - trials: - - {} - twoFactorEnabled: false - username: Username - uuid: dae343c1f45beb4f + application/json: {"adsConsent": true, "adsConsentReminderAt": "2019-08-24T14:15:22Z", "adsConsentSetAt": "2019-08-24T14:15:22Z", "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": 1721154902, "locale": null, "mailingListActive": false, "mailingListStatus": "unsubscribed", "maxHomeSize": 15, "pin": "string", "profile": {"autoSelectAudio": true, "defaultAudioLanguage": "ja", "defaultSubtitleLanguage": "en", "autoSelectSubtitle": 1, "defaultSubtitleAccessibility": 1, "defaultSubtitleForced": 1, "watchedIndicator": 1, "mediaReviewsVisibility": 1}, "protected": false, "rememberExpiresAt": 1722364046, "restricted": false, "roles": ["string"], "scrobbleTypes": "", "services": [{"identifier": "metadata-dev", "endpoint": "https://epg.provider.plex.tv", "token": "DjoMtqFAGRL1uVtCyF1dKIorTbShJeqv", "secret": "string", "status": "online"}], "subscription": {"features": ["Android - Dolby Vision"], "active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive", "paymentService": "string", "plan": "string"}, "subscriptionDescription": "string", "subscriptions": [{"features": ["Android - Dolby Vision"], "active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive", "paymentService": "string", "plan": "string"}], "thumb": "https://plex.tv/users/a4f43c1ebfde43a5/avatar?c=8372075101", "title": "UsernameTitle", "twoFactorEnabled": false, "username": "Username", "uuid": "dae343c1f45beb4f", "attributionPartner": null, "pastSubscriptions": [{"id": "string", "mode": "string", "renewsAt": "string", "endsAt": "1556281940", "canceled": "0", "gracePeriod": "0", "onHold": "0", "canReactivate": "0", "canUpgrade": "0", "canDowngrade": "0", "canConvert": "0", "type": "plexpass", "transfer": "string", "state": "ended", "billing": {"paymentMethodId": 481656}}], "trials": [{}]} "400": - application/json: - errors: - - code: 1000 - message: X-Plex-Client-Identifier is missing - status: 400 - - code: 1000 - message: X-Plex-Client-Identifier is missing - status: 400 - - code: 1000 - message: X-Plex-Client-Identifier is missing - status: 400 + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": - application/json: - errors: [] + application/json: {"errors": []} speakeasy-default-post-users-sign-in-data: parameters: query: @@ -3936,23 +2016,19 @@ examples: speakeasy-default-start-all-tasks: responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} startTask: speakeasy-default-start-task: parameters: path: - taskName: CleanOldBundles + taskName: "CleanOldBundles" responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} startUniversalTranscode: "": parameters: @@ -3964,69 +2040,59 @@ examples: directStream: 0 fastSeek: 0 hasMDE: 1 - location: lan + location: "lan" mediaBufferSize: 102400 mediaIndex: 0 partIndex: 0 - path: /library/metadata/23409 - protocol: hls - session: zvcage8b7rkioqcm8f4uns4c - subtites: burn + path: "/library/metadata/23409" + protocol: "hls" + session: "zvcage8b7rkioqcm8f4uns4c" + subtites: "burn" subtitleSize: 100 responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} stopAllTasks: speakeasy-default-stop-all-tasks: responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} stopTask: speakeasy-default-stop-task: parameters: path: - taskName: BackupDatabase + taskName: "BackupDatabase" responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} stopTranscodeSession: speakeasy-default-stop-transcode-session: parameters: path: - sessionKey: zz7llzqlx8w9vnrsbnwhbmep + sessionKey: "zz7llzqlx8w9vnrsbnwhbmep" responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} updatePlayProgress: "": parameters: query: - key: - state: played + key: "" + state: "played" time: 90000 responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} updatePlaylist: speakeasy-default-update-playlist: parameters: @@ -4035,22 +2101,18 @@ examples: query: {} responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} uploadPlaylist: speakeasy-default-upload-playlist: parameters: query: force: 0 - path: /home/barkley/playlist.m3u + path: "/home/barkley/playlist.m3u" sectionID: 1 responses: "400": - application/json: - errors: [] + application/json: {"errors": []} "401": - application/json: - errors: [] + application/json: {"errors": []} diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 30c1909..4938988 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -12,7 +12,7 @@ generation: auth: oAuth2ClientCredentialsEnabled: true swift: - version: 0.8.4 + version: 0.8.5 author: LukeHagar description: Swift Client SDK Generated by Speakeasy imports: diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index e166031..1a2e948 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -1,4 +1,4 @@ -speakeasyVersion: 1.322.3 +speakeasyVersion: 1.405.6 sources: my-source: sourceNamespace: my-source @@ -7,12 +7,21 @@ sources: tags: - latest - main + plexapi: + sourceNamespace: plexapi + sourceRevisionDigest: sha256:c52cde0b8d51e160f7b9f1a3d3ea4dbb1aca6d5caad714e549201fb757fadd57 + sourceBlobDigest: sha256:f417b03ff71356808554313f24c3d06d670474bf51bc9a0631de1ad49c13a361 + tags: + - latest + - main targets: plexswift: source: plexapi + sourceNamespace: plexapi + sourceRevisionDigest: sha256:c52cde0b8d51e160f7b9f1a3d3ea4dbb1aca6d5caad714e549201fb757fadd57 + sourceBlobDigest: sha256:f417b03ff71356808554313f24c3d06d670474bf51bc9a0631de1ad49c13a361 codeSamplesNamespace: code-samples-swift-plexswift - codeSamplesRevisionDigest: sha256:20106c25ec86489069579bcd149cfca15f0066540312450af1e531dce819d6db - outLocation: /github/workspace/repo + codeSamplesRevisionDigest: sha256:e46cddd9caae008aee2ea7b63b667fea012731501716d7a7e36f646135ab9e20 workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/README.md b/README.md index fa096e2..b1ae1a4 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ You can add `plexswift` to your project directly in Xcode `(File > Add Packages. ```bash dependencies: [ - .package(url: "https://github.com/LukeHagar/plexswift.git", .upToNextMajor(from: "0.8.4")) + .package(url: "https://github.com/LukeHagar/plexswift.git", .upToNextMajor(from: "0.8.5")) ] ``` @@ -285,10 +285,7 @@ The following global parameters are available. | Name | Type | Required | Description | | ---- | ---- |:--------:| ----------- | -| clientID | String | | The unique identifier for the client application -This is used to track the client application and its usage -(UUID, serial number, or other number unique per device) - | +| clientID | String | | The unique identifier for the client application. This is used to track the client application and its usage. (UUID, serial number, or other number unique per device) | | clientName | String | | The clientName parameter. | | clientVersion | String | | The clientVersion parameter. | | clientPlatform | String | | The clientPlatform parameter. | diff --git a/RELEASES.md b/RELEASES.md index 6bbfaad..7b0cd09 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -722,4 +722,14 @@ Based on: ### Generated - [swift v0.8.4] . ### Releases -- [Swift Package Manager v0.8.4] https://github.com/LukeHagar/plexswift/releases/tag/v0.8.4 - . \ No newline at end of file +- [Swift Package Manager v0.8.4] https://github.com/LukeHagar/plexswift/releases/tag/v0.8.4 - . + +## 2024-10-01 00:08:59 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.405.6 (2.428.1) https://github.com/speakeasy-api/speakeasy +### Generated +- [swift v0.8.5] . +### Releases +- [Swift Package Manager v0.8.5] https://github.com/LukeHagar/plexswift/releases/tag/v0.8.5 - . \ No newline at end of file diff --git a/Sources/Plexswift/configuration/GlobalParameters.swift b/Sources/Plexswift/configuration/GlobalParameters.swift index fb888b2..3764d1c 100644 --- a/Sources/Plexswift/configuration/GlobalParameters.swift +++ b/Sources/Plexswift/configuration/GlobalParameters.swift @@ -14,10 +14,7 @@ public struct GlobalParameters { /// Creates an object with the given parameters /// - /// - Parameter clientID: The unique identifier for the client application - /// This is used to track the client application and its usage - /// (UUID, serial number, or other number unique per device) - /// + /// - Parameter clientID: The unique identifier for the client application. This is used to track the client application and its usage. (UUID, serial number, or other number unique per device) /// public init( clientID: String? = nil, diff --git a/Sources/Plexswift/models/operations/GetPinRequest.swift b/Sources/Plexswift/models/operations/GetPinRequest.swift index 9002c97..c59c390 100644 --- a/Sources/Plexswift/models/operations/GetPinRequest.swift +++ b/Sources/Plexswift/models/operations/GetPinRequest.swift @@ -5,10 +5,7 @@ import Foundation extension Operations { /// A model object public struct GetPinRequest: APIValue { - /// The unique identifier for the client application - /// This is used to track the client application and its usage - /// (UUID, serial number, or other number unique per device) - /// + /// The unique identifier for the client application. This is used to track the client application and its usage. (UUID, serial number, or other number unique per device) public let clientID: String? public let clientName: String? public let clientPlatform: String? @@ -22,10 +19,7 @@ extension Operations { /// Creates an object with the specified parameters /// - /// - Parameter clientID: The unique identifier for the client application - /// This is used to track the client application and its usage - /// (UUID, serial number, or other number unique per device) - /// + /// - Parameter clientID: The unique identifier for the client application. This is used to track the client application and its usage. (UUID, serial number, or other number unique per device) /// - Parameter strong: Determines the kind of code returned by the API call /// Strong codes are used for Pin authentication flows /// Non-Strong codes are used for `Plex.tv/link` diff --git a/Sources/Plexswift/models/operations/GetServerResourcesRequest.swift b/Sources/Plexswift/models/operations/GetServerResourcesRequest.swift index c306b5c..a00874c 100644 --- a/Sources/Plexswift/models/operations/GetServerResourcesRequest.swift +++ b/Sources/Plexswift/models/operations/GetServerResourcesRequest.swift @@ -5,10 +5,7 @@ import Foundation extension Operations { /// A model object public struct GetServerResourcesRequest: APIValue { - /// The unique identifier for the client application - /// This is used to track the client application and its usage - /// (UUID, serial number, or other number unique per device) - /// + /// The unique identifier for the client application. This is used to track the client application and its usage. (UUID, serial number, or other number unique per device) public let clientID: String? /// Include Https entries in the results public let includeHttps: Operations.IncludeHttps? @@ -21,10 +18,7 @@ extension Operations { /// Creates an object with the specified parameters /// - /// - Parameter clientID: The unique identifier for the client application - /// This is used to track the client application and its usage - /// (UUID, serial number, or other number unique per device) - /// + /// - Parameter clientID: The unique identifier for the client application. This is used to track the client application and its usage. (UUID, serial number, or other number unique per device) /// - Parameter includeHttps: Include Https entries in the results /// - Parameter includeIPv6: Include IPv6 entries in the results /// - Parameter includeRelay: Include Relay addresses in the results diff --git a/Sources/Plexswift/models/operations/GetTokenByPinIdRequest.swift b/Sources/Plexswift/models/operations/GetTokenByPinIdRequest.swift index 9026ed1..7fdcb85 100644 --- a/Sources/Plexswift/models/operations/GetTokenByPinIdRequest.swift +++ b/Sources/Plexswift/models/operations/GetTokenByPinIdRequest.swift @@ -7,10 +7,7 @@ extension Operations { public struct GetTokenByPinIdRequest: APIValue { /// The PinID to retrieve an access token for public let pinID: Int - /// The unique identifier for the client application - /// This is used to track the client application and its usage - /// (UUID, serial number, or other number unique per device) - /// + /// The unique identifier for the client application. This is used to track the client application and its usage. (UUID, serial number, or other number unique per device) public let clientID: String? public let clientName: String? public let clientPlatform: String? @@ -20,10 +17,7 @@ extension Operations { /// Creates an object with the specified parameters /// /// - Parameter pinID: The PinID to retrieve an access token for - /// - Parameter clientID: The unique identifier for the client application - /// This is used to track the client application and its usage - /// (UUID, serial number, or other number unique per device) - /// + /// - Parameter clientID: The unique identifier for the client application. This is used to track the client application and its usage. (UUID, serial number, or other number unique per device) /// public init(pinID: Int, clientID: String? = nil, clientName: String? = nil, clientPlatform: String? = nil, clientVersion: String? = nil, deviceName: String? = nil) { self.pinID = pinID diff --git a/Sources/Plexswift/models/operations/PostUsersSignInDataRequest.swift b/Sources/Plexswift/models/operations/PostUsersSignInDataRequest.swift index da888b6..71395ea 100644 --- a/Sources/Plexswift/models/operations/PostUsersSignInDataRequest.swift +++ b/Sources/Plexswift/models/operations/PostUsersSignInDataRequest.swift @@ -5,10 +5,7 @@ import Foundation extension Operations { /// A model object public struct PostUsersSignInDataRequest: APIValue { - /// The unique identifier for the client application - /// This is used to track the client application and its usage - /// (UUID, serial number, or other number unique per device) - /// + /// The unique identifier for the client application. This is used to track the client application and its usage. (UUID, serial number, or other number unique per device) public let clientID: String? public let clientName: String? public let clientPlatform: String? @@ -19,10 +16,7 @@ extension Operations { /// Creates an object with the specified parameters /// - /// - Parameter clientID: The unique identifier for the client application - /// This is used to track the client application and its usage - /// (UUID, serial number, or other number unique per device) - /// + /// - Parameter clientID: The unique identifier for the client application. This is used to track the client application and its usage. (UUID, serial number, or other number unique per device) /// - Parameter requestBody: Login credentials /// public init(clientID: String? = nil, clientName: String? = nil, clientPlatform: String? = nil, clientVersion: String? = nil, deviceName: String? = nil, requestBody: Operations.PostUsersSignInDataRequestBody? = nil) { diff --git a/Sources/plexswift/internal/client/URLRequestBuilder.swift b/Sources/plexswift/internal/client/URLRequestBuilder.swift index 46fa798..ad58c90 100644 --- a/Sources/plexswift/internal/client/URLRequestBuilder.swift +++ b/Sources/plexswift/internal/client/URLRequestBuilder.swift @@ -62,7 +62,7 @@ final class URLRequestBuilder: URLRequestConfiguration { urlRequest.setValue(contentType, forHTTPHeaderField: "Content-Type") } - urlRequest.setValue("speakeasy-sdk/swift 0.8.4 2.426.2 0.0.3 plexswift", forHTTPHeaderField: telemetryHeader.headerName) + urlRequest.setValue("speakeasy-sdk/swift 0.8.5 2.428.1 0.0.3 plexswift", forHTTPHeaderField: telemetryHeader.headerName) addSecurityParameters(to: &urlRequest) diff --git a/codeSamples.yaml b/codeSamples.yaml index c440249..b9ca98f 100644 --- a/codeSamples.yaml +++ b/codeSamples.yaml @@ -3,24 +3,23 @@ info: title: CodeSamples overlay for swift target version: 0.0.0 actions: - - target: $["paths"]["/transcode/sessions/{sessionKey}"]["delete"] + - target: $["paths"]["/"]["get"] update: x-codeSamples: - lang: swift - label: stopTranscodeSession + label: getServerCapabilities source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.sessions.stopTranscodeSession( - request: Operations.StopTranscodeSessionRequest( - sessionKey: "zz7llzqlx8w9vnrsbnwhbmep" - ) - ) + let response = try await client.server.getServerCapabilities() switch response.data { + case .object(let object): + // Handle response + break case .badRequest(let badRequest): // Handle response break @@ -31,20 +30,23 @@ actions: // Handle empty response break } - - target: $["paths"]["/butler"]["delete"] + - target: $["paths"]["/:/prefs"]["get"] update: x-codeSamples: - lang: swift - label: stopAllTasks + label: getServerPreferences source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.butler.stopAllTasks() + let response = try await client.server.getServerPreferences() switch response.data { + case .object(let object): + // Handle response + break case .badRequest(let badRequest): // Handle response break @@ -55,23 +57,30 @@ actions: // Handle empty response break } - - target: $["paths"]["/friends"]["get"] + - target: $["paths"]["/:/progress"]["post"] update: x-codeSamples: - lang: swift - label: getUserFriends + label: updatePlayProgress + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.media.updatePlayProgress(\n request: Operations.UpdatePlayProgressRequest(\n key: \"\", \n state: \"played\", \n time: 90000\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/:/scrobble"]["get"] + update: + x-codeSamples: + - lang: swift + label: markPlayed source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.plex.getUserFriends() + let response = try await client.media.markPlayed( + request: Operations.MarkPlayedRequest( + key: 59398 + ) + ) switch response.data { - case .friends(let friends): - // Handle response - break case .badRequest(let badRequest): // Handle response break @@ -82,47 +91,30 @@ actions: // Handle empty response break } - - target: $["paths"]["/hubs/sections/{sectionId}"]["get"] - update: - x-codeSamples: - - lang: swift - label: getLibraryHubs - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.hubs.getLibraryHubs(\n request: Operations.GetLibraryHubsRequest(\n sectionId: 6728.76, \n count: 9010.22, \n onlyTransient: .zero\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/library/sections/{sectionKey}/refresh"]["get"] - update: - x-codeSamples: - - lang: swift - label: metadata - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getRefreshLibraryMetadata(\n request: Operations.GetRefreshLibraryMetadataRequest(\n sectionKey: 9518, \n force: .one\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/playlists"]["get"] - update: - x-codeSamples: - - lang: swift - label: getPlaylists - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.playlists.getPlaylists(\n request: Operations.GetPlaylistsRequest(\n playlistType: .audio, \n smart: .zero\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/playlists/{playlistID}"]["put"] + - target: $["paths"]["/:/timeline"]["get"] update: x-codeSamples: - lang: swift - label: updatePlaylist - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.playlists.updatePlaylist(\n request: Operations.UpdatePlaylistRequest(\n playlistID: 3915, \n summary: \"\", \n title: \"\"\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/myplex/account"]["get"] + label: getTimeline + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.video.getTimeline(\n request: Operations.GetTimelineRequest(\n context: \"home:hub.continueWatching\", \n duration: 10000, \n hasMDE: 1, \n key: \"/library/metadata/23409\", \n playBackTime: 2000, \n playQueueItemID: 1, \n ratingKey: 23409, \n row: 1, \n state: .playing, \n time: 2000\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/:/unscrobble"]["get"] update: x-codeSamples: - lang: swift - label: getMyPlexAccount + label: markUnplayed source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.server.getMyPlexAccount() + let response = try await client.media.markUnplayed( + request: Operations.MarkUnplayedRequest( + key: 59398 + ) + ) switch response.data { - case .object(let object): - // Handle response - break case .badRequest(let badRequest): // Handle response break @@ -133,38 +125,23 @@ actions: // Handle empty response break } - - target: $["paths"]["/library/metadata/{ratingKey}/banner"]["get"] - update: - x-codeSamples: - - lang: swift - label: image - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.media.getBannerImage(\n request: Operations.GetBannerImageRequest(\n height: 396, \n minSize: 1, \n ratingKey: 9518, \n upscale: 1, \n width: 396, \n xPlexToken: \"CV5xoxjTpFKUzBTShsaf\"\n )\n)\n\nswitch response.data {\ncase .bytes(let bytes):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/hubs"]["get"] - update: - x-codeSamples: - - lang: swift - label: getGlobalHubs - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.hubs.getGlobalHubs(\n request: Operations.GetGlobalHubsRequest(\n count: 1262.49, \n onlyTransient: .one\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/library/hashes"]["get"] - update: - x-codeSamples: - - lang: swift - label: getFileHash - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getFileHash(\n request: Operations.GetFileHashRequest(\n url: \"file://C:\\Image.png&type=13\", \n type: 4462.17\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/log/networked"]["get"] + - target: $["paths"]["/activities"]["get"] update: x-codeSamples: - lang: swift - label: enablePaperTrail + label: getServerActivities source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.log.enablePaperTrail() + let response = try await client.activities.getServerActivities() switch response.data { + case .object(let object): + // Handle response + break case .badRequest(let badRequest): // Handle response break @@ -175,27 +152,24 @@ actions: // Handle empty response break } - - target: $["paths"]["/statistics/resources"]["get"] + - target: $["paths"]["/activities/{activityUUID}"]["delete"] update: x-codeSamples: - lang: swift - label: getResourcesStatistics + label: cancelServerActivities source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.statistics.getResourcesStatistics( - request: Operations.GetResourcesStatisticsRequest( - timespan: 4 + let response = try await client.activities.cancelServerActivities( + request: Operations.CancelServerActivitiesRequest( + activityUUID: "25b71ed5-0f9d-461c-baa7-d404e9e10d3e" ) ) switch response.data { - case .object(let object): - // Handle response - break case .badRequest(let badRequest): // Handle response break @@ -206,23 +180,20 @@ actions: // Handle empty response break } - - target: $["paths"]["/geoip"]["get"] + - target: $["paths"]["/butler"]["delete"] update: x-codeSamples: - lang: swift - label: getGeoData + label: stopAllTasks source: |- import Foundation import Plexswift - let client = Client() + let client = Client(security: .accessToken("")) - let response = try await client.plex.getGeoData() + let response = try await client.butler.stopAllTasks() switch response.data { - case .geoData(let geoData): - // Handle response - break case .badRequest(let badRequest): // Handle response break @@ -233,20 +204,23 @@ actions: // Handle empty response break } - - target: $["paths"]["/log"]["post"] + - target: $["paths"]["/butler"]["get"] update: x-codeSamples: - lang: swift - label: logMultiLine + label: getButlerTasks source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.log.logMultiLine() + let response = try await client.butler.getButlerTasks() switch response.data { + case .object(let object): + // Handle response + break case .badRequest(let badRequest): // Handle response break @@ -257,39 +231,20 @@ actions: // Handle empty response break } - - target: $["paths"]["/playlists/upload"]["post"] - update: - x-codeSamples: - - lang: swift - label: uploadPlaylist - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.playlists.uploadPlaylist(\n request: Operations.UploadPlaylistRequest(\n force: .zero, \n path: \"/home/barkley/playlist.m3u\", \n sectionID: 1\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/users/signin"]["post"] - update: - x-codeSamples: - - lang: swift - label: data - source: "import Foundation\nimport Plexswift\n\nlet client = Client()\n\nlet response = try await client.authentication.postUsersSignInData(\n request: Operations.PostUsersSignInDataRequest(\n requestBody: Operations.PostUsersSignInDataRequestBody(\n login: \"username@email.com\", \n password: \"password123\", \n rememberMe: false, \n verificationCode: \"123456\"\n )\n )\n)\n\nswitch response.data {\ncase .userPlexAccount(let userPlexAccount):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/statistics/bandwidth"]["get"] + - target: $["paths"]["/butler"]["post"] update: x-codeSamples: - lang: swift - label: getBandwidthStatistics + label: startAllTasks source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.statistics.getBandwidthStatistics( - request: Operations.GetBandwidthStatisticsRequest( - timespan: 4 - ) - ) + let response = try await client.butler.startAllTasks() switch response.data { - case .object(let object): - // Handle response - break case .badRequest(let badRequest): // Handle response break @@ -300,23 +255,24 @@ actions: // Handle empty response break } - - target: $["paths"]["/library/sections"]["get"] + - target: $["paths"]["/butler/{taskName}"]["delete"] update: x-codeSamples: - lang: swift - label: libraries + label: stopTask source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.library.getAllLibraries() + let response = try await client.butler.stopTask( + request: Operations.StopTaskRequest( + taskName: .backupDatabase + ) + ) switch response.data { - case .object(let object): - // Handle response - break case .badRequest(let badRequest): // Handle response break @@ -327,20 +283,20 @@ actions: // Handle empty response break } - - target: $["paths"]["/playlists/{playlistID}"]["delete"] + - target: $["paths"]["/butler/{taskName}"]["post"] update: x-codeSamples: - lang: swift - label: deletePlaylist + label: startTask source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.playlists.deletePlaylist( - request: Operations.DeletePlaylistRequest( - playlistID: 216.22 + let response = try await client.butler.startTask( + request: Operations.StartTaskRequest( + taskName: .cleanOldBundles ) ) @@ -382,24 +338,23 @@ actions: // Handle empty response break } - - target: $["paths"]["/:/unscrobble"]["get"] + - target: $["paths"]["/companions"]["get"] update: x-codeSamples: - lang: swift - label: markUnplayed + label: getCompanionsData source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.media.markUnplayed( - request: Operations.MarkUnplayedRequest( - key: 59398 - ) - ) + let response = try await client.plex.getCompanionsData() switch response.data { + case .responseBodies(let responseBodies): + // Handle response + break case .badRequest(let badRequest): // Handle response break @@ -410,18 +365,18 @@ actions: // Handle empty response break } - - target: $["paths"]["/butler"]["get"] + - target: $["paths"]["/devices"]["get"] update: x-codeSamples: - lang: swift - label: getButlerTasks + label: getDevices source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.butler.getButlerTasks() + let response = try await client.server.getDevices() switch response.data { case .object(let object): @@ -437,21 +392,21 @@ actions: // Handle empty response break } - - target: $["paths"]["/companions"]["get"] + - target: $["paths"]["/friends"]["get"] update: x-codeSamples: - lang: swift - label: getCompanionsData + label: getUserFriends source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.plex.getCompanionsData() + let response = try await client.plex.getUserFriends() switch response.data { - case .responseBodies(let responseBodies): + case .friends(let friends): // Handle response break case .badRequest(let badRequest): @@ -464,31 +419,21 @@ actions: // Handle empty response break } - - target: $["paths"]["/resources"]["get"] - update: - x-codeSamples: - - lang: swift - label: resources - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.plex.getServerResources(\n request: Operations.GetServerResourcesRequest(\n includeHttps: .disable, \n includeIPv6: .disable, \n includeRelay: .enable\n )\n)\n\nswitch response.data {\ncase .plexDevices(let plexDevices):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/search"]["get"] + - target: $["paths"]["/geoip"]["get"] update: x-codeSamples: - lang: swift - label: getSearchResults + label: getGeoData source: |- import Foundation import Plexswift - let client = Client(security: .accessToken("")) + let client = Client() - let response = try await client.search.getSearchResults( - request: Operations.GetSearchResultsRequest( - query: "110" - ) - ) + let response = try await client.plex.getGeoData() switch response.data { - case .object(let object): + case .geoData(let geoData): // Handle response break case .badRequest(let badRequest): @@ -501,18 +446,18 @@ actions: // Handle empty response break } - - target: $["paths"]["/devices"]["get"] + - target: $["paths"]["/home"]["get"] update: x-codeSamples: - lang: swift - label: getDevices + label: getHomeData source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.server.getDevices() + let response = try await client.plex.getHomeData() switch response.data { case .object(let object): @@ -528,24 +473,25 @@ actions: // Handle empty response break } - - target: $["paths"]["/library/sections/{sectionKey}"]["delete"] + - target: $["paths"]["/hubs"]["get"] update: x-codeSamples: - lang: swift - label: deleteLibrary + label: getGlobalHubs source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.library.deleteLibrary( - request: Operations.DeleteLibraryRequest( - sectionKey: 9518 - ) + let response = try await client.hubs.getGlobalHubs( + request: Operations.GetGlobalHubsRequest() ) switch response.data { + case .object(let object): + // Handle response + break case .badRequest(let badRequest): // Handle response break @@ -556,69 +502,87 @@ actions: // Handle empty response break } - - target: $["paths"]["/security/token"]["get"] + - target: $["paths"]["/hubs/home/recentlyAdded"]["get"] update: x-codeSamples: - lang: swift - label: getTransientToken - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.authentication.getTransientToken(\n request: Operations.GetTransientTokenRequest(\n scope: .all, \n type: .delegation\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/user"]["get"] + label: added + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.hubs.getRecentlyAdded(\n request: Operations.GetRecentlyAddedRequest(\n contentDirectoryID: 470161, \n type: .tvShow, \n includeMeta: .enable, \n sectionID: 2, \n xPlexContainerSize: 50, \n xPlexContainerStart: 0\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/hubs/search"]["get"] update: x-codeSamples: - lang: swift - label: getTokenDetails - source: |- - import Foundation - import Plexswift - - let client = Client(security: .accessToken("")) + label: performSearch + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.search.performSearch(\n request: Operations.PerformSearchRequest(\n query: \"dylan\", \n limit: 5, \n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/hubs/search/voice"]["get"] + update: + x-codeSamples: + - lang: swift + label: performVoiceSearch + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.search.performVoiceSearch(\n request: Operations.PerformVoiceSearchRequest(\n query: \"dead+poop\", \n limit: 5, \n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/hubs/sections/{sectionId}"]["get"] + update: + x-codeSamples: + - lang: swift + label: getLibraryHubs + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.hubs.getLibraryHubs(\n request: Operations.GetLibraryHubsRequest(\n sectionId: 6728.76, \n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/identity"]["get"] + update: + x-codeSamples: + - lang: swift + label: identity + source: |- + import Foundation + import Plexswift - let response = try await client.authentication.getTokenDetails() + let client = Client() + + let response = try await client.server.getServerIdentity() switch response.data { - case .userPlexAccount(let userPlexAccount): - // Handle response - break - case .badRequest(let badRequest): + case .object(let object): // Handle response break - case .unauthorized(let unauthorized): + case .requestTimeout(let requestTimeout): // Handle response break case .empty: // Handle empty response break } - - target: $["paths"]["/library/sections/{sectionKey}/search"]["get"] + - target: $["paths"]["/library/all/top"]["get"] update: x-codeSamples: - lang: swift - label: library - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getSearchLibrary(\n request: Operations.GetSearchLibraryRequest(\n sectionKey: 9518, \n type: .tvShow\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/playlists/{playlistID}/items"]["put"] + label: getTopWatchedContent + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getTopWatchedContent(\n request: Operations.GetTopWatchedContentRequest(\n type: .tvShow, \n includeGuids: 1\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/library/hashes"]["get"] update: x-codeSamples: - lang: swift - label: addPlaylistContents - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.playlists.addPlaylistContents(\n request: Operations.AddPlaylistContentsRequest(\n playlistID: 8502.01, \n uri: \"server://12345/com.plexapp.plugins.library/library/metadata/1\", \n playQueueID: 123\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/updater/check"]["put"] + label: getFileHash + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getFileHash(\n request: Operations.GetFileHashRequest(\n url: \"file://C:\\Image.png&type=13\", \n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/library/metadata/{ratingKey}"]["get"] update: x-codeSamples: - lang: swift - label: checkForUpdates + label: key source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.updater.checkForUpdates( - request: Operations.CheckForUpdatesRequest( - download: .one + let response = try await client.library.getMetaDataByRatingKey( + request: Operations.GetMetaDataByRatingKeyRequest( + ratingKey: 9518 ) ) switch response.data { + case .object(let object): + // Handle response + break case .badRequest(let badRequest): // Handle response break @@ -629,36 +593,41 @@ actions: // Handle empty response break } - - target: $["paths"]["/photo/:/transcode"]["get"] + - target: $["paths"]["/library/metadata/{ratingKey}/banner"]["get"] update: x-codeSamples: - lang: swift - label: getResizedPhoto - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.server.getResizedPhoto(\n request: Operations.GetResizedPhotoRequest(\n blur: 20, \n height: 165, \n minSize: .one, \n opacity: 96541, \n upscale: .zero, \n url: \"/library/metadata/49564/thumb/1654258204\", \n width: 110\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/:/progress"]["post"] + label: image + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.media.getBannerImage(\n request: Operations.GetBannerImageRequest(\n height: 396, \n minSize: 1, \n ratingKey: 9518, \n upscale: 1, \n width: 396, \n xPlexToken: \"CV5xoxjTpFKUzBTShsaf\"\n )\n)\n\nswitch response.data {\ncase .bytes(let bytes):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/library/metadata/{ratingKey}/children"]["get"] update: x-codeSamples: - lang: swift - label: updatePlayProgress - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.media.updatePlayProgress(\n request: Operations.UpdatePlayProgressRequest(\n key: \"\", \n state: \"played\", \n time: 90000\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/butler/{taskName}"]["post"] + label: getMetadataChildren + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getMetadataChildren(\n request: Operations.GetMetadataChildrenRequest(\n ratingKey: 1539.15, \n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/library/metadata/{ratingKey}/thumb"]["get"] update: x-codeSamples: - lang: swift - label: startTask + label: image + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.media.getThumbImage(\n request: Operations.GetThumbImageRequest(\n height: 396, \n minSize: 1, \n ratingKey: 9518, \n upscale: 1, \n width: 396, \n xPlexToken: \"CV5xoxjTpFKUzBTShsaf\"\n )\n)\n\nswitch response.data {\ncase .bytes(let bytes):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/library/onDeck"]["get"] + update: + x-codeSamples: + - lang: swift + label: getOnDeck source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.butler.startTask( - request: Operations.StartTaskRequest( - taskName: .cleanOldBundles - ) - ) + let response = try await client.library.getOnDeck() switch response.data { + case .object(let object): + // Handle response + break case .badRequest(let badRequest): // Handle response break @@ -669,24 +638,29 @@ actions: // Handle empty response break } - - target: $["paths"]["/security/resources"]["get"] + - target: $["paths"]["/library/recentlyAdded"]["get"] update: x-codeSamples: - lang: swift - label: getSourceConnectionInformation + label: library + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getRecentlyAddedLibrary(\n request: Operations.GetRecentlyAddedLibraryRequest(\n type: .tvShow, \n contentDirectoryID: 2, \n includeMeta: .enable, \n pinnedContentDirectoryID: [\n 3,\n 5,\n 7,\n 13,\n 12,\n 1,\n 6,\n 14,\n 2,\n 10,\n 16,\n 17,\n ], \n sectionID: 2, \n xPlexContainerSize: 50, \n xPlexContainerStart: 0\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/library/sections"]["get"] + update: + x-codeSamples: + - lang: swift + label: libraries source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.authentication.getSourceConnectionInformation( - request: Operations.GetSourceConnectionInformationRequest( - source: "server://client-identifier" - ) - ) + let response = try await client.library.getAllLibraries() switch response.data { + case .object(let object): + // Handle response + break case .badRequest(let badRequest): // Handle response break @@ -697,23 +671,30 @@ actions: // Handle empty response break } - - target: $["paths"]["/updater/status"]["get"] + - target: $["paths"]["/library/sections/watchlist/{filter}"]["get"] update: x-codeSamples: - lang: swift - label: getUpdateStatus + label: list + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.watchlist.getWatchList(\n request: Operations.GetWatchListRequest(\n filter: .available, \n xPlexToken: \"CV5xoxjTpFKUzBTShsaf\", \n xPlexContainerSize: 50, \n xPlexContainerStart: 0\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/library/sections/{sectionKey}"]["delete"] + update: + x-codeSamples: + - lang: swift + label: deleteLibrary source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.updater.getUpdateStatus() + let response = try await client.library.deleteLibrary( + request: Operations.DeleteLibraryRequest( + sectionKey: 9518 + ) + ) switch response.data { - case .object(let object): - // Handle response - break case .badRequest(let badRequest): // Handle response break @@ -724,35 +705,50 @@ actions: // Handle empty response break } - - target: $["paths"]["/library/metadata/{ratingKey}/thumb"]["get"] + - target: $["paths"]["/library/sections/{sectionKey}"]["get"] update: x-codeSamples: - lang: swift - label: image - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.media.getThumbImage(\n request: Operations.GetThumbImageRequest(\n height: 396, \n minSize: 1, \n ratingKey: 9518, \n upscale: 1, \n width: 396, \n xPlexToken: \"CV5xoxjTpFKUzBTShsaf\"\n )\n)\n\nswitch response.data {\ncase .bytes(let bytes):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/:/timeline"]["get"] + label: details + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getLibraryDetails(\n request: Operations.GetLibraryDetailsRequest(\n sectionKey: 9518, \n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/library/sections/{sectionKey}/refresh"]["get"] update: x-codeSamples: - lang: swift - label: getTimeline - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.video.getTimeline(\n request: Operations.GetTimelineRequest(\n context: \"home:hub.continueWatching\", \n duration: 10000, \n hasMDE: 1, \n key: \"/library/metadata/23409\", \n playBackTime: 2000, \n playQueueItemID: 1, \n ratingKey: 23409, \n row: 1, \n state: .playing, \n time: 2000\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/home"]["get"] + label: metadata + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getRefreshLibraryMetadata(\n request: Operations.GetRefreshLibraryMetadataRequest(\n sectionKey: 9518, \n force: .one\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/library/sections/{sectionKey}/search"]["get"] update: x-codeSamples: - lang: swift - label: getHomeData + label: library + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getSearchLibrary(\n request: Operations.GetSearchLibraryRequest(\n sectionKey: 9518, \n type: .tvShow\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/library/sections/{sectionKey}/{tag}"]["get"] + update: + x-codeSamples: + - lang: swift + label: items + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getLibraryItems(\n request: Operations.GetLibraryItemsRequest(\n sectionKey: 9518, \n tag: .edition, \n includeGuids: .enable, \n includeMeta: .enable, \n type: .tvShow, \n xPlexContainerSize: 50, \n xPlexContainerStart: 0\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/log"]["get"] + update: + x-codeSamples: + - lang: swift + label: logLine + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.log.logLine(\n request: Operations.LogLineRequest(\n level: .three, \n message: \"Test log message\", \n source: \"Postman\"\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/log"]["post"] + update: + x-codeSamples: + - lang: swift + label: logMultiLine source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.plex.getHomeData() + let response = try await client.log.logMultiLine() switch response.data { - case .object(let object): - // Handle response - break case .badRequest(let badRequest): // Handle response break @@ -763,35 +759,20 @@ actions: // Handle empty response break } - - target: $["paths"]["/hubs/home/recentlyAdded"]["get"] - update: - x-codeSamples: - - lang: swift - label: added - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.hubs.getRecentlyAdded(\n request: Operations.GetRecentlyAddedRequest(\n contentDirectoryID: 470161, \n type: .episode, \n includeMeta: .enable, \n pinnedContentDirectoryID: \"\", \n sectionID: 2, \n xPlexContainerSize: 50, \n xPlexContainerStart: 0\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/playlists"]["post"] - update: - x-codeSamples: - - lang: swift - label: createPlaylist - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.playlists.createPlaylist(\n request: Operations.CreatePlaylistRequest(\n smart: .one, \n title: \"\", \n type: .photo, \n uri: \"https://inborn-brochure.biz\", \n playQueueID: 3686.33\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/status/sessions"]["get"] + - target: $["paths"]["/log/networked"]["get"] update: x-codeSamples: - lang: swift - label: getSessions + label: enablePaperTrail source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.sessions.getSessions() + let response = try await client.log.enablePaperTrail() switch response.data { - case .object(let object): - // Handle response - break case .badRequest(let badRequest): // Handle response break @@ -802,18 +783,22 @@ actions: // Handle empty response break } - - target: $["paths"]["/"]["get"] + - target: $["paths"]["/media/providers"]["get"] update: x-codeSamples: - lang: swift - label: getServerCapabilities + label: providers source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.server.getServerCapabilities() + let response = try await client.server.getMediaProviders( + request: Operations.GetMediaProvidersRequest( + xPlexToken: "CV5xoxjTpFKUzBTShsaf" + ) + ) switch response.data { case .object(let object): @@ -829,74 +814,85 @@ actions: // Handle empty response break } - - target: $["paths"]["/pins"]["post"] + - target: $["paths"]["/myplex/account"]["get"] update: x-codeSamples: - lang: swift - label: getPin + label: getMyPlexAccount source: |- import Foundation import Plexswift - let client = Client() + let client = Client(security: .accessToken("")) - let response = try await client.plex.getPin( - request: Operations.GetPinRequest( - strong: false - ) - ) + let response = try await client.server.getMyPlexAccount() switch response.data { - case .authPinContainer(let authPinContainer): + case .object(let object): // Handle response break case .badRequest(let badRequest): // Handle response break + case .unauthorized(let unauthorized): + // Handle response + break case .empty: // Handle empty response break } - - target: $["paths"]["/playlists/{playlistID}/items"]["delete"] + - target: $["paths"]["/photo/:/transcode"]["get"] update: x-codeSamples: - lang: swift - label: clearPlaylistContents + label: getResizedPhoto + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.server.getResizedPhoto(\n request: Operations.GetResizedPhotoRequest(\n blur: 20, \n height: 165, \n minSize: .zero, \n opacity: 909292, \n upscale: .one, \n url: \"/library/metadata/49564/thumb/1654258204\", \n width: 110\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/pins"]["post"] + update: + x-codeSamples: + - lang: swift + label: getPin source: |- import Foundation import Plexswift - let client = Client(security: .accessToken("")) + let client = Client() - let response = try await client.playlists.clearPlaylistContents( - request: Operations.ClearPlaylistContentsRequest( - playlistID: 1893.18 - ) + let response = try await client.plex.getPin( + request: Operations.GetPinRequest() ) switch response.data { - case .badRequest(let badRequest): + case .authPinContainer(let authPinContainer): // Handle response break - case .unauthorized(let unauthorized): + case .badRequest(let badRequest): // Handle response break case .empty: // Handle empty response break } - - target: $["paths"]["/transcode/sessions"]["get"] + - target: $["paths"]["/pins/{pinID}"]["get"] update: x-codeSamples: - lang: swift - label: getTranscodeSessions + label: getTokenByPinId + source: "import Foundation\nimport Plexswift\n\nlet client = Client()\n\nlet response = try await client.plex.getTokenByPinId(\n request: Operations.GetTokenByPinIdRequest(\n pinID: 408895, \n )\n)\n\nswitch response.data {\ncase .authPinContainer(let authPinContainer):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .object(let object):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/playlists"]["get"] + update: + x-codeSamples: + - lang: swift + label: getPlaylists source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.sessions.getTranscodeSessions() + let response = try await client.playlists.getPlaylists( + request: Operations.GetPlaylistsRequest() + ) switch response.data { case .object(let object): @@ -912,44 +908,60 @@ actions: // Handle empty response break } - - target: $["paths"]["/identity"]["get"] + - target: $["paths"]["/playlists"]["post"] update: x-codeSamples: - lang: swift - label: identity + label: createPlaylist + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.playlists.createPlaylist(\n request: Operations.CreatePlaylistRequest(\n smart: .one, \n title: \"\", \n type: .video, \n uri: \"https://hoarse-testing.info/\", \n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/playlists/upload"]["post"] + update: + x-codeSamples: + - lang: swift + label: uploadPlaylist + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.playlists.uploadPlaylist(\n request: Operations.UploadPlaylistRequest(\n force: .zero, \n path: \"/home/barkley/playlist.m3u\", \n sectionID: 1\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/playlists/{playlistID}"]["delete"] + update: + x-codeSamples: + - lang: swift + label: deletePlaylist source: |- import Foundation import Plexswift - let client = Client() + let client = Client(security: .accessToken("")) - let response = try await client.server.getServerIdentity() + let response = try await client.playlists.deletePlaylist( + request: Operations.DeletePlaylistRequest( + playlistID: 216.22 + ) + ) switch response.data { - case .object(let object): + case .badRequest(let badRequest): // Handle response break - case .requestTimeout(let requestTimeout): + case .unauthorized(let unauthorized): // Handle response break case .empty: // Handle empty response break } - - target: $["paths"]["/media/providers"]["get"] + - target: $["paths"]["/playlists/{playlistID}"]["get"] update: x-codeSamples: - lang: swift - label: providers + label: getPlaylist source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.server.getMediaProviders( - request: Operations.GetMediaProvidersRequest( - xPlexToken: "CV5xoxjTpFKUzBTShsaf" + let response = try await client.playlists.getPlaylist( + request: Operations.GetPlaylistRequest( + playlistID: 4109.48 ) ) @@ -967,18 +979,28 @@ actions: // Handle empty response break } - - target: $["paths"]["/butler"]["post"] + - target: $["paths"]["/playlists/{playlistID}"]["put"] update: x-codeSamples: - lang: swift - label: startAllTasks + label: updatePlaylist + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.playlists.updatePlaylist(\n request: Operations.UpdatePlaylistRequest(\n playlistID: 3915.00, \n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/playlists/{playlistID}/items"]["delete"] + update: + x-codeSamples: + - lang: swift + label: clearPlaylistContents source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.butler.startAllTasks() + let response = try await client.playlists.clearPlaylistContents( + request: Operations.ClearPlaylistContentsRequest( + playlistID: 1893.18 + ) + ) switch response.data { case .badRequest(let badRequest): @@ -991,36 +1013,45 @@ actions: // Handle empty response break } - - target: $["paths"]["/library/all/top"]["get"] + - target: $["paths"]["/playlists/{playlistID}/items"]["get"] update: x-codeSamples: - lang: swift - label: getTopWatchedContent - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getTopWatchedContent(\n request: Operations.GetTopWatchedContentRequest(\n type: .season, \n includeGuids: 1\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/updater/apply"]["put"] + label: getPlaylistContents + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.playlists.getPlaylistContents(\n request: Operations.GetPlaylistContentsRequest(\n playlistID: 5004.46, \n type: .tvShow\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/playlists/{playlistID}/items"]["put"] update: x-codeSamples: - lang: swift - label: applyUpdates - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.updater.applyUpdates(\n request: Operations.ApplyUpdatesRequest(\n skip: .one, \n tonight: .zero\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/:/scrobble"]["get"] + label: addPlaylistContents + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.playlists.addPlaylistContents(\n request: Operations.AddPlaylistContentsRequest(\n playlistID: 8502.00, \n uri: \"server://12345/com.plexapp.plugins.library/library/metadata/1\", \n playQueueID: 123\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/resources"]["get"] update: x-codeSamples: - lang: swift - label: markPlayed + label: resources + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.plex.getServerResources(\n request: Operations.GetServerResourcesRequest(\n includeHttps: .enable, \n includeIPv6: .enable, \n includeRelay: .enable\n )\n)\n\nswitch response.data {\ncase .plexDevices(let plexDevices):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/search"]["get"] + update: + x-codeSamples: + - lang: swift + label: getSearchResults source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.media.markPlayed( - request: Operations.MarkPlayedRequest( - key: 59398 + let response = try await client.search.getSearchResults( + request: Operations.GetSearchResultsRequest( + query: "110" ) ) switch response.data { + case .object(let object): + // Handle response + break case .badRequest(let badRequest): // Handle response break @@ -1031,20 +1062,20 @@ actions: // Handle empty response break } - - target: $["paths"]["/activities/{activityUUID}"]["delete"] + - target: $["paths"]["/security/resources"]["get"] update: x-codeSamples: - lang: swift - label: cancelServerActivities + label: getSourceConnectionInformation source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.activities.cancelServerActivities( - request: Operations.CancelServerActivitiesRequest( - activityUUID: "25b71ed5-0f9d-461c-baa7-d404e9e10d3e" + let response = try await client.authentication.getSourceConnectionInformation( + request: Operations.GetSourceConnectionInformationRequest( + source: "server://client-identifier" ) ) @@ -1059,18 +1090,24 @@ actions: // Handle empty response break } - - target: $["paths"]["/library/onDeck"]["get"] + - target: $["paths"]["/security/token"]["get"] update: x-codeSamples: - lang: swift - label: getOnDeck + label: getTransientToken + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.authentication.getTransientToken(\n request: Operations.GetTransientTokenRequest(\n scope: .all, \n type: .delegation\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/servers"]["get"] + update: + x-codeSamples: + - lang: swift + label: getServerList source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.library.getOnDeck() + let response = try await client.server.getServerList() switch response.data { case .object(let object): @@ -1086,24 +1123,27 @@ actions: // Handle empty response break } - - target: $["paths"]["/butler/{taskName}"]["delete"] + - target: $["paths"]["/statistics/bandwidth"]["get"] update: x-codeSamples: - lang: swift - label: stopTask + label: getBandwidthStatistics source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.butler.stopTask( - request: Operations.StopTaskRequest( - taskName: .backupDatabase + let response = try await client.statistics.getBandwidthStatistics( + request: Operations.GetBandwidthStatisticsRequest( + timespan: 4 ) ) switch response.data { + case .object(let object): + // Handle response + break case .badRequest(let badRequest): // Handle response break @@ -1114,24 +1154,22 @@ actions: // Handle empty response break } - - target: $["paths"]["/hubs/search/voice"]["get"] - update: - x-codeSamples: - - lang: swift - label: performVoiceSearch - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.search.performVoiceSearch(\n request: Operations.PerformVoiceSearchRequest(\n query: \"dead+poop\", \n limit: 5, \n sectionId: 4094.8\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/servers"]["get"] + - target: $["paths"]["/statistics/media"]["get"] update: x-codeSamples: - lang: swift - label: getServerList + label: getStatistics source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.server.getServerList() + let response = try await client.statistics.getStatistics( + request: Operations.GetStatisticsRequest( + timespan: 4 + ) + ) switch response.data { case .object(let object): @@ -1147,43 +1185,19 @@ actions: // Handle empty response break } - - target: $["paths"]["/pins/{pinID}"]["get"] - update: - x-codeSamples: - - lang: swift - label: getTokenByPinId - source: "import Foundation\nimport Plexswift\n\nlet client = Client()\n\nlet response = try await client.plex.getTokenByPinId(\n request: Operations.GetTokenByPinIdRequest(\n pinID: 408895, \n )\n)\n\nswitch response.data {\ncase .authPinContainer(let authPinContainer):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .object(let object):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/library/sections/{sectionKey}"]["get"] - update: - x-codeSamples: - - lang: swift - label: details - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getLibraryDetails(\n request: Operations.GetLibraryDetailsRequest(\n sectionKey: 9518, \n includeDetails: .zero\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/status/sessions/history/all"]["get"] - update: - x-codeSamples: - - lang: swift - label: getSessionHistory - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.sessions.getSessionHistory(\n request: Operations.GetSessionHistoryRequest(\n accountId: 1, \n filter: Operations.QueryParamFilter(), \n librarySectionID: 12, \n sort: \"\"\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/log"]["get"] - update: - x-codeSamples: - - lang: swift - label: logLine - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.log.logLine(\n request: Operations.LogLineRequest(\n level: .three, \n message: \"Test log message\", \n source: \"Postman\"\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/statistics/media"]["get"] + - target: $["paths"]["/statistics/resources"]["get"] update: x-codeSamples: - lang: swift - label: getStatistics + label: getResourcesStatistics source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.statistics.getStatistics( - request: Operations.GetStatisticsRequest( + let response = try await client.statistics.getResourcesStatistics( + request: Operations.GetResourcesStatisticsRequest( timespan: 4 ) ) @@ -1202,18 +1216,18 @@ actions: // Handle empty response break } - - target: $["paths"]["/:/prefs"]["get"] + - target: $["paths"]["/status/sessions"]["get"] update: x-codeSamples: - lang: swift - label: getServerPreferences + label: getSessions source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.server.getServerPreferences() + let response = try await client.sessions.getSessions() switch response.data { case .object(let object): @@ -1229,24 +1243,24 @@ actions: // Handle empty response break } - - target: $["paths"]["/video/:/transcode/universal/start.mpd"]["get"] + - target: $["paths"]["/status/sessions/history/all"]["get"] update: x-codeSamples: - lang: swift - label: startUniversalTranscode - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.video.startUniversalTranscode(\n request: Operations.StartUniversalTranscodeRequest(\n hasMDE: 1, \n mediaIndex: 0, \n partIndex: 0, \n path: \"/library/metadata/23409\", \n `protocol`: \"hls\", \n addDebugOverlay: 0, \n audioBoost: 100, \n autoAdjustQuality: 0, \n directPlay: 0, \n directStream: 0, \n fastSeek: 0, \n location: \"lan\", \n mediaBufferSize: 102400, \n session: \"zvcage8b7rkioqcm8f4uns4c\", \n subtites: \"burn\", \n subtitleSize: 100\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/activities"]["get"] + label: getSessionHistory + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.sessions.getSessionHistory(\n request: Operations.GetSessionHistoryRequest(\n accountId: 1, \n filter: Operations.QueryParamFilter(), \n librarySectionID: 12, \n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/transcode/sessions"]["get"] update: x-codeSamples: - lang: swift - label: getServerActivities + label: getTranscodeSessions source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.activities.getServerActivities() + let response = try await client.sessions.getTranscodeSessions() switch response.data { case .object(let object): @@ -1262,33 +1276,24 @@ actions: // Handle empty response break } - - target: $["paths"]["/library/sections/{sectionKey}/{tag}"]["get"] - update: - x-codeSamples: - - lang: swift - label: items - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getLibraryItems(\n request: Operations.GetLibraryItemsRequest(\n sectionKey: 9518, \n tag: .edition, \n includeGuids: .enable, \n includeMeta: .enable, \n type: .tvShow, \n xPlexContainerSize: 50, \n xPlexContainerStart: 0\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/library/metadata/{ratingKey}"]["get"] + - target: $["paths"]["/transcode/sessions/{sessionKey}"]["delete"] update: x-codeSamples: - lang: swift - label: key + label: stopTranscodeSession source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.library.getMetaDataByRatingKey( - request: Operations.GetMetaDataByRatingKeyRequest( - ratingKey: 9518 + let response = try await client.sessions.stopTranscodeSession( + request: Operations.StopTranscodeSessionRequest( + sessionKey: "zz7llzqlx8w9vnrsbnwhbmep" ) ) switch response.data { - case .object(let object): - // Handle response - break case .badRequest(let badRequest): // Handle response break @@ -1299,43 +1304,82 @@ actions: // Handle empty response break } - - target: $["paths"]["/library/sections/watchlist/{filter}"]["get"] + - target: $["paths"]["/updater/apply"]["put"] update: x-codeSamples: - lang: swift - label: list - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.watchlist.getWatchList(\n request: Operations.GetWatchListRequest(\n filter: .available, \n xPlexToken: \"CV5xoxjTpFKUzBTShsaf\", \n includeCollections: .zero, \n includeExternalMedia: .zero, \n libtype: .show, \n maxresults: 49173, \n sort: \"\", \n xPlexContainerSize: 50, \n xPlexContainerStart: 0\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/hubs/search"]["get"] + label: applyUpdates + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.updater.applyUpdates(\n request: Operations.ApplyUpdatesRequest(\n skip: .one, \n tonight: .one\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/updater/check"]["put"] update: x-codeSamples: - lang: swift - label: performSearch - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.search.performSearch(\n request: Operations.PerformSearchRequest(\n query: \"dylan\", \n limit: 5, \n sectionId: 1516.53\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/library/metadata/{ratingKey}/children"]["get"] + label: checkForUpdates + source: |- + import Foundation + import Plexswift + + let client = Client(security: .accessToken("")) + + let response = try await client.updater.checkForUpdates( + request: Operations.CheckForUpdatesRequest( + download: .one + ) + ) + + switch response.data { + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): + // Handle response + break + case .empty: + // Handle empty response + break + } + - target: $["paths"]["/updater/status"]["get"] update: x-codeSamples: - lang: swift - label: getMetadataChildren - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getMetadataChildren(\n request: Operations.GetMetadataChildrenRequest(\n ratingKey: 1539.14, \n includeElements: \"\"\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/playlists/{playlistID}"]["get"] + label: getUpdateStatus + source: |- + import Foundation + import Plexswift + + let client = Client(security: .accessToken("")) + + let response = try await client.updater.getUpdateStatus() + + switch response.data { + case .object(let object): + // Handle response + break + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): + // Handle response + break + case .empty: + // Handle empty response + break + } + - target: $["paths"]["/user"]["get"] update: x-codeSamples: - lang: swift - label: getPlaylist + label: getTokenDetails source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.playlists.getPlaylist( - request: Operations.GetPlaylistRequest( - playlistID: 4109.48 - ) - ) + let response = try await client.authentication.getTokenDetails() switch response.data { - case .object(let object): + case .userPlexAccount(let userPlexAccount): // Handle response break case .badRequest(let badRequest): @@ -1348,15 +1392,15 @@ actions: // Handle empty response break } - - target: $["paths"]["/playlists/{playlistID}/items"]["get"] + - target: $["paths"]["/users/signin"]["post"] update: x-codeSamples: - lang: swift - label: getPlaylistContents - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.playlists.getPlaylistContents(\n request: Operations.GetPlaylistContentsRequest(\n playlistID: 5004.46, \n type: .episode\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/library/recentlyAdded"]["get"] + label: data + source: "import Foundation\nimport Plexswift\n\nlet client = Client()\n\nlet response = try await client.authentication.postUsersSignInData(\n request: Operations.PostUsersSignInDataRequest(\n requestBody: Operations.PostUsersSignInDataRequestBody(\n login: \"username@email.com\", \n password: \"password123\", \n verificationCode: \"123456\"\n )\n )\n)\n\nswitch response.data {\ncase .userPlexAccount(let userPlexAccount):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/video/:/transcode/universal/start.mpd"]["get"] update: x-codeSamples: - lang: swift - label: library - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getRecentlyAddedLibrary(\n request: Operations.GetRecentlyAddedLibraryRequest(\n type: .season, \n contentDirectoryID: 2, \n includeMeta: .enable, \n pinnedContentDirectoryID: [\n 336778,\n ], \n sectionID: 2, \n xPlexContainerSize: 50, \n xPlexContainerStart: 0\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + label: startUniversalTranscode + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.video.startUniversalTranscode(\n request: Operations.StartUniversalTranscodeRequest(\n hasMDE: 1, \n mediaIndex: 0, \n partIndex: 0, \n path: \"/library/metadata/23409\", \n `protocol`: \"hls\", \n addDebugOverlay: 0, \n audioBoost: 100, \n autoAdjustQuality: 0, \n directPlay: 0, \n directStream: 0, \n fastSeek: 0, \n location: \"lan\", \n mediaBufferSize: 102400, \n session: \"zvcage8b7rkioqcm8f4uns4c\", \n subtites: \"burn\", \n subtitleSize: 100\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}"