diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..c094dba
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,2 @@
+# This allows generated code to be indexed correctly
+*.cs linguist-generated=false
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b004ece
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+obj/
+bin/
+debug/
diff --git a/PlexAPI.sln b/PlexAPI.sln
new file mode 100644
index 0000000..750fccf
--- /dev/null
+++ b/PlexAPI.sln
@@ -0,0 +1,17 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PlexAPI", "PlexAPI\PlexAPI.csproj", "{F0CE92B5-F3CC-45A2-AA83-118C38724EB1}"
+EndProject
+
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {F0CE92B5-F3CC-45A2-AA83-118C38724EB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F0CE92B5-F3CC-45A2-AA83-118C38724EB1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F0CE92B5-F3CC-45A2-AA83-118C38724EB1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F0CE92B5-F3CC-45A2-AA83-118C38724EB1}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+EndGlobal
\ No newline at end of file
diff --git a/PlexAPI/Activities.cs b/PlexAPI/Activities.cs
new file mode 100644
index 0000000..0949239
--- /dev/null
+++ b/PlexAPI/Activities.cs
@@ -0,0 +1,183 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI
+{
+ using Newtonsoft.Json;
+ using PlexAPI.Models.Requests;
+ using PlexAPI.Utils;
+ using System.Net.Http.Headers;
+ using System.Net.Http;
+ using System.Threading.Tasks;
+ using System;
+
+ ///
+ /// Activities are awesome. They provide a way to monitor and control asynchronous operations on the server. In order to receive real-time updates for activities, a client would normally subscribe via either EventSource or Websocket endpoints.
+ ///
+ ///
+ /// Activities are associated with HTTP replies via a special `X-Plex-Activity` header which contains the UUID of the activity.
+ /// Activities are optional cancellable. If cancellable, they may be cancelled via the `DELETE` endpoint. Other details:
+ /// - They can contain a `progress` (from 0 to 100) marking the percent completion of the activity.
+ /// - They must contain an `type` which is used by clients to distinguish the specific activity.
+ /// - They may contain a `Context` object with attributes which associate the activity with various specific entities (items, libraries, etc.)
+ /// - The may contain a `Response` object which attributes which represent the result of the asynchronous operation.
+ ///
+ ///
+ ///
+ public interface IActivities
+ {
+
+ ///
+ /// Get Server Activities
+ ///
+ ///
+ /// Get Server Activities
+ ///
+ ///
+ Task GetServerActivitiesAsync();
+
+ ///
+ /// Cancel Server Activities
+ ///
+ ///
+ /// Cancel Server Activities
+ ///
+ ///
+ Task CancelServerActivitiesAsync(string activityUUID);
+ }
+
+ ///
+ /// Activities are awesome. They provide a way to monitor and control asynchronous operations on the server. In order to receive real-time updates for activities, a client would normally subscribe via either EventSource or Websocket endpoints.
+ ///
+ ///
+ /// Activities are associated with HTTP replies via a special `X-Plex-Activity` header which contains the UUID of the activity.
+ /// Activities are optional cancellable. If cancellable, they may be cancelled via the `DELETE` endpoint. Other details:
+ /// - They can contain a `progress` (from 0 to 100) marking the percent completion of the activity.
+ /// - They must contain an `type` which is used by clients to distinguish the specific activity.
+ /// - They may contain a `Context` object with attributes which associate the activity with various specific entities (items, libraries, etc.)
+ /// - The may contain a `Response` object which attributes which represent the result of the asynchronous operation.
+ ///
+ ///
+ ///
+ public class Activities: IActivities
+ {
+ public SDKConfig SDKConfiguration { get; private set; }
+ private const string _language = "csharp";
+ private const string _sdkVersion = "0.1.0";
+ private const string _sdkGenVersion = "2.223.3";
+ private const string _openapiDocVersion = "0.0.3";
+ private const string _userAgent = "speakeasy-sdk/csharp 0.1.0 2.223.3 0.0.3 Plex-API";
+ private string _serverUrl = "";
+ private ISpeakeasyHttpClient _defaultClient;
+ private ISpeakeasyHttpClient _securityClient;
+
+ public Activities(ISpeakeasyHttpClient defaultClient, ISpeakeasyHttpClient securityClient, string serverUrl, SDKConfig config)
+ {
+ _defaultClient = defaultClient;
+ _securityClient = securityClient;
+ _serverUrl = serverUrl;
+ SDKConfiguration = config;
+ }
+
+
+ public async Task GetServerActivitiesAsync()
+ {
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = baseUrl + "/activities";
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetServerActivitiesResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.TwoHundredApplicationJsonObject = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.FourHundredAndOneApplicationJsonObject = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task CancelServerActivitiesAsync(string activityUUID)
+ {
+ var request = new CancelServerActivitiesRequest()
+ {
+ ActivityUUID = activityUUID,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/activities/{activityUUID}", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new CancelServerActivitiesResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Butler.cs b/PlexAPI/Butler.cs
new file mode 100644
index 0000000..ae181c9
--- /dev/null
+++ b/PlexAPI/Butler.cs
@@ -0,0 +1,334 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI
+{
+ using Newtonsoft.Json;
+ using PlexAPI.Models.Requests;
+ using PlexAPI.Utils;
+ using System.Net.Http.Headers;
+ using System.Net.Http;
+ using System.Threading.Tasks;
+ using System;
+
+ ///
+ /// Butler is the task manager of the Plex Media Server Ecosystem.
+ ///
+ ///
+ ///
+ ///
+ ///
+ public interface IButler
+ {
+
+ ///
+ /// Get Butler tasks
+ ///
+ ///
+ /// Returns a list of butler tasks
+ ///
+ ///
+ Task GetButlerTasksAsync();
+
+ ///
+ /// Start all Butler tasks
+ ///
+ ///
+ /// This endpoint will attempt to start all Butler tasks that are enabled in the settings. Butler tasks normally run automatically during a time window configured on the server's Settings page but can be manually started using this endpoint. Tasks will run with the following criteria:
+ /// 1. Any tasks not scheduled to run on the current day will be skipped.
+ /// 2. If a task is configured to run at a random time during the configured window and we are outside that window, the task will start immediately.
+ /// 3. If a task is configured to run at a random time during the configured window and we are within that window, the task will be scheduled at a random time within the window.
+ /// 4. If we are outside the configured window, the task will start immediately.
+ ///
+ ///
+ ///
+ Task StartAllTasksAsync();
+
+ ///
+ /// Stop all Butler tasks
+ ///
+ ///
+ /// This endpoint will stop all currently running tasks and remove any scheduled tasks from the queue.
+ ///
+ ///
+ ///
+ Task StopAllTasksAsync();
+
+ ///
+ /// Start a single Butler task
+ ///
+ ///
+ /// This endpoint will attempt to start a single Butler task that is enabled in the settings. Butler tasks normally run automatically during a time window configured on the server's Settings page but can be manually started using this endpoint. Tasks will run with the following criteria:
+ /// 1. Any tasks not scheduled to run on the current day will be skipped.
+ /// 2. If a task is configured to run at a random time during the configured window and we are outside that window, the task will start immediately.
+ /// 3. If a task is configured to run at a random time during the configured window and we are within that window, the task will be scheduled at a random time within the window.
+ /// 4. If we are outside the configured window, the task will start immediately.
+ ///
+ ///
+ ///
+ Task StartTaskAsync(TaskName taskName);
+
+ ///
+ /// Stop a single Butler task
+ ///
+ ///
+ /// This endpoint will stop a currently running task by name, or remove it from the list of scheduled tasks if it exists. See the section above for a list of task names for this endpoint.
+ ///
+ ///
+ ///
+ Task StopTaskAsync(PathParamTaskName taskName);
+ }
+
+ ///
+ /// Butler is the task manager of the Plex Media Server Ecosystem.
+ ///
+ ///
+ ///
+ ///
+ ///
+ public class Butler: IButler
+ {
+ public SDKConfig SDKConfiguration { get; private set; }
+ private const string _language = "csharp";
+ private const string _sdkVersion = "0.1.0";
+ private const string _sdkGenVersion = "2.223.3";
+ private const string _openapiDocVersion = "0.0.3";
+ private const string _userAgent = "speakeasy-sdk/csharp 0.1.0 2.223.3 0.0.3 Plex-API";
+ private string _serverUrl = "";
+ private ISpeakeasyHttpClient _defaultClient;
+ private ISpeakeasyHttpClient _securityClient;
+
+ public Butler(ISpeakeasyHttpClient defaultClient, ISpeakeasyHttpClient securityClient, string serverUrl, SDKConfig config)
+ {
+ _defaultClient = defaultClient;
+ _securityClient = securityClient;
+ _serverUrl = serverUrl;
+ SDKConfiguration = config;
+ }
+
+
+ public async Task GetButlerTasksAsync()
+ {
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = baseUrl + "/butler";
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetButlerTasksResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.TwoHundredApplicationJsonObject = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.FourHundredAndOneApplicationJsonObject = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task StartAllTasksAsync()
+ {
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = baseUrl + "/butler";
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new StartAllTasksResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task StopAllTasksAsync()
+ {
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = baseUrl + "/butler";
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new StopAllTasksResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task StartTaskAsync(TaskName taskName)
+ {
+ var request = new StartTaskRequest()
+ {
+ TaskName = taskName,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/butler/{taskName}", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new StartTaskResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 202) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task StopTaskAsync(PathParamTaskName taskName)
+ {
+ var request = new StopTaskRequest()
+ {
+ TaskName = taskName,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/butler/{taskName}", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new StopTaskResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400) || (response.StatusCode == 404))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Hubs.cs b/PlexAPI/Hubs.cs
new file mode 100644
index 0000000..3077aed
--- /dev/null
+++ b/PlexAPI/Hubs.cs
@@ -0,0 +1,170 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI
+{
+ using Newtonsoft.Json;
+ using PlexAPI.Models.Requests;
+ using PlexAPI.Utils;
+ using System.Net.Http.Headers;
+ using System.Net.Http;
+ using System.Threading.Tasks;
+ using System;
+
+ ///
+ /// Hubs are a structured two-dimensional container for media, generally represented by multiple horizontal rows.
+ ///
+ ///
+ ///
+ ///
+ ///
+ public interface IHubs
+ {
+
+ ///
+ /// Get Global Hubs
+ ///
+ ///
+ /// Get Global Hubs filtered by the parameters provided.
+ ///
+ ///
+ Task GetGlobalHubsAsync(double? count = null, OnlyTransient? onlyTransient = null);
+
+ ///
+ /// Get library specific hubs
+ ///
+ ///
+ /// This endpoint will return a list of library specific hubs
+ ///
+ ///
+ ///
+ Task GetLibraryHubsAsync(double sectionId, double? count = null, QueryParamOnlyTransient? onlyTransient = null);
+ }
+
+ ///
+ /// Hubs are a structured two-dimensional container for media, generally represented by multiple horizontal rows.
+ ///
+ ///
+ ///
+ ///
+ ///
+ public class Hubs: IHubs
+ {
+ public SDKConfig SDKConfiguration { get; private set; }
+ private const string _language = "csharp";
+ private const string _sdkVersion = "0.1.0";
+ private const string _sdkGenVersion = "2.223.3";
+ private const string _openapiDocVersion = "0.0.3";
+ private const string _userAgent = "speakeasy-sdk/csharp 0.1.0 2.223.3 0.0.3 Plex-API";
+ private string _serverUrl = "";
+ private ISpeakeasyHttpClient _defaultClient;
+ private ISpeakeasyHttpClient _securityClient;
+
+ public Hubs(ISpeakeasyHttpClient defaultClient, ISpeakeasyHttpClient securityClient, string serverUrl, SDKConfig config)
+ {
+ _defaultClient = defaultClient;
+ _securityClient = securityClient;
+ _serverUrl = serverUrl;
+ SDKConfiguration = config;
+ }
+
+
+ public async Task GetGlobalHubsAsync(double? count = null, OnlyTransient? onlyTransient = null)
+ {
+ var request = new GetGlobalHubsRequest()
+ {
+ Count = count,
+ OnlyTransient = onlyTransient,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/hubs", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetGlobalHubsResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task GetLibraryHubsAsync(double sectionId, double? count = null, QueryParamOnlyTransient? onlyTransient = null)
+ {
+ var request = new GetLibraryHubsRequest()
+ {
+ SectionId = sectionId,
+ Count = count,
+ OnlyTransient = onlyTransient,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/hubs/sections/{sectionId}", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetLibraryHubsResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Library.cs b/PlexAPI/Library.cs
new file mode 100644
index 0000000..81d82ff
--- /dev/null
+++ b/PlexAPI/Library.cs
@@ -0,0 +1,743 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI
+{
+ using Newtonsoft.Json;
+ using PlexAPI.Models.Requests;
+ using PlexAPI.Utils;
+ using System.Net.Http.Headers;
+ using System.Net.Http;
+ using System.Threading.Tasks;
+ using System;
+
+ ///
+ /// API Calls interacting with Plex Media Server Libraries
+ ///
+ ///
+ ///
+ ///
+ ///
+ public interface ILibrary
+ {
+
+ ///
+ /// Get Hash Value
+ ///
+ ///
+ /// This resource returns hash values for local files
+ ///
+ ///
+ Task GetFileHashAsync(string url, double? type = null);
+
+ ///
+ /// Get Recently Added
+ ///
+ ///
+ /// This endpoint will return the recently added content.
+ ///
+ ///
+ ///
+ Task GetRecentlyAddedAsync();
+
+ ///
+ /// Get All Libraries
+ ///
+ ///
+ /// A library section (commonly referred to as just a library) is a collection of media.
+ /// Libraries are typed, and depending on their type provide either a flat or a hierarchical view of the media.
+ /// For example, a music library has an artist > albums > tracks structure, whereas a movie library is flat.
+ ///
+ /// Libraries have features beyond just being a collection of media; for starters, they include information about supported types, filters and sorts.
+ /// This allows a client to provide a rich interface around the media (e.g. allow sorting movies by release year).
+ ///
+ ///
+ ///
+ Task GetLibrariesAsync();
+
+ ///
+ /// Get Library Details
+ ///
+ ///
+ /// Returns details for the library. This can be thought of as an interstitial endpoint because it contains information about the library, rather than content itself. These details are:
+ ///
+ /// - A list of `Directory` objects: These used to be used by clients to build a menuing system. There are four flavors of directory found here:
+ /// - Primary: (e.g. all, On Deck) These are still used in some clients to provide "shortcuts" to subsets of media. However, with the exception of On Deck, all of them can be created by media queries, and the desire is to allow these to be customized by users.
+ /// - Secondary: These are marked with `secondary="1"` and were used by old clients to provide nested menus allowing for primative (but structured) navigation.
+ /// - Special: There is a By Folder entry which allows browsing the media by the underlying filesystem structure, and there's a completely obsolete entry marked `search="1"` which used to be used to allow clients to build search dialogs on the fly.
+ /// - A list of `Type` objects: These represent the types of things found in this library, and for each one, a list of `Filter` and `Sort` objects. These can be used to build rich controls around a grid of media to allow filtering and organizing. Note that these filters and sorts are optional, and without them, the client won't render any filtering controls. The `Type` object contains:
+ /// - `key`: This provides the root endpoint returning the actual media list for the type.
+ /// - `type`: This is the metadata type for the type (if a standard Plex type).
+ /// - `title`: The title for for the content of this type (e.g. "Movies").
+ /// - Each `Filter` object contains a description of the filter. Note that it is not an exhaustive list of the full media query language, but an inportant subset useful for top-level API.
+ /// - `filter`: This represents the filter name used for the filter, which can be used to construct complex media queries with.
+ /// - `filterType`: This is either `string`, `integer`, or `boolean`, and describes the type of values used for the filter.
+ /// - `key`: This provides the endpoint where the possible range of values for the filter can be retrieved (e.g. for a "Genre" filter, it returns a list of all the genres in the library). This will include a `type` argument that matches the metadata type of the Type element.
+ /// - `title`: The title for the filter.
+ /// - Each `Sort` object contains a description of the sort field.
+ /// - `defaultDirection`: Can be either `asc` or `desc`, and specifies the default direction for the sort field (e.g. titles default to alphabetically ascending).
+ /// - `descKey` and `key`: Contains the parameters passed to the `sort=...` media query for each direction of the sort.
+ /// - `title`: The title of the field.
+ ///
+ ///
+ ///
+ Task GetLibraryAsync(double sectionId, IncludeDetails? includeDetails = null);
+
+ ///
+ /// Delete Library Section
+ ///
+ ///
+ /// Delate a library using a specific section
+ ///
+ ///
+ Task DeleteLibraryAsync(double sectionId);
+
+ ///
+ /// Get Library Items
+ ///
+ ///
+ /// This endpoint will return a list of library items filtered by the filter and type provided
+ ///
+ ///
+ ///
+ Task GetLibraryItemsAsync(double sectionId, double? type = null, string? filter = null);
+
+ ///
+ /// Refresh Library
+ ///
+ ///
+ /// This endpoint Refreshes the library.
+ ///
+ ///
+ ///
+ Task RefreshLibraryAsync(double sectionId);
+
+ ///
+ /// Get Latest Library Items
+ ///
+ ///
+ /// This endpoint will return a list of the latest library items filtered by the filter and type provided
+ ///
+ ///
+ ///
+ Task GetLatestLibraryItemsAsync(double sectionId, double type, string? filter = null);
+
+ ///
+ /// Get Common Library Items
+ ///
+ ///
+ /// Represents a "Common" item. It contains only the common attributes of the items selected by the provided filter
+ ///
+ ///
+ ///
+ Task GetCommonLibraryItemsAsync(double sectionId, double type, string? filter = null);
+
+ ///
+ /// Get Items Metadata
+ ///
+ ///
+ /// This endpoint will return the metadata of a library item specified with the ratingKey.
+ ///
+ ///
+ ///
+ Task GetMetadataAsync(double ratingKey);
+
+ ///
+ /// Get Items Children
+ ///
+ ///
+ /// This endpoint will return the children of of a library item specified with the ratingKey.
+ ///
+ ///
+ ///
+ Task GetMetadataChildrenAsync(double ratingKey);
+
+ ///
+ /// Get On Deck
+ ///
+ ///
+ /// This endpoint will return the on deck content.
+ ///
+ ///
+ ///
+ Task GetOnDeckAsync();
+ }
+
+ ///
+ /// API Calls interacting with Plex Media Server Libraries
+ ///
+ ///
+ ///
+ ///
+ ///
+ public class Library: ILibrary
+ {
+ public SDKConfig SDKConfiguration { get; private set; }
+ private const string _language = "csharp";
+ private const string _sdkVersion = "0.1.0";
+ private const string _sdkGenVersion = "2.223.3";
+ private const string _openapiDocVersion = "0.0.3";
+ private const string _userAgent = "speakeasy-sdk/csharp 0.1.0 2.223.3 0.0.3 Plex-API";
+ private string _serverUrl = "";
+ private ISpeakeasyHttpClient _defaultClient;
+ private ISpeakeasyHttpClient _securityClient;
+
+ public Library(ISpeakeasyHttpClient defaultClient, ISpeakeasyHttpClient securityClient, string serverUrl, SDKConfig config)
+ {
+ _defaultClient = defaultClient;
+ _securityClient = securityClient;
+ _serverUrl = serverUrl;
+ SDKConfiguration = config;
+ }
+
+
+ public async Task GetFileHashAsync(string url, double? type = null)
+ {
+ var request = new GetFileHashRequest()
+ {
+ Url = url,
+ Type = type,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/library/hashes", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetFileHashResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task GetRecentlyAddedAsync()
+ {
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = baseUrl + "/library/recentlyAdded";
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetRecentlyAddedResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.TwoHundredApplicationJsonObject = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.FourHundredAndOneApplicationJsonObject = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task GetLibrariesAsync()
+ {
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = baseUrl + "/library/sections";
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetLibrariesResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task GetLibraryAsync(double sectionId, IncludeDetails? includeDetails = null)
+ {
+ var request = new GetLibraryRequest()
+ {
+ SectionId = sectionId,
+ IncludeDetails = includeDetails,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetLibraryResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task DeleteLibraryAsync(double sectionId)
+ {
+ var request = new DeleteLibraryRequest()
+ {
+ SectionId = sectionId,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new DeleteLibraryResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task GetLibraryItemsAsync(double sectionId, double? type = null, string? filter = null)
+ {
+ var request = new GetLibraryItemsRequest()
+ {
+ SectionId = sectionId,
+ Type = type,
+ Filter = filter,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/all", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetLibraryItemsResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task RefreshLibraryAsync(double sectionId)
+ {
+ var request = new RefreshLibraryRequest()
+ {
+ SectionId = sectionId,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/refresh", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new RefreshLibraryResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task GetLatestLibraryItemsAsync(double sectionId, double type, string? filter = null)
+ {
+ var request = new GetLatestLibraryItemsRequest()
+ {
+ SectionId = sectionId,
+ Type = type,
+ Filter = filter,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/latest", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetLatestLibraryItemsResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task GetCommonLibraryItemsAsync(double sectionId, double type, string? filter = null)
+ {
+ var request = new GetCommonLibraryItemsRequest()
+ {
+ SectionId = sectionId,
+ Type = type,
+ Filter = filter,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionId}/common", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetCommonLibraryItemsResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400) || (response.StatusCode == 404))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task GetMetadataAsync(double ratingKey)
+ {
+ var request = new GetMetadataRequest()
+ {
+ RatingKey = ratingKey,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ratingKey}", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetMetadataResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task GetMetadataChildrenAsync(double ratingKey)
+ {
+ var request = new GetMetadataChildrenRequest()
+ {
+ RatingKey = ratingKey,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/library/metadata/{ratingKey}/children", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetMetadataChildrenResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task GetOnDeckAsync()
+ {
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = baseUrl + "/library/onDeck";
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetOnDeckResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.TwoHundredApplicationJsonObject = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.FourHundredAndOneApplicationJsonObject = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Log.cs b/PlexAPI/Log.cs
new file mode 100644
index 0000000..cfc67ad
--- /dev/null
+++ b/PlexAPI/Log.cs
@@ -0,0 +1,216 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI
+{
+ using Newtonsoft.Json;
+ using PlexAPI.Models.Requests;
+ using PlexAPI.Utils;
+ using System.Net.Http.Headers;
+ using System.Net.Http;
+ using System.Threading.Tasks;
+ using System;
+
+ ///
+ /// Submit logs to the Log Handler for Plex Media Server
+ ///
+ ///
+ ///
+ ///
+ ///
+ public interface ILog
+ {
+
+ ///
+ /// Logging a single line message.
+ ///
+ ///
+ /// This endpoint will write a single-line log message, including a level and source to the main Plex Media Server log.
+ ///
+ ///
+ ///
+ Task LogLineAsync(Level level, string message, string source);
+
+ ///
+ /// Logging a multi-line message
+ ///
+ ///
+ /// This endpoint will write multiple lines to the main Plex Media Server log in a single request. It takes a set of query strings as would normally sent to the above GET endpoint as a linefeed-separated block of POST data. The parameters for each query string match as above.
+ ///
+ ///
+ ///
+ Task LogMultiLineAsync();
+
+ ///
+ /// Enabling Papertrail
+ ///
+ ///
+ /// This endpoint will enable all Plex Media Serverlogs to be sent to the Papertrail networked logging site for a period of time.
+ ///
+ ///
+ ///
+ Task EnablePaperTrailAsync();
+ }
+
+ ///
+ /// Submit logs to the Log Handler for Plex Media Server
+ ///
+ ///
+ ///
+ ///
+ ///
+ public class Log: ILog
+ {
+ public SDKConfig SDKConfiguration { get; private set; }
+ private const string _language = "csharp";
+ private const string _sdkVersion = "0.1.0";
+ private const string _sdkGenVersion = "2.223.3";
+ private const string _openapiDocVersion = "0.0.3";
+ private const string _userAgent = "speakeasy-sdk/csharp 0.1.0 2.223.3 0.0.3 Plex-API";
+ private string _serverUrl = "";
+ private ISpeakeasyHttpClient _defaultClient;
+ private ISpeakeasyHttpClient _securityClient;
+
+ public Log(ISpeakeasyHttpClient defaultClient, ISpeakeasyHttpClient securityClient, string serverUrl, SDKConfig config)
+ {
+ _defaultClient = defaultClient;
+ _securityClient = securityClient;
+ _serverUrl = serverUrl;
+ SDKConfiguration = config;
+ }
+
+
+ public async Task LogLineAsync(Level level, string message, string source)
+ {
+ var request = new LogLineRequest()
+ {
+ Level = level,
+ Message = message,
+ Source = source,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/log", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new LogLineResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task LogMultiLineAsync()
+ {
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = baseUrl + "/log";
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new LogMultiLineResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task EnablePaperTrailAsync()
+ {
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = baseUrl + "/log/networked";
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new EnablePaperTrailResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400) || (response.StatusCode == 403))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Media.cs b/PlexAPI/Media.cs
new file mode 100644
index 0000000..c349a37
--- /dev/null
+++ b/PlexAPI/Media.cs
@@ -0,0 +1,222 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI
+{
+ using Newtonsoft.Json;
+ using PlexAPI.Models.Requests;
+ using PlexAPI.Utils;
+ using System.Net.Http.Headers;
+ using System.Net.Http;
+ using System.Threading.Tasks;
+ using System;
+
+ ///
+ /// API Calls interacting with Plex Media Server Media
+ ///
+ ///
+ ///
+ ///
+ ///
+ public interface IMedia
+ {
+
+ ///
+ /// Mark Media Played
+ ///
+ ///
+ /// This will mark the provided media key as Played.
+ ///
+ ///
+ Task MarkPlayedAsync(double key);
+
+ ///
+ /// Mark Media Unplayed
+ ///
+ ///
+ /// This will mark the provided media key as Unplayed.
+ ///
+ ///
+ Task MarkUnplayedAsync(double key);
+
+ ///
+ /// Update Media Play Progress
+ ///
+ ///
+ /// This API command can be used to update the play progress of a media item.
+ ///
+ ///
+ ///
+ Task UpdatePlayProgressAsync(string key, double time, string state);
+ }
+
+ ///
+ /// API Calls interacting with Plex Media Server Media
+ ///
+ ///
+ ///
+ ///
+ ///
+ public class Media: IMedia
+ {
+ public SDKConfig SDKConfiguration { get; private set; }
+ private const string _language = "csharp";
+ private const string _sdkVersion = "0.1.0";
+ private const string _sdkGenVersion = "2.223.3";
+ private const string _openapiDocVersion = "0.0.3";
+ private const string _userAgent = "speakeasy-sdk/csharp 0.1.0 2.223.3 0.0.3 Plex-API";
+ private string _serverUrl = "";
+ private ISpeakeasyHttpClient _defaultClient;
+ private ISpeakeasyHttpClient _securityClient;
+
+ public Media(ISpeakeasyHttpClient defaultClient, ISpeakeasyHttpClient securityClient, string serverUrl, SDKConfig config)
+ {
+ _defaultClient = defaultClient;
+ _securityClient = securityClient;
+ _serverUrl = serverUrl;
+ SDKConfiguration = config;
+ }
+
+
+ public async Task MarkPlayedAsync(double key)
+ {
+ var request = new MarkPlayedRequest()
+ {
+ Key = key,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/:/scrobble", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new MarkPlayedResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task MarkUnplayedAsync(double key)
+ {
+ var request = new MarkUnplayedRequest()
+ {
+ Key = key,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/:/unscrobble", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new MarkUnplayedResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task UpdatePlayProgressAsync(string key, double time, string state)
+ {
+ var request = new UpdatePlayProgressRequest()
+ {
+ Key = key,
+ Time = time,
+ State = state,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/:/progress", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new UpdatePlayProgressResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Components/Security.cs b/PlexAPI/Models/Components/Security.cs
new file mode 100644
index 0000000..6394d7d
--- /dev/null
+++ b/PlexAPI/Models/Components/Security.cs
@@ -0,0 +1,21 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Components
+{
+ using PlexAPI.Utils;
+
+ public class Security
+ {
+
+ [SpeakeasyMetadata("security:scheme=true,type=apiKey,subType=header,name=X-Plex-Token")]
+ public string AccessToken { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/Activity.cs b/PlexAPI/Models/Requests/Activity.cs
new file mode 100644
index 0000000..edd6bc0
--- /dev/null
+++ b/PlexAPI/Models/Requests/Activity.cs
@@ -0,0 +1,42 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class Activity
+ {
+
+ [JsonProperty("uuid")]
+ public string? Uuid { get; set; }
+
+ [JsonProperty("type")]
+ public string? Type { get; set; }
+
+ [JsonProperty("cancellable")]
+ public bool? Cancellable { get; set; }
+
+ [JsonProperty("userID")]
+ public double? UserID { get; set; }
+
+ [JsonProperty("title")]
+ public string? Title { get; set; }
+
+ [JsonProperty("subtitle")]
+ public string? Subtitle { get; set; }
+
+ [JsonProperty("progress")]
+ public double? Progress { get; set; }
+
+ [JsonProperty("Context")]
+ public Context? Context { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/AddPlaylistContentsErrors.cs b/PlexAPI/Models/Requests/AddPlaylistContentsErrors.cs
new file mode 100644
index 0000000..b764156
--- /dev/null
+++ b/PlexAPI/Models/Requests/AddPlaylistContentsErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class AddPlaylistContentsErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/AddPlaylistContentsRequest.cs b/PlexAPI/Models/Requests/AddPlaylistContentsRequest.cs
new file mode 100644
index 0000000..503e821
--- /dev/null
+++ b/PlexAPI/Models/Requests/AddPlaylistContentsRequest.cs
@@ -0,0 +1,36 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class AddPlaylistContentsRequest
+ {
+
+ ///
+ /// the ID of the playlist
+ ///
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=playlistID")]
+ public double PlaylistID { get; set; } = default!;
+
+ ///
+ /// the content URI for the playlist
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=uri")]
+ public string Uri { get; set; } = default!;
+
+ ///
+ /// the play queue to add to a playlist
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=playQueueID")]
+ public double PlayQueueID { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/AddPlaylistContentsResponse.cs b/PlexAPI/Models/Requests/AddPlaylistContentsResponse.cs
new file mode 100644
index 0000000..43efc9f
--- /dev/null
+++ b/PlexAPI/Models/Requests/AddPlaylistContentsResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class AddPlaylistContentsResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public AddPlaylistContentsResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/AddPlaylistContentsResponseBody.cs b/PlexAPI/Models/Requests/AddPlaylistContentsResponseBody.cs
new file mode 100644
index 0000000..721d328
--- /dev/null
+++ b/PlexAPI/Models/Requests/AddPlaylistContentsResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class AddPlaylistContentsResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/ApplyUpdatesErrors.cs b/PlexAPI/Models/Requests/ApplyUpdatesErrors.cs
new file mode 100644
index 0000000..3ede6e4
--- /dev/null
+++ b/PlexAPI/Models/Requests/ApplyUpdatesErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class ApplyUpdatesErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/ApplyUpdatesRequest.cs b/PlexAPI/Models/Requests/ApplyUpdatesRequest.cs
new file mode 100644
index 0000000..8c6925c
--- /dev/null
+++ b/PlexAPI/Models/Requests/ApplyUpdatesRequest.cs
@@ -0,0 +1,30 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class ApplyUpdatesRequest
+ {
+
+ ///
+ /// Indicate that you want the update to run during the next Butler execution. Omitting this or setting it to false indicates that the update should install
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=tonight")]
+ public Tonight? Tonight { get; set; }
+
+ ///
+ /// Indicate that the latest version should be marked as skipped. The <Release> entry for this version will have the `state` set to `skipped`.
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=skip")]
+ public Skip? Skip { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/ApplyUpdatesResponse.cs b/PlexAPI/Models/Requests/ApplyUpdatesResponse.cs
new file mode 100644
index 0000000..32e389d
--- /dev/null
+++ b/PlexAPI/Models/Requests/ApplyUpdatesResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class ApplyUpdatesResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public ApplyUpdatesResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/ApplyUpdatesResponseBody.cs b/PlexAPI/Models/Requests/ApplyUpdatesResponseBody.cs
new file mode 100644
index 0000000..c41e07b
--- /dev/null
+++ b/PlexAPI/Models/Requests/ApplyUpdatesResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class ApplyUpdatesResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/ButlerTask.cs b/PlexAPI/Models/Requests/ButlerTask.cs
new file mode 100644
index 0000000..13cbe7c
--- /dev/null
+++ b/PlexAPI/Models/Requests/ButlerTask.cs
@@ -0,0 +1,36 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class ButlerTask
+ {
+
+ [JsonProperty("name")]
+ public string? Name { get; set; }
+
+ [JsonProperty("interval")]
+ public double? Interval { get; set; }
+
+ [JsonProperty("scheduleRandomized")]
+ public bool? ScheduleRandomized { get; set; }
+
+ [JsonProperty("enabled")]
+ public bool? Enabled { get; set; }
+
+ [JsonProperty("title")]
+ public string? Title { get; set; }
+
+ [JsonProperty("description")]
+ public string? Description { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/ButlerTasks.cs b/PlexAPI/Models/Requests/ButlerTasks.cs
new file mode 100644
index 0000000..11bcaf9
--- /dev/null
+++ b/PlexAPI/Models/Requests/ButlerTasks.cs
@@ -0,0 +1,22 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ public class ButlerTasks
+ {
+
+ [JsonProperty("ButlerTask")]
+ public List? ButlerTask { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/CancelServerActivitiesErrors.cs b/PlexAPI/Models/Requests/CancelServerActivitiesErrors.cs
new file mode 100644
index 0000000..148bd93
--- /dev/null
+++ b/PlexAPI/Models/Requests/CancelServerActivitiesErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class CancelServerActivitiesErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/CancelServerActivitiesRequest.cs b/PlexAPI/Models/Requests/CancelServerActivitiesRequest.cs
new file mode 100644
index 0000000..2e4977c
--- /dev/null
+++ b/PlexAPI/Models/Requests/CancelServerActivitiesRequest.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class CancelServerActivitiesRequest
+ {
+
+ ///
+ /// The UUID of the activity to cancel.
+ ///
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=activityUUID")]
+ public string ActivityUUID { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/CancelServerActivitiesResponse.cs b/PlexAPI/Models/Requests/CancelServerActivitiesResponse.cs
new file mode 100644
index 0000000..f27231f
--- /dev/null
+++ b/PlexAPI/Models/Requests/CancelServerActivitiesResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class CancelServerActivitiesResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public CancelServerActivitiesResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/CancelServerActivitiesResponseBody.cs b/PlexAPI/Models/Requests/CancelServerActivitiesResponseBody.cs
new file mode 100644
index 0000000..08d0840
--- /dev/null
+++ b/PlexAPI/Models/Requests/CancelServerActivitiesResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class CancelServerActivitiesResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/CheckForUpdatesErrors.cs b/PlexAPI/Models/Requests/CheckForUpdatesErrors.cs
new file mode 100644
index 0000000..acc08dd
--- /dev/null
+++ b/PlexAPI/Models/Requests/CheckForUpdatesErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class CheckForUpdatesErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/CheckForUpdatesRequest.cs b/PlexAPI/Models/Requests/CheckForUpdatesRequest.cs
new file mode 100644
index 0000000..ed08356
--- /dev/null
+++ b/PlexAPI/Models/Requests/CheckForUpdatesRequest.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class CheckForUpdatesRequest
+ {
+
+ ///
+ /// Indicate that you want to start download any updates found.
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=download")]
+ public Download? Download { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/CheckForUpdatesResponse.cs b/PlexAPI/Models/Requests/CheckForUpdatesResponse.cs
new file mode 100644
index 0000000..ca2bc9f
--- /dev/null
+++ b/PlexAPI/Models/Requests/CheckForUpdatesResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class CheckForUpdatesResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public CheckForUpdatesResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/CheckForUpdatesResponseBody.cs b/PlexAPI/Models/Requests/CheckForUpdatesResponseBody.cs
new file mode 100644
index 0000000..de75d59
--- /dev/null
+++ b/PlexAPI/Models/Requests/CheckForUpdatesResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class CheckForUpdatesResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/ClearPlaylistContentsErrors.cs b/PlexAPI/Models/Requests/ClearPlaylistContentsErrors.cs
new file mode 100644
index 0000000..c085578
--- /dev/null
+++ b/PlexAPI/Models/Requests/ClearPlaylistContentsErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class ClearPlaylistContentsErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/ClearPlaylistContentsRequest.cs b/PlexAPI/Models/Requests/ClearPlaylistContentsRequest.cs
new file mode 100644
index 0000000..a9906de
--- /dev/null
+++ b/PlexAPI/Models/Requests/ClearPlaylistContentsRequest.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class ClearPlaylistContentsRequest
+ {
+
+ ///
+ /// the ID of the playlist
+ ///
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=playlistID")]
+ public double PlaylistID { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/ClearPlaylistContentsResponse.cs b/PlexAPI/Models/Requests/ClearPlaylistContentsResponse.cs
new file mode 100644
index 0000000..ae0cedd
--- /dev/null
+++ b/PlexAPI/Models/Requests/ClearPlaylistContentsResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class ClearPlaylistContentsResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public ClearPlaylistContentsResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/ClearPlaylistContentsResponseBody.cs b/PlexAPI/Models/Requests/ClearPlaylistContentsResponseBody.cs
new file mode 100644
index 0000000..ddd16f3
--- /dev/null
+++ b/PlexAPI/Models/Requests/ClearPlaylistContentsResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class ClearPlaylistContentsResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/Context.cs b/PlexAPI/Models/Requests/Context.cs
new file mode 100644
index 0000000..34f91d1
--- /dev/null
+++ b/PlexAPI/Models/Requests/Context.cs
@@ -0,0 +1,21 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class Context
+ {
+
+ [JsonProperty("librarySectionID")]
+ public string? LibrarySectionID { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/Country.cs b/PlexAPI/Models/Requests/Country.cs
new file mode 100644
index 0000000..0d17729
--- /dev/null
+++ b/PlexAPI/Models/Requests/Country.cs
@@ -0,0 +1,21 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class Country
+ {
+
+ [JsonProperty("tag")]
+ public string? Tag { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/CreatePlaylistErrors.cs b/PlexAPI/Models/Requests/CreatePlaylistErrors.cs
new file mode 100644
index 0000000..5e59659
--- /dev/null
+++ b/PlexAPI/Models/Requests/CreatePlaylistErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class CreatePlaylistErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/CreatePlaylistRequest.cs b/PlexAPI/Models/Requests/CreatePlaylistRequest.cs
new file mode 100644
index 0000000..1322724
--- /dev/null
+++ b/PlexAPI/Models/Requests/CreatePlaylistRequest.cs
@@ -0,0 +1,48 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class CreatePlaylistRequest
+ {
+
+ ///
+ /// name of the playlist
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=title")]
+ public string Title { get; set; } = default!;
+
+ ///
+ /// type of playlist to create
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=type")]
+ public Type Type { get; set; } = default!;
+
+ ///
+ /// whether the playlist is smart or not
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=smart")]
+ public Smart Smart { get; set; } = default!;
+
+ ///
+ /// the content URI for the playlist
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=uri")]
+ public string? Uri { get; set; }
+
+ ///
+ /// the play queue to copy to a playlist
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=playQueueID")]
+ public double? PlayQueueID { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/CreatePlaylistResponse.cs b/PlexAPI/Models/Requests/CreatePlaylistResponse.cs
new file mode 100644
index 0000000..16bfa70
--- /dev/null
+++ b/PlexAPI/Models/Requests/CreatePlaylistResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class CreatePlaylistResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public CreatePlaylistResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/CreatePlaylistResponseBody.cs b/PlexAPI/Models/Requests/CreatePlaylistResponseBody.cs
new file mode 100644
index 0000000..d9c5415
--- /dev/null
+++ b/PlexAPI/Models/Requests/CreatePlaylistResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class CreatePlaylistResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/DeleteLibraryErrors.cs b/PlexAPI/Models/Requests/DeleteLibraryErrors.cs
new file mode 100644
index 0000000..ee72fe3
--- /dev/null
+++ b/PlexAPI/Models/Requests/DeleteLibraryErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class DeleteLibraryErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/DeleteLibraryRequest.cs b/PlexAPI/Models/Requests/DeleteLibraryRequest.cs
new file mode 100644
index 0000000..aaa25a5
--- /dev/null
+++ b/PlexAPI/Models/Requests/DeleteLibraryRequest.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class DeleteLibraryRequest
+ {
+
+ ///
+ /// the Id of the library to query
+ ///
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=sectionId")]
+ public double SectionId { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/DeleteLibraryResponse.cs b/PlexAPI/Models/Requests/DeleteLibraryResponse.cs
new file mode 100644
index 0000000..801ce72
--- /dev/null
+++ b/PlexAPI/Models/Requests/DeleteLibraryResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class DeleteLibraryResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public DeleteLibraryResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/DeleteLibraryResponseBody.cs b/PlexAPI/Models/Requests/DeleteLibraryResponseBody.cs
new file mode 100644
index 0000000..1912513
--- /dev/null
+++ b/PlexAPI/Models/Requests/DeleteLibraryResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class DeleteLibraryResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/DeletePlaylistErrors.cs b/PlexAPI/Models/Requests/DeletePlaylistErrors.cs
new file mode 100644
index 0000000..b316765
--- /dev/null
+++ b/PlexAPI/Models/Requests/DeletePlaylistErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class DeletePlaylistErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/DeletePlaylistRequest.cs b/PlexAPI/Models/Requests/DeletePlaylistRequest.cs
new file mode 100644
index 0000000..90ec8dc
--- /dev/null
+++ b/PlexAPI/Models/Requests/DeletePlaylistRequest.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class DeletePlaylistRequest
+ {
+
+ ///
+ /// the ID of the playlist
+ ///
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=playlistID")]
+ public double PlaylistID { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/DeletePlaylistResponse.cs b/PlexAPI/Models/Requests/DeletePlaylistResponse.cs
new file mode 100644
index 0000000..f21123e
--- /dev/null
+++ b/PlexAPI/Models/Requests/DeletePlaylistResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class DeletePlaylistResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public DeletePlaylistResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/DeletePlaylistResponseBody.cs b/PlexAPI/Models/Requests/DeletePlaylistResponseBody.cs
new file mode 100644
index 0000000..2540e1f
--- /dev/null
+++ b/PlexAPI/Models/Requests/DeletePlaylistResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class DeletePlaylistResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/Device.cs b/PlexAPI/Models/Requests/Device.cs
new file mode 100644
index 0000000..3783b5c
--- /dev/null
+++ b/PlexAPI/Models/Requests/Device.cs
@@ -0,0 +1,33 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class Device
+ {
+
+ [JsonProperty("id")]
+ public double? Id { get; set; }
+
+ [JsonProperty("name")]
+ public string? Name { get; set; }
+
+ [JsonProperty("platform")]
+ public string? Platform { get; set; }
+
+ [JsonProperty("clientIdentifier")]
+ public string? ClientIdentifier { get; set; }
+
+ [JsonProperty("createdAt")]
+ public double? CreatedAt { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/Director.cs b/PlexAPI/Models/Requests/Director.cs
new file mode 100644
index 0000000..17efc65
--- /dev/null
+++ b/PlexAPI/Models/Requests/Director.cs
@@ -0,0 +1,21 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class Director
+ {
+
+ [JsonProperty("tag")]
+ public string? Tag { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/Directory.cs b/PlexAPI/Models/Requests/Directory.cs
new file mode 100644
index 0000000..585b05c
--- /dev/null
+++ b/PlexAPI/Models/Requests/Directory.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class Directory
+ {
+
+ [JsonProperty("count")]
+ public double? Count { get; set; }
+
+ [JsonProperty("key")]
+ public string? Key { get; set; }
+
+ [JsonProperty("title")]
+ public string? Title { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/Download.cs b/PlexAPI/Models/Requests/Download.cs
new file mode 100644
index 0000000..e82c7c4
--- /dev/null
+++ b/PlexAPI/Models/Requests/Download.cs
@@ -0,0 +1,22 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+
+ ///
+ /// Indicate that you want to start download any updates found.
+ ///
+ public enum Download
+ {
+ Zero = 0,
+ One = 1,
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/EnablePaperTrailErrors.cs b/PlexAPI/Models/Requests/EnablePaperTrailErrors.cs
new file mode 100644
index 0000000..5231a2c
--- /dev/null
+++ b/PlexAPI/Models/Requests/EnablePaperTrailErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class EnablePaperTrailErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/EnablePaperTrailResponse.cs b/PlexAPI/Models/Requests/EnablePaperTrailResponse.cs
new file mode 100644
index 0000000..c0d1be8
--- /dev/null
+++ b/PlexAPI/Models/Requests/EnablePaperTrailResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class EnablePaperTrailResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public EnablePaperTrailResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/EnablePaperTrailResponseBody.cs b/PlexAPI/Models/Requests/EnablePaperTrailResponseBody.cs
new file mode 100644
index 0000000..9c6882d
--- /dev/null
+++ b/PlexAPI/Models/Requests/EnablePaperTrailResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class EnablePaperTrailResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/Errors.cs b/PlexAPI/Models/Requests/Errors.cs
new file mode 100644
index 0000000..6bfca9f
--- /dev/null
+++ b/PlexAPI/Models/Requests/Errors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class Errors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/Force.cs b/PlexAPI/Models/Requests/Force.cs
new file mode 100644
index 0000000..77b59a5
--- /dev/null
+++ b/PlexAPI/Models/Requests/Force.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+
+ ///
+ /// force overwriting of duplicate playlists. By default, a playlist file uploaded with the same path will overwrite the existing playlist.
+ ///
+ ///
+ /// The `force` argument is used to disable overwriting. If the `force` argument is set to 0, a new playlist will be created suffixed with the date and time that the duplicate was uploaded.
+ ///
+ ///
+ ///
+ public enum Force
+ {
+ Zero = 0,
+ One = 1,
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/Genre.cs b/PlexAPI/Models/Requests/Genre.cs
new file mode 100644
index 0000000..c0f5377
--- /dev/null
+++ b/PlexAPI/Models/Requests/Genre.cs
@@ -0,0 +1,21 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class Genre
+ {
+
+ [JsonProperty("tag")]
+ public string? Tag { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetAvailableClientsErrors.cs b/PlexAPI/Models/Requests/GetAvailableClientsErrors.cs
new file mode 100644
index 0000000..69df341
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetAvailableClientsErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetAvailableClientsErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetAvailableClientsMediaContainer.cs b/PlexAPI/Models/Requests/GetAvailableClientsMediaContainer.cs
new file mode 100644
index 0000000..5dc7ea1
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetAvailableClientsMediaContainer.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ public class GetAvailableClientsMediaContainer
+ {
+
+ [JsonProperty("size")]
+ public double? Size { get; set; }
+
+ [JsonProperty("Server")]
+ public List? Server { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetAvailableClientsResponse.cs b/PlexAPI/Models/Requests/GetAvailableClientsResponse.cs
new file mode 100644
index 0000000..3b54663
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetAvailableClientsResponse.cs
@@ -0,0 +1,45 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Collections.Generic;
+ using System.Net.Http;
+ using System;
+
+ public class GetAvailableClientsResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Available Clients
+ ///
+ public List? ResponseBodies { get; set; }
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetAvailableClientsResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetAvailableClientsResponseBody.cs b/PlexAPI/Models/Requests/GetAvailableClientsResponseBody.cs
new file mode 100644
index 0000000..523a4b5
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetAvailableClientsResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetAvailableClientsResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetButlerTasksButlerResponseBody.cs b/PlexAPI/Models/Requests/GetButlerTasksButlerResponseBody.cs
new file mode 100644
index 0000000..6ed69ff
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetButlerTasksButlerResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetButlerTasksButlerResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetButlerTasksErrors.cs b/PlexAPI/Models/Requests/GetButlerTasksErrors.cs
new file mode 100644
index 0000000..8d0b7d4
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetButlerTasksErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetButlerTasksErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetButlerTasksResponse.cs b/PlexAPI/Models/Requests/GetButlerTasksResponse.cs
new file mode 100644
index 0000000..11badb7
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetButlerTasksResponse.cs
@@ -0,0 +1,44 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetButlerTasksResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// All butler tasks
+ ///
+ public GetButlerTasksResponseBody? TwoHundredApplicationJsonObject { get; set; }
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetButlerTasksButlerResponseBody? FourHundredAndOneApplicationJsonObject { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetButlerTasksResponseBody.cs b/PlexAPI/Models/Requests/GetButlerTasksResponseBody.cs
new file mode 100644
index 0000000..1c0625e
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetButlerTasksResponseBody.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ ///
+ /// All butler tasks
+ ///
+ public class GetButlerTasksResponseBody
+ {
+
+ [JsonProperty("ButlerTasks")]
+ public ButlerTasks? ButlerTasks { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetCommonLibraryItemsErrors.cs b/PlexAPI/Models/Requests/GetCommonLibraryItemsErrors.cs
new file mode 100644
index 0000000..2b5300e
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetCommonLibraryItemsErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetCommonLibraryItemsErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetCommonLibraryItemsRequest.cs b/PlexAPI/Models/Requests/GetCommonLibraryItemsRequest.cs
new file mode 100644
index 0000000..e66c5f5
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetCommonLibraryItemsRequest.cs
@@ -0,0 +1,36 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class GetCommonLibraryItemsRequest
+ {
+
+ ///
+ /// the Id of the library to query
+ ///
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=sectionId")]
+ public double SectionId { get; set; } = default!;
+
+ ///
+ /// item type
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=type")]
+ public double Type { get; set; } = default!;
+
+ ///
+ /// the filter parameter
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=filter")]
+ public string? Filter { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetCommonLibraryItemsResponse.cs b/PlexAPI/Models/Requests/GetCommonLibraryItemsResponse.cs
new file mode 100644
index 0000000..28bebc1
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetCommonLibraryItemsResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetCommonLibraryItemsResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetCommonLibraryItemsResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetCommonLibraryItemsResponseBody.cs b/PlexAPI/Models/Requests/GetCommonLibraryItemsResponseBody.cs
new file mode 100644
index 0000000..bd3f50b
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetCommonLibraryItemsResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetCommonLibraryItemsResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetDevicesErrors.cs b/PlexAPI/Models/Requests/GetDevicesErrors.cs
new file mode 100644
index 0000000..880464d
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetDevicesErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetDevicesErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetDevicesMediaContainer.cs b/PlexAPI/Models/Requests/GetDevicesMediaContainer.cs
new file mode 100644
index 0000000..7aa4d39
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetDevicesMediaContainer.cs
@@ -0,0 +1,28 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ public class GetDevicesMediaContainer
+ {
+
+ [JsonProperty("size")]
+ public double? Size { get; set; }
+
+ [JsonProperty("identifier")]
+ public string? Identifier { get; set; }
+
+ [JsonProperty("Device")]
+ public List? Device { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetDevicesResponse.cs b/PlexAPI/Models/Requests/GetDevicesResponse.cs
new file mode 100644
index 0000000..331292c
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetDevicesResponse.cs
@@ -0,0 +1,44 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetDevicesResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Devices
+ ///
+ public GetDevicesResponseBody? TwoHundredApplicationJsonObject { get; set; }
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetDevicesServerResponseBody? FourHundredAndOneApplicationJsonObject { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetDevicesResponseBody.cs b/PlexAPI/Models/Requests/GetDevicesResponseBody.cs
new file mode 100644
index 0000000..9ab83da
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetDevicesResponseBody.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ ///
+ /// Devices
+ ///
+ public class GetDevicesResponseBody
+ {
+
+ [JsonProperty("MediaContainer")]
+ public GetDevicesMediaContainer? MediaContainer { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetDevicesServerResponseBody.cs b/PlexAPI/Models/Requests/GetDevicesServerResponseBody.cs
new file mode 100644
index 0000000..568c8fc
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetDevicesServerResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetDevicesServerResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetFileHashErrors.cs b/PlexAPI/Models/Requests/GetFileHashErrors.cs
new file mode 100644
index 0000000..b98f664
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetFileHashErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetFileHashErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetFileHashRequest.cs b/PlexAPI/Models/Requests/GetFileHashRequest.cs
new file mode 100644
index 0000000..bf75f20
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetFileHashRequest.cs
@@ -0,0 +1,30 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class GetFileHashRequest
+ {
+
+ ///
+ /// This is the path to the local file, must be prefixed by `file://`
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=url")]
+ public string Url { get; set; } = default!;
+
+ ///
+ /// Item type
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=type")]
+ public double? Type { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetFileHashResponse.cs b/PlexAPI/Models/Requests/GetFileHashResponse.cs
new file mode 100644
index 0000000..bb18e2a
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetFileHashResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetFileHashResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetFileHashResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetFileHashResponseBody.cs b/PlexAPI/Models/Requests/GetFileHashResponseBody.cs
new file mode 100644
index 0000000..485299f
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetFileHashResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetFileHashResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetGlobalHubsErrors.cs b/PlexAPI/Models/Requests/GetGlobalHubsErrors.cs
new file mode 100644
index 0000000..7a6cc6b
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetGlobalHubsErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetGlobalHubsErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetGlobalHubsRequest.cs b/PlexAPI/Models/Requests/GetGlobalHubsRequest.cs
new file mode 100644
index 0000000..afd865d
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetGlobalHubsRequest.cs
@@ -0,0 +1,30 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class GetGlobalHubsRequest
+ {
+
+ ///
+ /// The number of items to return with each hub.
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=count")]
+ public double? Count { get; set; }
+
+ ///
+ /// Only return hubs which are "transient", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added).
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=onlyTransient")]
+ public OnlyTransient? OnlyTransient { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetGlobalHubsResponse.cs b/PlexAPI/Models/Requests/GetGlobalHubsResponse.cs
new file mode 100644
index 0000000..2df48d4
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetGlobalHubsResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetGlobalHubsResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetGlobalHubsResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetGlobalHubsResponseBody.cs b/PlexAPI/Models/Requests/GetGlobalHubsResponseBody.cs
new file mode 100644
index 0000000..8fcdec3
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetGlobalHubsResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetGlobalHubsResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetLatestLibraryItemsErrors.cs b/PlexAPI/Models/Requests/GetLatestLibraryItemsErrors.cs
new file mode 100644
index 0000000..1f31aae
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetLatestLibraryItemsErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetLatestLibraryItemsErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetLatestLibraryItemsRequest.cs b/PlexAPI/Models/Requests/GetLatestLibraryItemsRequest.cs
new file mode 100644
index 0000000..6e602ab
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetLatestLibraryItemsRequest.cs
@@ -0,0 +1,36 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class GetLatestLibraryItemsRequest
+ {
+
+ ///
+ /// the Id of the library to query
+ ///
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=sectionId")]
+ public double SectionId { get; set; } = default!;
+
+ ///
+ /// item type
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=type")]
+ public double Type { get; set; } = default!;
+
+ ///
+ /// the filter parameter
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=filter")]
+ public string? Filter { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetLatestLibraryItemsResponse.cs b/PlexAPI/Models/Requests/GetLatestLibraryItemsResponse.cs
new file mode 100644
index 0000000..0577d41
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetLatestLibraryItemsResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetLatestLibraryItemsResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetLatestLibraryItemsResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetLatestLibraryItemsResponseBody.cs b/PlexAPI/Models/Requests/GetLatestLibraryItemsResponseBody.cs
new file mode 100644
index 0000000..096ee9f
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetLatestLibraryItemsResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetLatestLibraryItemsResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetLibrariesErrors.cs b/PlexAPI/Models/Requests/GetLibrariesErrors.cs
new file mode 100644
index 0000000..a9fba48
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetLibrariesErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetLibrariesErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetLibrariesResponse.cs b/PlexAPI/Models/Requests/GetLibrariesResponse.cs
new file mode 100644
index 0000000..f1f23ad
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetLibrariesResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetLibrariesResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetLibrariesResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetLibrariesResponseBody.cs b/PlexAPI/Models/Requests/GetLibrariesResponseBody.cs
new file mode 100644
index 0000000..ee1520e
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetLibrariesResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetLibrariesResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetLibraryErrors.cs b/PlexAPI/Models/Requests/GetLibraryErrors.cs
new file mode 100644
index 0000000..18526b2
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetLibraryErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetLibraryErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetLibraryHubsErrors.cs b/PlexAPI/Models/Requests/GetLibraryHubsErrors.cs
new file mode 100644
index 0000000..e58defd
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetLibraryHubsErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetLibraryHubsErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetLibraryHubsRequest.cs b/PlexAPI/Models/Requests/GetLibraryHubsRequest.cs
new file mode 100644
index 0000000..1e5e994
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetLibraryHubsRequest.cs
@@ -0,0 +1,36 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class GetLibraryHubsRequest
+ {
+
+ ///
+ /// the Id of the library to query
+ ///
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=sectionId")]
+ public double SectionId { get; set; } = default!;
+
+ ///
+ /// The number of items to return with each hub.
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=count")]
+ public double? Count { get; set; }
+
+ ///
+ /// Only return hubs which are "transient", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added).
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=onlyTransient")]
+ public QueryParamOnlyTransient? OnlyTransient { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetLibraryHubsResponse.cs b/PlexAPI/Models/Requests/GetLibraryHubsResponse.cs
new file mode 100644
index 0000000..6832618
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetLibraryHubsResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetLibraryHubsResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetLibraryHubsResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetLibraryHubsResponseBody.cs b/PlexAPI/Models/Requests/GetLibraryHubsResponseBody.cs
new file mode 100644
index 0000000..f7306b2
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetLibraryHubsResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetLibraryHubsResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetLibraryItemsErrors.cs b/PlexAPI/Models/Requests/GetLibraryItemsErrors.cs
new file mode 100644
index 0000000..ca68265
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetLibraryItemsErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetLibraryItemsErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetLibraryItemsRequest.cs b/PlexAPI/Models/Requests/GetLibraryItemsRequest.cs
new file mode 100644
index 0000000..d1b03a2
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetLibraryItemsRequest.cs
@@ -0,0 +1,36 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class GetLibraryItemsRequest
+ {
+
+ ///
+ /// the Id of the library to query
+ ///
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=sectionId")]
+ public double SectionId { get; set; } = default!;
+
+ ///
+ /// item type
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=type")]
+ public double? Type { get; set; }
+
+ ///
+ /// the filter parameter
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=filter")]
+ public string? Filter { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetLibraryItemsResponse.cs b/PlexAPI/Models/Requests/GetLibraryItemsResponse.cs
new file mode 100644
index 0000000..27e5487
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetLibraryItemsResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetLibraryItemsResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetLibraryItemsResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetLibraryItemsResponseBody.cs b/PlexAPI/Models/Requests/GetLibraryItemsResponseBody.cs
new file mode 100644
index 0000000..16106e8
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetLibraryItemsResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetLibraryItemsResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetLibraryRequest.cs b/PlexAPI/Models/Requests/GetLibraryRequest.cs
new file mode 100644
index 0000000..c2e5920
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetLibraryRequest.cs
@@ -0,0 +1,35 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class GetLibraryRequest
+ {
+
+ ///
+ /// the Id of the library to query
+ ///
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=sectionId")]
+ public double SectionId { get; set; } = default!;
+
+ ///
+ /// Whether or not to include details for a section (types, filters, and sorts).
+ ///
+ ///
+ /// Only exists for backwards compatibility, media providers other than the server libraries have it on always.
+ ///
+ ///
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeDetails")]
+ public IncludeDetails? IncludeDetails { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetLibraryResponse.cs b/PlexAPI/Models/Requests/GetLibraryResponse.cs
new file mode 100644
index 0000000..8d557bd
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetLibraryResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetLibraryResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetLibraryResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetLibraryResponseBody.cs b/PlexAPI/Models/Requests/GetLibraryResponseBody.cs
new file mode 100644
index 0000000..8e55181
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetLibraryResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetLibraryResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetMetadataChildrenErrors.cs b/PlexAPI/Models/Requests/GetMetadataChildrenErrors.cs
new file mode 100644
index 0000000..ab91f8d
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetMetadataChildrenErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetMetadataChildrenErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetMetadataChildrenRequest.cs b/PlexAPI/Models/Requests/GetMetadataChildrenRequest.cs
new file mode 100644
index 0000000..e8bc562
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetMetadataChildrenRequest.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class GetMetadataChildrenRequest
+ {
+
+ ///
+ /// the id of the library item to return the children of.
+ ///
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=ratingKey")]
+ public double RatingKey { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetMetadataChildrenResponse.cs b/PlexAPI/Models/Requests/GetMetadataChildrenResponse.cs
new file mode 100644
index 0000000..e78a991
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetMetadataChildrenResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetMetadataChildrenResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetMetadataChildrenResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetMetadataChildrenResponseBody.cs b/PlexAPI/Models/Requests/GetMetadataChildrenResponseBody.cs
new file mode 100644
index 0000000..43042e9
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetMetadataChildrenResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetMetadataChildrenResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetMetadataErrors.cs b/PlexAPI/Models/Requests/GetMetadataErrors.cs
new file mode 100644
index 0000000..ba9cc77
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetMetadataErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetMetadataErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetMetadataRequest.cs b/PlexAPI/Models/Requests/GetMetadataRequest.cs
new file mode 100644
index 0000000..b9dab87
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetMetadataRequest.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class GetMetadataRequest
+ {
+
+ ///
+ /// the id of the library item to return the children of.
+ ///
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=ratingKey")]
+ public double RatingKey { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetMetadataResponse.cs b/PlexAPI/Models/Requests/GetMetadataResponse.cs
new file mode 100644
index 0000000..292dbc1
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetMetadataResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetMetadataResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetMetadataResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetMetadataResponseBody.cs b/PlexAPI/Models/Requests/GetMetadataResponseBody.cs
new file mode 100644
index 0000000..5bd9e39
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetMetadataResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetMetadataResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetMyPlexAccountErrors.cs b/PlexAPI/Models/Requests/GetMyPlexAccountErrors.cs
new file mode 100644
index 0000000..2aa7187
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetMyPlexAccountErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetMyPlexAccountErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetMyPlexAccountResponse.cs b/PlexAPI/Models/Requests/GetMyPlexAccountResponse.cs
new file mode 100644
index 0000000..ea63f37
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetMyPlexAccountResponse.cs
@@ -0,0 +1,44 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetMyPlexAccountResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// MyPlex Account
+ ///
+ public GetMyPlexAccountResponseBody? TwoHundredApplicationJsonObject { get; set; }
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetMyPlexAccountServerResponseBody? FourHundredAndOneApplicationJsonObject { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetMyPlexAccountResponseBody.cs b/PlexAPI/Models/Requests/GetMyPlexAccountResponseBody.cs
new file mode 100644
index 0000000..7b42333
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetMyPlexAccountResponseBody.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ ///
+ /// MyPlex Account
+ ///
+ public class GetMyPlexAccountResponseBody
+ {
+
+ [JsonProperty("MyPlex")]
+ public MyPlex? MyPlex { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetMyPlexAccountServerResponseBody.cs b/PlexAPI/Models/Requests/GetMyPlexAccountServerResponseBody.cs
new file mode 100644
index 0000000..cbefbaa
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetMyPlexAccountServerResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetMyPlexAccountServerResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetOnDeckErrors.cs b/PlexAPI/Models/Requests/GetOnDeckErrors.cs
new file mode 100644
index 0000000..e195888
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetOnDeckErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetOnDeckErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetOnDeckLibraryResponseBody.cs b/PlexAPI/Models/Requests/GetOnDeckLibraryResponseBody.cs
new file mode 100644
index 0000000..9dc67a2
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetOnDeckLibraryResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetOnDeckLibraryResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetOnDeckMedia.cs b/PlexAPI/Models/Requests/GetOnDeckMedia.cs
new file mode 100644
index 0000000..599bd6d
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetOnDeckMedia.cs
@@ -0,0 +1,64 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ public class GetOnDeckMedia
+ {
+
+ [JsonProperty("id")]
+ public double? Id { get; set; }
+
+ [JsonProperty("duration")]
+ public double? Duration { get; set; }
+
+ [JsonProperty("bitrate")]
+ public double? Bitrate { get; set; }
+
+ [JsonProperty("width")]
+ public double? Width { get; set; }
+
+ [JsonProperty("height")]
+ public double? Height { get; set; }
+
+ [JsonProperty("aspectRatio")]
+ public double? AspectRatio { get; set; }
+
+ [JsonProperty("audioChannels")]
+ public double? AudioChannels { get; set; }
+
+ [JsonProperty("audioCodec")]
+ public string? AudioCodec { get; set; }
+
+ [JsonProperty("videoCodec")]
+ public string? VideoCodec { get; set; }
+
+ [JsonProperty("videoResolution")]
+ public string? VideoResolution { get; set; }
+
+ [JsonProperty("container")]
+ public string? Container { get; set; }
+
+ [JsonProperty("videoFrameRate")]
+ public string? VideoFrameRate { get; set; }
+
+ [JsonProperty("audioProfile")]
+ public string? AudioProfile { get; set; }
+
+ [JsonProperty("videoProfile")]
+ public string? VideoProfile { get; set; }
+
+ [JsonProperty("Part")]
+ public List? Part { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetOnDeckMediaContainer.cs b/PlexAPI/Models/Requests/GetOnDeckMediaContainer.cs
new file mode 100644
index 0000000..3ccacca
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetOnDeckMediaContainer.cs
@@ -0,0 +1,40 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ public class GetOnDeckMediaContainer
+ {
+
+ [JsonProperty("size")]
+ public double? Size { get; set; }
+
+ [JsonProperty("allowSync")]
+ public bool? AllowSync { get; set; }
+
+ [JsonProperty("identifier")]
+ public string? Identifier { get; set; }
+
+ [JsonProperty("mediaTagPrefix")]
+ public string? MediaTagPrefix { get; set; }
+
+ [JsonProperty("mediaTagVersion")]
+ public double? MediaTagVersion { get; set; }
+
+ [JsonProperty("mixedParents")]
+ public bool? MixedParents { get; set; }
+
+ [JsonProperty("Metadata")]
+ public List? Metadata { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetOnDeckMetadata.cs b/PlexAPI/Models/Requests/GetOnDeckMetadata.cs
new file mode 100644
index 0000000..2b1ac66
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetOnDeckMetadata.cs
@@ -0,0 +1,128 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+ using System;
+
+ public class GetOnDeckMetadata
+ {
+
+ [JsonProperty("allowSync")]
+ public bool? AllowSync { get; set; }
+
+ [JsonProperty("librarySectionID")]
+ public double? LibrarySectionID { get; set; }
+
+ [JsonProperty("librarySectionTitle")]
+ public string? LibrarySectionTitle { get; set; }
+
+ [JsonProperty("librarySectionUUID")]
+ public string? LibrarySectionUUID { get; set; }
+
+ [JsonProperty("ratingKey")]
+ public double? RatingKey { get; set; }
+
+ [JsonProperty("key")]
+ public string? Key { get; set; }
+
+ [JsonProperty("parentRatingKey")]
+ public double? ParentRatingKey { get; set; }
+
+ [JsonProperty("grandparentRatingKey")]
+ public double? GrandparentRatingKey { get; set; }
+
+ [JsonProperty("guid")]
+ public string? Guid { get; set; }
+
+ [JsonProperty("parentGuid")]
+ public string? ParentGuid { get; set; }
+
+ [JsonProperty("grandparentGuid")]
+ public string? GrandparentGuid { get; set; }
+
+ [JsonProperty("type")]
+ public string? Type { get; set; }
+
+ [JsonProperty("title")]
+ public string? Title { get; set; }
+
+ [JsonProperty("grandparentKey")]
+ public string? GrandparentKey { get; set; }
+
+ [JsonProperty("parentKey")]
+ public string? ParentKey { get; set; }
+
+ [JsonProperty("librarySectionKey")]
+ public string? LibrarySectionKey { get; set; }
+
+ [JsonProperty("grandparentTitle")]
+ public string? GrandparentTitle { get; set; }
+
+ [JsonProperty("parentTitle")]
+ public string? ParentTitle { get; set; }
+
+ [JsonProperty("contentRating")]
+ public string? ContentRating { get; set; }
+
+ [JsonProperty("summary")]
+ public string? Summary { get; set; }
+
+ [JsonProperty("index")]
+ public double? Index { get; set; }
+
+ [JsonProperty("parentIndex")]
+ public double? ParentIndex { get; set; }
+
+ [JsonProperty("lastViewedAt")]
+ public double? LastViewedAt { get; set; }
+
+ [JsonProperty("year")]
+ public double? Year { get; set; }
+
+ [JsonProperty("thumb")]
+ public string? Thumb { get; set; }
+
+ [JsonProperty("art")]
+ public string? Art { get; set; }
+
+ [JsonProperty("parentThumb")]
+ public string? ParentThumb { get; set; }
+
+ [JsonProperty("grandparentThumb")]
+ public string? GrandparentThumb { get; set; }
+
+ [JsonProperty("grandparentArt")]
+ public string? GrandparentArt { get; set; }
+
+ [JsonProperty("grandparentTheme")]
+ public string? GrandparentTheme { get; set; }
+
+ [JsonProperty("duration")]
+ public double? Duration { get; set; }
+
+ [JsonProperty("originallyAvailableAt")]
+ public DateTime? OriginallyAvailableAt { get; set; }
+
+ [JsonProperty("addedAt")]
+ public double? AddedAt { get; set; }
+
+ [JsonProperty("updatedAt")]
+ public double? UpdatedAt { get; set; }
+
+ [JsonProperty("Media")]
+ public List? Media { get; set; }
+
+ [JsonProperty("Guid")]
+ public List? Guids { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetOnDeckPart.cs b/PlexAPI/Models/Requests/GetOnDeckPart.cs
new file mode 100644
index 0000000..d0a3633
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetOnDeckPart.cs
@@ -0,0 +1,46 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ public class GetOnDeckPart
+ {
+
+ [JsonProperty("id")]
+ public double? Id { get; set; }
+
+ [JsonProperty("key")]
+ public string? Key { get; set; }
+
+ [JsonProperty("duration")]
+ public double? Duration { get; set; }
+
+ [JsonProperty("file")]
+ public string? File { get; set; }
+
+ [JsonProperty("size")]
+ public double? Size { get; set; }
+
+ [JsonProperty("audioProfile")]
+ public string? AudioProfile { get; set; }
+
+ [JsonProperty("container")]
+ public string? Container { get; set; }
+
+ [JsonProperty("videoProfile")]
+ public string? VideoProfile { get; set; }
+
+ [JsonProperty("Stream")]
+ public List? Stream { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetOnDeckResponse.cs b/PlexAPI/Models/Requests/GetOnDeckResponse.cs
new file mode 100644
index 0000000..7f5a6f8
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetOnDeckResponse.cs
@@ -0,0 +1,44 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetOnDeckResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// The on Deck content
+ ///
+ public GetOnDeckResponseBody? TwoHundredApplicationJsonObject { get; set; }
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetOnDeckLibraryResponseBody? FourHundredAndOneApplicationJsonObject { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetOnDeckResponseBody.cs b/PlexAPI/Models/Requests/GetOnDeckResponseBody.cs
new file mode 100644
index 0000000..4516adb
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetOnDeckResponseBody.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ ///
+ /// The on Deck content
+ ///
+ public class GetOnDeckResponseBody
+ {
+
+ [JsonProperty("MediaContainer")]
+ public GetOnDeckMediaContainer? MediaContainer { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetPlaylistContentsErrors.cs b/PlexAPI/Models/Requests/GetPlaylistContentsErrors.cs
new file mode 100644
index 0000000..470eeab
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetPlaylistContentsErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetPlaylistContentsErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetPlaylistContentsRequest.cs b/PlexAPI/Models/Requests/GetPlaylistContentsRequest.cs
new file mode 100644
index 0000000..4702fa5
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetPlaylistContentsRequest.cs
@@ -0,0 +1,30 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class GetPlaylistContentsRequest
+ {
+
+ ///
+ /// the ID of the playlist
+ ///
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=playlistID")]
+ public double PlaylistID { get; set; } = default!;
+
+ ///
+ /// the metadata type of the item to return
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=type")]
+ public double Type { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetPlaylistContentsResponse.cs b/PlexAPI/Models/Requests/GetPlaylistContentsResponse.cs
new file mode 100644
index 0000000..aa4ab5a
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetPlaylistContentsResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetPlaylistContentsResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetPlaylistContentsResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetPlaylistContentsResponseBody.cs b/PlexAPI/Models/Requests/GetPlaylistContentsResponseBody.cs
new file mode 100644
index 0000000..3685ef7
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetPlaylistContentsResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetPlaylistContentsResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetPlaylistErrors.cs b/PlexAPI/Models/Requests/GetPlaylistErrors.cs
new file mode 100644
index 0000000..f907ab6
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetPlaylistErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetPlaylistErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetPlaylistRequest.cs b/PlexAPI/Models/Requests/GetPlaylistRequest.cs
new file mode 100644
index 0000000..8154347
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetPlaylistRequest.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class GetPlaylistRequest
+ {
+
+ ///
+ /// the ID of the playlist
+ ///
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=playlistID")]
+ public double PlaylistID { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetPlaylistResponse.cs b/PlexAPI/Models/Requests/GetPlaylistResponse.cs
new file mode 100644
index 0000000..703e361
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetPlaylistResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetPlaylistResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetPlaylistResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetPlaylistResponseBody.cs b/PlexAPI/Models/Requests/GetPlaylistResponseBody.cs
new file mode 100644
index 0000000..e7f28f1
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetPlaylistResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetPlaylistResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetPlaylistsErrors.cs b/PlexAPI/Models/Requests/GetPlaylistsErrors.cs
new file mode 100644
index 0000000..fd4d183
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetPlaylistsErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetPlaylistsErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetPlaylistsRequest.cs b/PlexAPI/Models/Requests/GetPlaylistsRequest.cs
new file mode 100644
index 0000000..5e26570
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetPlaylistsRequest.cs
@@ -0,0 +1,30 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class GetPlaylistsRequest
+ {
+
+ ///
+ /// limit to a type of playlist.
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=playlistType")]
+ public PlaylistType? PlaylistType { get; set; }
+
+ ///
+ /// type of playlists to return (default is all).
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=smart")]
+ public QueryParamSmart? Smart { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetPlaylistsResponse.cs b/PlexAPI/Models/Requests/GetPlaylistsResponse.cs
new file mode 100644
index 0000000..1d12c60
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetPlaylistsResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetPlaylistsResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetPlaylistsResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetPlaylistsResponseBody.cs b/PlexAPI/Models/Requests/GetPlaylistsResponseBody.cs
new file mode 100644
index 0000000..6924055
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetPlaylistsResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetPlaylistsResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetRecentlyAddedErrors.cs b/PlexAPI/Models/Requests/GetRecentlyAddedErrors.cs
new file mode 100644
index 0000000..21137ea
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetRecentlyAddedErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetRecentlyAddedErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetRecentlyAddedLibraryResponseBody.cs b/PlexAPI/Models/Requests/GetRecentlyAddedLibraryResponseBody.cs
new file mode 100644
index 0000000..a4af190
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetRecentlyAddedLibraryResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetRecentlyAddedLibraryResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetRecentlyAddedMediaContainer.cs b/PlexAPI/Models/Requests/GetRecentlyAddedMediaContainer.cs
new file mode 100644
index 0000000..1796c1d
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetRecentlyAddedMediaContainer.cs
@@ -0,0 +1,40 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ public class GetRecentlyAddedMediaContainer
+ {
+
+ [JsonProperty("size")]
+ public double? Size { get; set; }
+
+ [JsonProperty("allowSync")]
+ public bool? AllowSync { get; set; }
+
+ [JsonProperty("identifier")]
+ public string? Identifier { get; set; }
+
+ [JsonProperty("mediaTagPrefix")]
+ public string? MediaTagPrefix { get; set; }
+
+ [JsonProperty("mediaTagVersion")]
+ public double? MediaTagVersion { get; set; }
+
+ [JsonProperty("mixedParents")]
+ public bool? MixedParents { get; set; }
+
+ [JsonProperty("Metadata")]
+ public List? Metadata { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetRecentlyAddedResponse.cs b/PlexAPI/Models/Requests/GetRecentlyAddedResponse.cs
new file mode 100644
index 0000000..c2de1ff
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetRecentlyAddedResponse.cs
@@ -0,0 +1,44 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetRecentlyAddedResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// The recently added content
+ ///
+ public GetRecentlyAddedResponseBody? TwoHundredApplicationJsonObject { get; set; }
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetRecentlyAddedLibraryResponseBody? FourHundredAndOneApplicationJsonObject { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetRecentlyAddedResponseBody.cs b/PlexAPI/Models/Requests/GetRecentlyAddedResponseBody.cs
new file mode 100644
index 0000000..4344c0b
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetRecentlyAddedResponseBody.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ ///
+ /// The recently added content
+ ///
+ public class GetRecentlyAddedResponseBody
+ {
+
+ [JsonProperty("MediaContainer")]
+ public GetRecentlyAddedMediaContainer? MediaContainer { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetResizedPhotoErrors.cs b/PlexAPI/Models/Requests/GetResizedPhotoErrors.cs
new file mode 100644
index 0000000..4a9e5e5
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetResizedPhotoErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetResizedPhotoErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetResizedPhotoRequest.cs b/PlexAPI/Models/Requests/GetResizedPhotoRequest.cs
new file mode 100644
index 0000000..70d1b7e
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetResizedPhotoRequest.cs
@@ -0,0 +1,60 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class GetResizedPhotoRequest
+ {
+
+ ///
+ /// The width for the resized photo
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=width")]
+ public double Width { get; set; } = default!;
+
+ ///
+ /// The height for the resized photo
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=height")]
+ public double Height { get; set; } = default!;
+
+ ///
+ /// The opacity for the resized photo
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=opacity")]
+ public long Opacity { get; set; } = default!;
+
+ ///
+ /// The width for the resized photo
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=blur")]
+ public double Blur { get; set; } = default!;
+
+ ///
+ /// images are always scaled proportionally. A value of '1' in minSize will make the smaller native dimension the dimension resized against.
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=minSize")]
+ public MinSize MinSize { get; set; } = default!;
+
+ ///
+ /// allow images to be resized beyond native dimensions.
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=upscale")]
+ public Upscale Upscale { get; set; } = default!;
+
+ ///
+ /// path to image within Plex
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=url")]
+ public string Url { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetResizedPhotoResponse.cs b/PlexAPI/Models/Requests/GetResizedPhotoResponse.cs
new file mode 100644
index 0000000..ba8d9c0
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetResizedPhotoResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetResizedPhotoResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetResizedPhotoResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetResizedPhotoResponseBody.cs b/PlexAPI/Models/Requests/GetResizedPhotoResponseBody.cs
new file mode 100644
index 0000000..683fe55
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetResizedPhotoResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetResizedPhotoResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetSearchResultsCountry.cs b/PlexAPI/Models/Requests/GetSearchResultsCountry.cs
new file mode 100644
index 0000000..2d83fb0
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetSearchResultsCountry.cs
@@ -0,0 +1,21 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetSearchResultsCountry
+ {
+
+ [JsonProperty("tag")]
+ public string? Tag { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetSearchResultsDirector.cs b/PlexAPI/Models/Requests/GetSearchResultsDirector.cs
new file mode 100644
index 0000000..ac49ebf
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetSearchResultsDirector.cs
@@ -0,0 +1,21 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetSearchResultsDirector
+ {
+
+ [JsonProperty("tag")]
+ public string? Tag { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetSearchResultsErrors.cs b/PlexAPI/Models/Requests/GetSearchResultsErrors.cs
new file mode 100644
index 0000000..97d9cbd
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetSearchResultsErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetSearchResultsErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetSearchResultsGenre.cs b/PlexAPI/Models/Requests/GetSearchResultsGenre.cs
new file mode 100644
index 0000000..98f5f21
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetSearchResultsGenre.cs
@@ -0,0 +1,21 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetSearchResultsGenre
+ {
+
+ [JsonProperty("tag")]
+ public string? Tag { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetSearchResultsMedia.cs b/PlexAPI/Models/Requests/GetSearchResultsMedia.cs
new file mode 100644
index 0000000..05d567d
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetSearchResultsMedia.cs
@@ -0,0 +1,64 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ public class GetSearchResultsMedia
+ {
+
+ [JsonProperty("id")]
+ public double? Id { get; set; }
+
+ [JsonProperty("duration")]
+ public double? Duration { get; set; }
+
+ [JsonProperty("bitrate")]
+ public double? Bitrate { get; set; }
+
+ [JsonProperty("width")]
+ public double? Width { get; set; }
+
+ [JsonProperty("height")]
+ public double? Height { get; set; }
+
+ [JsonProperty("aspectRatio")]
+ public double? AspectRatio { get; set; }
+
+ [JsonProperty("audioChannels")]
+ public double? AudioChannels { get; set; }
+
+ [JsonProperty("audioCodec")]
+ public string? AudioCodec { get; set; }
+
+ [JsonProperty("videoCodec")]
+ public string? VideoCodec { get; set; }
+
+ [JsonProperty("videoResolution")]
+ public double? VideoResolution { get; set; }
+
+ [JsonProperty("container")]
+ public string? Container { get; set; }
+
+ [JsonProperty("videoFrameRate")]
+ public string? VideoFrameRate { get; set; }
+
+ [JsonProperty("audioProfile")]
+ public string? AudioProfile { get; set; }
+
+ [JsonProperty("videoProfile")]
+ public string? VideoProfile { get; set; }
+
+ [JsonProperty("Part")]
+ public List? Part { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetSearchResultsMediaContainer.cs b/PlexAPI/Models/Requests/GetSearchResultsMediaContainer.cs
new file mode 100644
index 0000000..721be51
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetSearchResultsMediaContainer.cs
@@ -0,0 +1,37 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ public class GetSearchResultsMediaContainer
+ {
+
+ [JsonProperty("size")]
+ public double? Size { get; set; }
+
+ [JsonProperty("identifier")]
+ public string? Identifier { get; set; }
+
+ [JsonProperty("mediaTagPrefix")]
+ public string? MediaTagPrefix { get; set; }
+
+ [JsonProperty("mediaTagVersion")]
+ public double? MediaTagVersion { get; set; }
+
+ [JsonProperty("Metadata")]
+ public List? Metadata { get; set; }
+
+ [JsonProperty("Provider")]
+ public List? Provider { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetSearchResultsMetadata.cs b/PlexAPI/Models/Requests/GetSearchResultsMetadata.cs
new file mode 100644
index 0000000..21f6bb4
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetSearchResultsMetadata.cs
@@ -0,0 +1,122 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+ using System;
+
+ public class GetSearchResultsMetadata
+ {
+
+ [JsonProperty("allowSync")]
+ public bool? AllowSync { get; set; }
+
+ [JsonProperty("librarySectionID")]
+ public double? LibrarySectionID { get; set; }
+
+ [JsonProperty("librarySectionTitle")]
+ public string? LibrarySectionTitle { get; set; }
+
+ [JsonProperty("librarySectionUUID")]
+ public string? LibrarySectionUUID { get; set; }
+
+ [JsonProperty("personal")]
+ public bool? Personal { get; set; }
+
+ [JsonProperty("sourceTitle")]
+ public string? SourceTitle { get; set; }
+
+ [JsonProperty("ratingKey")]
+ public double? RatingKey { get; set; }
+
+ [JsonProperty("key")]
+ public string? Key { get; set; }
+
+ [JsonProperty("guid")]
+ public string? Guid { get; set; }
+
+ [JsonProperty("studio")]
+ public string? Studio { get; set; }
+
+ [JsonProperty("type")]
+ public string? Type { get; set; }
+
+ [JsonProperty("title")]
+ public string? Title { get; set; }
+
+ [JsonProperty("contentRating")]
+ public string? ContentRating { get; set; }
+
+ [JsonProperty("summary")]
+ public string? Summary { get; set; }
+
+ [JsonProperty("rating")]
+ public double? Rating { get; set; }
+
+ [JsonProperty("audienceRating")]
+ public double? AudienceRating { get; set; }
+
+ [JsonProperty("year")]
+ public double? Year { get; set; }
+
+ [JsonProperty("tagline")]
+ public string? Tagline { get; set; }
+
+ [JsonProperty("thumb")]
+ public string? Thumb { get; set; }
+
+ [JsonProperty("art")]
+ public string? Art { get; set; }
+
+ [JsonProperty("duration")]
+ public double? Duration { get; set; }
+
+ [JsonProperty("originallyAvailableAt")]
+ public DateTime? OriginallyAvailableAt { get; set; }
+
+ [JsonProperty("addedAt")]
+ public double? AddedAt { get; set; }
+
+ [JsonProperty("updatedAt")]
+ public double? UpdatedAt { get; set; }
+
+ [JsonProperty("audienceRatingImage")]
+ public string? AudienceRatingImage { get; set; }
+
+ [JsonProperty("chapterSource")]
+ public string? ChapterSource { get; set; }
+
+ [JsonProperty("primaryExtraKey")]
+ public string? PrimaryExtraKey { get; set; }
+
+ [JsonProperty("ratingImage")]
+ public string? RatingImage { get; set; }
+
+ [JsonProperty("Media")]
+ public List? Media { get; set; }
+
+ [JsonProperty("Genre")]
+ public List? Genre { get; set; }
+
+ [JsonProperty("Director")]
+ public List? Director { get; set; }
+
+ [JsonProperty("Writer")]
+ public List? Writer { get; set; }
+
+ [JsonProperty("Country")]
+ public List? Country { get; set; }
+
+ [JsonProperty("Role")]
+ public List? Role { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetSearchResultsPart.cs b/PlexAPI/Models/Requests/GetSearchResultsPart.cs
new file mode 100644
index 0000000..6119db8
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetSearchResultsPart.cs
@@ -0,0 +1,42 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetSearchResultsPart
+ {
+
+ [JsonProperty("id")]
+ public double? Id { get; set; }
+
+ [JsonProperty("key")]
+ public string? Key { get; set; }
+
+ [JsonProperty("duration")]
+ public double? Duration { get; set; }
+
+ [JsonProperty("file")]
+ public string? File { get; set; }
+
+ [JsonProperty("size")]
+ public double? Size { get; set; }
+
+ [JsonProperty("audioProfile")]
+ public string? AudioProfile { get; set; }
+
+ [JsonProperty("container")]
+ public string? Container { get; set; }
+
+ [JsonProperty("videoProfile")]
+ public string? VideoProfile { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetSearchResultsRequest.cs b/PlexAPI/Models/Requests/GetSearchResultsRequest.cs
new file mode 100644
index 0000000..9833f9e
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetSearchResultsRequest.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class GetSearchResultsRequest
+ {
+
+ ///
+ /// The search query string to use
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=query")]
+ public string Query { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetSearchResultsResponse.cs b/PlexAPI/Models/Requests/GetSearchResultsResponse.cs
new file mode 100644
index 0000000..d9a01ac
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetSearchResultsResponse.cs
@@ -0,0 +1,44 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetSearchResultsResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Search Results
+ ///
+ public GetSearchResultsResponseBody? TwoHundredApplicationJsonObject { get; set; }
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetSearchResultsSearchResponseBody? FourHundredAndOneApplicationJsonObject { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetSearchResultsResponseBody.cs b/PlexAPI/Models/Requests/GetSearchResultsResponseBody.cs
new file mode 100644
index 0000000..110be00
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetSearchResultsResponseBody.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ ///
+ /// Search Results
+ ///
+ public class GetSearchResultsResponseBody
+ {
+
+ [JsonProperty("MediaContainer")]
+ public GetSearchResultsMediaContainer? MediaContainer { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetSearchResultsRole.cs b/PlexAPI/Models/Requests/GetSearchResultsRole.cs
new file mode 100644
index 0000000..74606e8
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetSearchResultsRole.cs
@@ -0,0 +1,21 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetSearchResultsRole
+ {
+
+ [JsonProperty("tag")]
+ public string? Tag { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetSearchResultsSearchResponseBody.cs b/PlexAPI/Models/Requests/GetSearchResultsSearchResponseBody.cs
new file mode 100644
index 0000000..7040de7
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetSearchResultsSearchResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetSearchResultsSearchResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetSearchResultsWriter.cs b/PlexAPI/Models/Requests/GetSearchResultsWriter.cs
new file mode 100644
index 0000000..5d5a645
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetSearchResultsWriter.cs
@@ -0,0 +1,21 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetSearchResultsWriter
+ {
+
+ [JsonProperty("tag")]
+ public string? Tag { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetServerActivitiesActivitiesResponseBody.cs b/PlexAPI/Models/Requests/GetServerActivitiesActivitiesResponseBody.cs
new file mode 100644
index 0000000..9363ce9
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetServerActivitiesActivitiesResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetServerActivitiesActivitiesResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetServerActivitiesErrors.cs b/PlexAPI/Models/Requests/GetServerActivitiesErrors.cs
new file mode 100644
index 0000000..0723ee6
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetServerActivitiesErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetServerActivitiesErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetServerActivitiesMediaContainer.cs b/PlexAPI/Models/Requests/GetServerActivitiesMediaContainer.cs
new file mode 100644
index 0000000..bb1e706
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetServerActivitiesMediaContainer.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ public class GetServerActivitiesMediaContainer
+ {
+
+ [JsonProperty("size")]
+ public double? Size { get; set; }
+
+ [JsonProperty("Activity")]
+ public List? Activity { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetServerActivitiesResponse.cs b/PlexAPI/Models/Requests/GetServerActivitiesResponse.cs
new file mode 100644
index 0000000..54e6924
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetServerActivitiesResponse.cs
@@ -0,0 +1,44 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetServerActivitiesResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// The Server Activities
+ ///
+ public GetServerActivitiesResponseBody? TwoHundredApplicationJsonObject { get; set; }
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetServerActivitiesActivitiesResponseBody? FourHundredAndOneApplicationJsonObject { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetServerActivitiesResponseBody.cs b/PlexAPI/Models/Requests/GetServerActivitiesResponseBody.cs
new file mode 100644
index 0000000..39b8b3c
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetServerActivitiesResponseBody.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ ///
+ /// The Server Activities
+ ///
+ public class GetServerActivitiesResponseBody
+ {
+
+ [JsonProperty("MediaContainer")]
+ public GetServerActivitiesMediaContainer? MediaContainer { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetServerCapabilitiesResponse.cs b/PlexAPI/Models/Requests/GetServerCapabilitiesResponse.cs
new file mode 100644
index 0000000..dcca9bd
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetServerCapabilitiesResponse.cs
@@ -0,0 +1,44 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetServerCapabilitiesResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// The Server Capabilities
+ ///
+ public GetServerCapabilitiesResponseBody? TwoHundredApplicationJsonObject { get; set; }
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetServerCapabilitiesServerResponseBody? FourHundredAndOneApplicationJsonObject { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetServerCapabilitiesResponseBody.cs b/PlexAPI/Models/Requests/GetServerCapabilitiesResponseBody.cs
new file mode 100644
index 0000000..5ba99b1
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetServerCapabilitiesResponseBody.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ ///
+ /// The Server Capabilities
+ ///
+ public class GetServerCapabilitiesResponseBody
+ {
+
+ [JsonProperty("MediaContainer")]
+ public MediaContainer? MediaContainer { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetServerCapabilitiesServerResponseBody.cs b/PlexAPI/Models/Requests/GetServerCapabilitiesServerResponseBody.cs
new file mode 100644
index 0000000..bad709c
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetServerCapabilitiesServerResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetServerCapabilitiesServerResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetServerIdentityErrors.cs b/PlexAPI/Models/Requests/GetServerIdentityErrors.cs
new file mode 100644
index 0000000..e3ee569
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetServerIdentityErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetServerIdentityErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetServerIdentityMediaContainer.cs b/PlexAPI/Models/Requests/GetServerIdentityMediaContainer.cs
new file mode 100644
index 0000000..45c1132
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetServerIdentityMediaContainer.cs
@@ -0,0 +1,30 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetServerIdentityMediaContainer
+ {
+
+ [JsonProperty("size")]
+ public double? Size { get; set; }
+
+ [JsonProperty("claimed")]
+ public bool? Claimed { get; set; }
+
+ [JsonProperty("machineIdentifier")]
+ public string? MachineIdentifier { get; set; }
+
+ [JsonProperty("version")]
+ public string? Version { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetServerIdentityResponse.cs b/PlexAPI/Models/Requests/GetServerIdentityResponse.cs
new file mode 100644
index 0000000..1584341
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetServerIdentityResponse.cs
@@ -0,0 +1,44 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetServerIdentityResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// The Transcode Sessions
+ ///
+ public GetServerIdentityResponseBody? TwoHundredApplicationJsonObject { get; set; }
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetServerIdentityServerResponseBody? FourHundredAndOneApplicationJsonObject { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetServerIdentityResponseBody.cs b/PlexAPI/Models/Requests/GetServerIdentityResponseBody.cs
new file mode 100644
index 0000000..cfe3a39
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetServerIdentityResponseBody.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ ///
+ /// The Transcode Sessions
+ ///
+ public class GetServerIdentityResponseBody
+ {
+
+ [JsonProperty("MediaContainer")]
+ public GetServerIdentityMediaContainer? MediaContainer { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetServerIdentityServerResponseBody.cs b/PlexAPI/Models/Requests/GetServerIdentityServerResponseBody.cs
new file mode 100644
index 0000000..e82b40d
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetServerIdentityServerResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetServerIdentityServerResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetServerListErrors.cs b/PlexAPI/Models/Requests/GetServerListErrors.cs
new file mode 100644
index 0000000..2abd5e6
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetServerListErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetServerListErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetServerListMediaContainer.cs b/PlexAPI/Models/Requests/GetServerListMediaContainer.cs
new file mode 100644
index 0000000..6790153
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetServerListMediaContainer.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ public class GetServerListMediaContainer
+ {
+
+ [JsonProperty("size")]
+ public double? Size { get; set; }
+
+ [JsonProperty("Server")]
+ public List? Server { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetServerListResponse.cs b/PlexAPI/Models/Requests/GetServerListResponse.cs
new file mode 100644
index 0000000..ffc04cc
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetServerListResponse.cs
@@ -0,0 +1,44 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetServerListResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// List of Servers
+ ///
+ public GetServerListResponseBody? TwoHundredApplicationJsonObject { get; set; }
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetServerListServerResponseBody? FourHundredAndOneApplicationJsonObject { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetServerListResponseBody.cs b/PlexAPI/Models/Requests/GetServerListResponseBody.cs
new file mode 100644
index 0000000..fd81d91
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetServerListResponseBody.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ ///
+ /// List of Servers
+ ///
+ public class GetServerListResponseBody
+ {
+
+ [JsonProperty("MediaContainer")]
+ public GetServerListMediaContainer? MediaContainer { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetServerListServer.cs b/PlexAPI/Models/Requests/GetServerListServer.cs
new file mode 100644
index 0000000..304789c
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetServerListServer.cs
@@ -0,0 +1,36 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetServerListServer
+ {
+
+ [JsonProperty("name")]
+ public string? Name { get; set; }
+
+ [JsonProperty("host")]
+ public string? Host { get; set; }
+
+ [JsonProperty("address")]
+ public string? Address { get; set; }
+
+ [JsonProperty("port")]
+ public double? Port { get; set; }
+
+ [JsonProperty("machineIdentifier")]
+ public string? MachineIdentifier { get; set; }
+
+ [JsonProperty("version")]
+ public string? Version { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetServerListServerResponseBody.cs b/PlexAPI/Models/Requests/GetServerListServerResponseBody.cs
new file mode 100644
index 0000000..0c14b8a
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetServerListServerResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetServerListServerResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetServerPreferencesErrors.cs b/PlexAPI/Models/Requests/GetServerPreferencesErrors.cs
new file mode 100644
index 0000000..aa8bfc8
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetServerPreferencesErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetServerPreferencesErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetServerPreferencesResponse.cs b/PlexAPI/Models/Requests/GetServerPreferencesResponse.cs
new file mode 100644
index 0000000..6e1213d
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetServerPreferencesResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetServerPreferencesResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetServerPreferencesResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetServerPreferencesResponseBody.cs b/PlexAPI/Models/Requests/GetServerPreferencesResponseBody.cs
new file mode 100644
index 0000000..a7932b6
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetServerPreferencesResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetServerPreferencesResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetSessionHistoryErrors.cs b/PlexAPI/Models/Requests/GetSessionHistoryErrors.cs
new file mode 100644
index 0000000..7f0d094
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetSessionHistoryErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetSessionHistoryErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetSessionHistoryResponse.cs b/PlexAPI/Models/Requests/GetSessionHistoryResponse.cs
new file mode 100644
index 0000000..954501d
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetSessionHistoryResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetSessionHistoryResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetSessionHistoryResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetSessionHistoryResponseBody.cs b/PlexAPI/Models/Requests/GetSessionHistoryResponseBody.cs
new file mode 100644
index 0000000..0210955
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetSessionHistoryResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetSessionHistoryResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetSessionsErrors.cs b/PlexAPI/Models/Requests/GetSessionsErrors.cs
new file mode 100644
index 0000000..63f53b7
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetSessionsErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetSessionsErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetSessionsResponse.cs b/PlexAPI/Models/Requests/GetSessionsResponse.cs
new file mode 100644
index 0000000..7923a73
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetSessionsResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetSessionsResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetSessionsResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetSessionsResponseBody.cs b/PlexAPI/Models/Requests/GetSessionsResponseBody.cs
new file mode 100644
index 0000000..ec22211
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetSessionsResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetSessionsResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetSourceConnectionInformationErrors.cs b/PlexAPI/Models/Requests/GetSourceConnectionInformationErrors.cs
new file mode 100644
index 0000000..9a53b84
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetSourceConnectionInformationErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetSourceConnectionInformationErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetSourceConnectionInformationRequest.cs b/PlexAPI/Models/Requests/GetSourceConnectionInformationRequest.cs
new file mode 100644
index 0000000..bfc41ac
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetSourceConnectionInformationRequest.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class GetSourceConnectionInformationRequest
+ {
+
+ ///
+ /// The source identifier with an included prefix.
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=source")]
+ public string Source { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetSourceConnectionInformationResponse.cs b/PlexAPI/Models/Requests/GetSourceConnectionInformationResponse.cs
new file mode 100644
index 0000000..8b341ac
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetSourceConnectionInformationResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetSourceConnectionInformationResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetSourceConnectionInformationResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetSourceConnectionInformationResponseBody.cs b/PlexAPI/Models/Requests/GetSourceConnectionInformationResponseBody.cs
new file mode 100644
index 0000000..4b972f6
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetSourceConnectionInformationResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetSourceConnectionInformationResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetTimelineErrors.cs b/PlexAPI/Models/Requests/GetTimelineErrors.cs
new file mode 100644
index 0000000..de215f8
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetTimelineErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetTimelineErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetTimelineRequest.cs b/PlexAPI/Models/Requests/GetTimelineRequest.cs
new file mode 100644
index 0000000..d79e47d
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetTimelineRequest.cs
@@ -0,0 +1,78 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class GetTimelineRequest
+ {
+
+ ///
+ /// The rating key of the media item
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=ratingKey")]
+ public double RatingKey { get; set; } = default!;
+
+ ///
+ /// The key of the media item to get the timeline for
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=key")]
+ public string Key { get; set; } = default!;
+
+ ///
+ /// The state of the media item
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=state")]
+ public State State { get; set; } = default!;
+
+ ///
+ /// Whether the media item has MDE
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=hasMDE")]
+ public double HasMDE { get; set; } = default!;
+
+ ///
+ /// The time of the media item
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=time")]
+ public double Time { get; set; } = default!;
+
+ ///
+ /// The duration of the media item
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=duration")]
+ public double Duration { get; set; } = default!;
+
+ ///
+ /// The context of the media item
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=context")]
+ public string Context { get; set; } = default!;
+
+ ///
+ /// The play queue item ID of the media item
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=playQueueItemID")]
+ public double PlayQueueItemID { get; set; } = default!;
+
+ ///
+ /// The playback time of the media item
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=playBackTime")]
+ public double PlayBackTime { get; set; } = default!;
+
+ ///
+ /// The row of the media item
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=row")]
+ public double Row { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetTimelineResponse.cs b/PlexAPI/Models/Requests/GetTimelineResponse.cs
new file mode 100644
index 0000000..1f03c42
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetTimelineResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetTimelineResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetTimelineResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetTimelineResponseBody.cs b/PlexAPI/Models/Requests/GetTimelineResponseBody.cs
new file mode 100644
index 0000000..1f8ceaa
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetTimelineResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetTimelineResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetTranscodeSessionsErrors.cs b/PlexAPI/Models/Requests/GetTranscodeSessionsErrors.cs
new file mode 100644
index 0000000..582f8a3
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetTranscodeSessionsErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetTranscodeSessionsErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetTranscodeSessionsMediaContainer.cs b/PlexAPI/Models/Requests/GetTranscodeSessionsMediaContainer.cs
new file mode 100644
index 0000000..3182faf
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetTranscodeSessionsMediaContainer.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ public class GetTranscodeSessionsMediaContainer
+ {
+
+ [JsonProperty("size")]
+ public double? Size { get; set; }
+
+ [JsonProperty("TranscodeSession")]
+ public List? TranscodeSession { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetTranscodeSessionsResponse.cs b/PlexAPI/Models/Requests/GetTranscodeSessionsResponse.cs
new file mode 100644
index 0000000..987c787
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetTranscodeSessionsResponse.cs
@@ -0,0 +1,44 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetTranscodeSessionsResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// The Transcode Sessions
+ ///
+ public GetTranscodeSessionsResponseBody? TwoHundredApplicationJsonObject { get; set; }
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetTranscodeSessionsSessionsResponseBody? FourHundredAndOneApplicationJsonObject { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetTranscodeSessionsResponseBody.cs b/PlexAPI/Models/Requests/GetTranscodeSessionsResponseBody.cs
new file mode 100644
index 0000000..409a5f9
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetTranscodeSessionsResponseBody.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ ///
+ /// The Transcode Sessions
+ ///
+ public class GetTranscodeSessionsResponseBody
+ {
+
+ [JsonProperty("MediaContainer")]
+ public GetTranscodeSessionsMediaContainer? MediaContainer { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetTranscodeSessionsSessionsResponseBody.cs b/PlexAPI/Models/Requests/GetTranscodeSessionsSessionsResponseBody.cs
new file mode 100644
index 0000000..b8e0991
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetTranscodeSessionsSessionsResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetTranscodeSessionsSessionsResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetTransientTokenErrors.cs b/PlexAPI/Models/Requests/GetTransientTokenErrors.cs
new file mode 100644
index 0000000..796f326
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetTransientTokenErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetTransientTokenErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetTransientTokenRequest.cs b/PlexAPI/Models/Requests/GetTransientTokenRequest.cs
new file mode 100644
index 0000000..fb55da1
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetTransientTokenRequest.cs
@@ -0,0 +1,30 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class GetTransientTokenRequest
+ {
+
+ ///
+ /// `delegation` - This is the only supported `type` parameter.
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=type")]
+ public QueryParamType Type { get; set; } = default!;
+
+ ///
+ /// `all` - This is the only supported `scope` parameter.
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=scope")]
+ public Scope Scope { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetTransientTokenResponse.cs b/PlexAPI/Models/Requests/GetTransientTokenResponse.cs
new file mode 100644
index 0000000..1cf27db
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetTransientTokenResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetTransientTokenResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetTransientTokenResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetTransientTokenResponseBody.cs b/PlexAPI/Models/Requests/GetTransientTokenResponseBody.cs
new file mode 100644
index 0000000..a1ef0a6
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetTransientTokenResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetTransientTokenResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetUpdateStatusErrors.cs b/PlexAPI/Models/Requests/GetUpdateStatusErrors.cs
new file mode 100644
index 0000000..2f715b5
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetUpdateStatusErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class GetUpdateStatusErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetUpdateStatusResponse.cs b/PlexAPI/Models/Requests/GetUpdateStatusResponse.cs
new file mode 100644
index 0000000..447db53
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetUpdateStatusResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class GetUpdateStatusResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public GetUpdateStatusResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/GetUpdateStatusResponseBody.cs b/PlexAPI/Models/Requests/GetUpdateStatusResponseBody.cs
new file mode 100644
index 0000000..ee42cb0
--- /dev/null
+++ b/PlexAPI/Models/Requests/GetUpdateStatusResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class GetUpdateStatusResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/Guids.cs b/PlexAPI/Models/Requests/Guids.cs
new file mode 100644
index 0000000..35caf48
--- /dev/null
+++ b/PlexAPI/Models/Requests/Guids.cs
@@ -0,0 +1,21 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class Guids
+ {
+
+ [JsonProperty("id")]
+ public string? Id { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/IncludeDetails.cs b/PlexAPI/Models/Requests/IncludeDetails.cs
new file mode 100644
index 0000000..30a1607
--- /dev/null
+++ b/PlexAPI/Models/Requests/IncludeDetails.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+
+ ///
+ /// Whether or not to include details for a section (types, filters, and sorts).
+ ///
+ ///
+ /// Only exists for backwards compatibility, media providers other than the server libraries have it on always.
+ ///
+ ///
+ ///
+ public enum IncludeDetails
+ {
+ Zero = 0,
+ One = 1,
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/Level.cs b/PlexAPI/Models/Requests/Level.cs
new file mode 100644
index 0000000..5751619
--- /dev/null
+++ b/PlexAPI/Models/Requests/Level.cs
@@ -0,0 +1,34 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+
+ ///
+ /// An integer log level to write to the PMS log with.
+ ///
+ ///
+ /// 0: Error
+ /// 1: Warning
+ /// 2: Info
+ /// 3: Debug
+ /// 4: Verbose
+ ///
+ ///
+ ///
+ public enum Level
+ {
+ Zero = 0,
+ One = 1,
+ Two = 2,
+ Three = 3,
+ Four = 4,
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/LogLineErrors.cs b/PlexAPI/Models/Requests/LogLineErrors.cs
new file mode 100644
index 0000000..9b65304
--- /dev/null
+++ b/PlexAPI/Models/Requests/LogLineErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class LogLineErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/LogLineRequest.cs b/PlexAPI/Models/Requests/LogLineRequest.cs
new file mode 100644
index 0000000..d9fddc6
--- /dev/null
+++ b/PlexAPI/Models/Requests/LogLineRequest.cs
@@ -0,0 +1,45 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class LogLineRequest
+ {
+
+ ///
+ /// An integer log level to write to the PMS log with.
+ ///
+ ///
+ /// 0: Error
+ /// 1: Warning
+ /// 2: Info
+ /// 3: Debug
+ /// 4: Verbose
+ ///
+ ///
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=level")]
+ public Level Level { get; set; } = default!;
+
+ ///
+ /// The text of the message to write to the log.
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=message")]
+ public string Message { get; set; } = default!;
+
+ ///
+ /// a string indicating the source of the message.
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=source")]
+ public string Source { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/LogLineResponse.cs b/PlexAPI/Models/Requests/LogLineResponse.cs
new file mode 100644
index 0000000..9ef129f
--- /dev/null
+++ b/PlexAPI/Models/Requests/LogLineResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class LogLineResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public LogLineResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/LogLineResponseBody.cs b/PlexAPI/Models/Requests/LogLineResponseBody.cs
new file mode 100644
index 0000000..128405e
--- /dev/null
+++ b/PlexAPI/Models/Requests/LogLineResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class LogLineResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/LogMultiLineErrors.cs b/PlexAPI/Models/Requests/LogMultiLineErrors.cs
new file mode 100644
index 0000000..fbcbf7d
--- /dev/null
+++ b/PlexAPI/Models/Requests/LogMultiLineErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class LogMultiLineErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/LogMultiLineResponse.cs b/PlexAPI/Models/Requests/LogMultiLineResponse.cs
new file mode 100644
index 0000000..48a91a1
--- /dev/null
+++ b/PlexAPI/Models/Requests/LogMultiLineResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class LogMultiLineResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public LogMultiLineResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/LogMultiLineResponseBody.cs b/PlexAPI/Models/Requests/LogMultiLineResponseBody.cs
new file mode 100644
index 0000000..aa8b557
--- /dev/null
+++ b/PlexAPI/Models/Requests/LogMultiLineResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class LogMultiLineResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/MarkPlayedErrors.cs b/PlexAPI/Models/Requests/MarkPlayedErrors.cs
new file mode 100644
index 0000000..d0f7452
--- /dev/null
+++ b/PlexAPI/Models/Requests/MarkPlayedErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class MarkPlayedErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/MarkPlayedRequest.cs b/PlexAPI/Models/Requests/MarkPlayedRequest.cs
new file mode 100644
index 0000000..c9996be
--- /dev/null
+++ b/PlexAPI/Models/Requests/MarkPlayedRequest.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class MarkPlayedRequest
+ {
+
+ ///
+ /// The media key to mark as played
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=key")]
+ public double Key { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/MarkPlayedResponse.cs b/PlexAPI/Models/Requests/MarkPlayedResponse.cs
new file mode 100644
index 0000000..0f94c8a
--- /dev/null
+++ b/PlexAPI/Models/Requests/MarkPlayedResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class MarkPlayedResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public MarkPlayedResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/MarkPlayedResponseBody.cs b/PlexAPI/Models/Requests/MarkPlayedResponseBody.cs
new file mode 100644
index 0000000..1404291
--- /dev/null
+++ b/PlexAPI/Models/Requests/MarkPlayedResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class MarkPlayedResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/MarkUnplayedErrors.cs b/PlexAPI/Models/Requests/MarkUnplayedErrors.cs
new file mode 100644
index 0000000..67aad12
--- /dev/null
+++ b/PlexAPI/Models/Requests/MarkUnplayedErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class MarkUnplayedErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/MarkUnplayedRequest.cs b/PlexAPI/Models/Requests/MarkUnplayedRequest.cs
new file mode 100644
index 0000000..9f9e7ed
--- /dev/null
+++ b/PlexAPI/Models/Requests/MarkUnplayedRequest.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class MarkUnplayedRequest
+ {
+
+ ///
+ /// The media key to mark as Unplayed
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=key")]
+ public double Key { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/MarkUnplayedResponse.cs b/PlexAPI/Models/Requests/MarkUnplayedResponse.cs
new file mode 100644
index 0000000..45c840c
--- /dev/null
+++ b/PlexAPI/Models/Requests/MarkUnplayedResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class MarkUnplayedResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public MarkUnplayedResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/MarkUnplayedResponseBody.cs b/PlexAPI/Models/Requests/MarkUnplayedResponseBody.cs
new file mode 100644
index 0000000..4eb7c39
--- /dev/null
+++ b/PlexAPI/Models/Requests/MarkUnplayedResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class MarkUnplayedResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/Media.cs b/PlexAPI/Models/Requests/Media.cs
new file mode 100644
index 0000000..1d53786
--- /dev/null
+++ b/PlexAPI/Models/Requests/Media.cs
@@ -0,0 +1,67 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ public class Media
+ {
+
+ [JsonProperty("id")]
+ public double? Id { get; set; }
+
+ [JsonProperty("duration")]
+ public double? Duration { get; set; }
+
+ [JsonProperty("bitrate")]
+ public double? Bitrate { get; set; }
+
+ [JsonProperty("width")]
+ public double? Width { get; set; }
+
+ [JsonProperty("height")]
+ public double? Height { get; set; }
+
+ [JsonProperty("aspectRatio")]
+ public double? AspectRatio { get; set; }
+
+ [JsonProperty("audioChannels")]
+ public double? AudioChannels { get; set; }
+
+ [JsonProperty("audioCodec")]
+ public string? AudioCodec { get; set; }
+
+ [JsonProperty("videoCodec")]
+ public string? VideoCodec { get; set; }
+
+ [JsonProperty("videoResolution")]
+ public double? VideoResolution { get; set; }
+
+ [JsonProperty("container")]
+ public string? Container { get; set; }
+
+ [JsonProperty("videoFrameRate")]
+ public string? VideoFrameRate { get; set; }
+
+ [JsonProperty("optimizedForStreaming")]
+ public double? OptimizedForStreaming { get; set; }
+
+ [JsonProperty("has64bitOffsets")]
+ public bool? Has64bitOffsets { get; set; }
+
+ [JsonProperty("videoProfile")]
+ public string? VideoProfile { get; set; }
+
+ [JsonProperty("Part")]
+ public List? Part { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/MediaContainer.cs b/PlexAPI/Models/Requests/MediaContainer.cs
new file mode 100644
index 0000000..9536970
--- /dev/null
+++ b/PlexAPI/Models/Requests/MediaContainer.cs
@@ -0,0 +1,172 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ public class MediaContainer
+ {
+
+ [JsonProperty("size")]
+ public double? Size { get; set; }
+
+ [JsonProperty("allowCameraUpload")]
+ public bool? AllowCameraUpload { get; set; }
+
+ [JsonProperty("allowChannelAccess")]
+ public bool? AllowChannelAccess { get; set; }
+
+ [JsonProperty("allowMediaDeletion")]
+ public bool? AllowMediaDeletion { get; set; }
+
+ [JsonProperty("allowSharing")]
+ public bool? AllowSharing { get; set; }
+
+ [JsonProperty("allowSync")]
+ public bool? AllowSync { get; set; }
+
+ [JsonProperty("allowTuners")]
+ public bool? AllowTuners { get; set; }
+
+ [JsonProperty("backgroundProcessing")]
+ public bool? BackgroundProcessing { get; set; }
+
+ [JsonProperty("certificate")]
+ public bool? Certificate { get; set; }
+
+ [JsonProperty("companionProxy")]
+ public bool? CompanionProxy { get; set; }
+
+ [JsonProperty("countryCode")]
+ public string? CountryCode { get; set; }
+
+ [JsonProperty("diagnostics")]
+ public string? Diagnostics { get; set; }
+
+ [JsonProperty("eventStream")]
+ public bool? EventStream { get; set; }
+
+ [JsonProperty("friendlyName")]
+ public string? FriendlyName { get; set; }
+
+ [JsonProperty("hubSearch")]
+ public bool? HubSearch { get; set; }
+
+ [JsonProperty("itemClusters")]
+ public bool? ItemClusters { get; set; }
+
+ [JsonProperty("livetv")]
+ public double? Livetv { get; set; }
+
+ [JsonProperty("machineIdentifier")]
+ public string? MachineIdentifier { get; set; }
+
+ [JsonProperty("mediaProviders")]
+ public bool? MediaProviders { get; set; }
+
+ [JsonProperty("multiuser")]
+ public bool? Multiuser { get; set; }
+
+ [JsonProperty("musicAnalysis")]
+ public double? MusicAnalysis { get; set; }
+
+ [JsonProperty("myPlex")]
+ public bool? MyPlex { get; set; }
+
+ [JsonProperty("myPlexMappingState")]
+ public string? MyPlexMappingState { get; set; }
+
+ [JsonProperty("myPlexSigninState")]
+ public string? MyPlexSigninState { get; set; }
+
+ [JsonProperty("myPlexSubscription")]
+ public bool? MyPlexSubscription { get; set; }
+
+ [JsonProperty("myPlexUsername")]
+ public string? MyPlexUsername { get; set; }
+
+ [JsonProperty("offlineTranscode")]
+ public double? OfflineTranscode { get; set; }
+
+ [JsonProperty("ownerFeatures")]
+ public string? OwnerFeatures { get; set; }
+
+ [JsonProperty("photoAutoTag")]
+ public bool? PhotoAutoTag { get; set; }
+
+ [JsonProperty("platform")]
+ public string? Platform { get; set; }
+
+ [JsonProperty("platformVersion")]
+ public string? PlatformVersion { get; set; }
+
+ [JsonProperty("pluginHost")]
+ public bool? PluginHost { get; set; }
+
+ [JsonProperty("pushNotifications")]
+ public bool? PushNotifications { get; set; }
+
+ [JsonProperty("readOnlyLibraries")]
+ public bool? ReadOnlyLibraries { get; set; }
+
+ [JsonProperty("streamingBrainABRVersion")]
+ public double? StreamingBrainABRVersion { get; set; }
+
+ [JsonProperty("streamingBrainVersion")]
+ public double? StreamingBrainVersion { get; set; }
+
+ [JsonProperty("sync")]
+ public bool? Sync { get; set; }
+
+ [JsonProperty("transcoderActiveVideoSessions")]
+ public double? TranscoderActiveVideoSessions { get; set; }
+
+ [JsonProperty("transcoderAudio")]
+ public bool? TranscoderAudio { get; set; }
+
+ [JsonProperty("transcoderLyrics")]
+ public bool? TranscoderLyrics { get; set; }
+
+ [JsonProperty("transcoderPhoto")]
+ public bool? TranscoderPhoto { get; set; }
+
+ [JsonProperty("transcoderSubtitles")]
+ public bool? TranscoderSubtitles { get; set; }
+
+ [JsonProperty("transcoderVideo")]
+ public bool? TranscoderVideo { get; set; }
+
+ [JsonProperty("transcoderVideoBitrates")]
+ public string? TranscoderVideoBitrates { get; set; }
+
+ [JsonProperty("transcoderVideoQualities")]
+ public string? TranscoderVideoQualities { get; set; }
+
+ [JsonProperty("transcoderVideoResolutions")]
+ public string? TranscoderVideoResolutions { get; set; }
+
+ [JsonProperty("updatedAt")]
+ public double? UpdatedAt { get; set; }
+
+ [JsonProperty("updater")]
+ public bool? Updater { get; set; }
+
+ [JsonProperty("version")]
+ public string? Version { get; set; }
+
+ [JsonProperty("voiceSearch")]
+ public bool? VoiceSearch { get; set; }
+
+ [JsonProperty("Directory")]
+ public List? Directory { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/Metadata.cs b/PlexAPI/Models/Requests/Metadata.cs
new file mode 100644
index 0000000..4a12ef0
--- /dev/null
+++ b/PlexAPI/Models/Requests/Metadata.cs
@@ -0,0 +1,116 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+ using System;
+
+ public class Metadata
+ {
+
+ [JsonProperty("allowSync")]
+ public bool? AllowSync { get; set; }
+
+ [JsonProperty("librarySectionID")]
+ public double? LibrarySectionID { get; set; }
+
+ [JsonProperty("librarySectionTitle")]
+ public string? LibrarySectionTitle { get; set; }
+
+ [JsonProperty("librarySectionUUID")]
+ public string? LibrarySectionUUID { get; set; }
+
+ [JsonProperty("ratingKey")]
+ public double? RatingKey { get; set; }
+
+ [JsonProperty("key")]
+ public string? Key { get; set; }
+
+ [JsonProperty("guid")]
+ public string? Guid { get; set; }
+
+ [JsonProperty("studio")]
+ public string? Studio { get; set; }
+
+ [JsonProperty("type")]
+ public string? Type { get; set; }
+
+ [JsonProperty("title")]
+ public string? Title { get; set; }
+
+ [JsonProperty("contentRating")]
+ public string? ContentRating { get; set; }
+
+ [JsonProperty("summary")]
+ public string? Summary { get; set; }
+
+ [JsonProperty("rating")]
+ public double? Rating { get; set; }
+
+ [JsonProperty("audienceRating")]
+ public double? AudienceRating { get; set; }
+
+ [JsonProperty("year")]
+ public double? Year { get; set; }
+
+ [JsonProperty("tagline")]
+ public string? Tagline { get; set; }
+
+ [JsonProperty("thumb")]
+ public string? Thumb { get; set; }
+
+ [JsonProperty("art")]
+ public string? Art { get; set; }
+
+ [JsonProperty("duration")]
+ public double? Duration { get; set; }
+
+ [JsonProperty("originallyAvailableAt")]
+ public DateTime? OriginallyAvailableAt { get; set; }
+
+ [JsonProperty("addedAt")]
+ public double? AddedAt { get; set; }
+
+ [JsonProperty("updatedAt")]
+ public double? UpdatedAt { get; set; }
+
+ [JsonProperty("audienceRatingImage")]
+ public string? AudienceRatingImage { get; set; }
+
+ [JsonProperty("chapterSource")]
+ public string? ChapterSource { get; set; }
+
+ [JsonProperty("primaryExtraKey")]
+ public string? PrimaryExtraKey { get; set; }
+
+ [JsonProperty("ratingImage")]
+ public string? RatingImage { get; set; }
+
+ [JsonProperty("Media")]
+ public List? Media { get; set; }
+
+ [JsonProperty("Genre")]
+ public List? Genre { get; set; }
+
+ [JsonProperty("Director")]
+ public List? Director { get; set; }
+
+ [JsonProperty("Writer")]
+ public List? Writer { get; set; }
+
+ [JsonProperty("Country")]
+ public List? Country { get; set; }
+
+ [JsonProperty("Role")]
+ public List? Role { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/MinSize.cs b/PlexAPI/Models/Requests/MinSize.cs
new file mode 100644
index 0000000..66da56f
--- /dev/null
+++ b/PlexAPI/Models/Requests/MinSize.cs
@@ -0,0 +1,22 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+
+ ///
+ /// images are always scaled proportionally. A value of '1' in minSize will make the smaller native dimension the dimension resized against.
+ ///
+ public enum MinSize
+ {
+ Zero = 0,
+ One = 1,
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/MyPlex.cs b/PlexAPI/Models/Requests/MyPlex.cs
new file mode 100644
index 0000000..e857e9b
--- /dev/null
+++ b/PlexAPI/Models/Requests/MyPlex.cs
@@ -0,0 +1,54 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class MyPlex
+ {
+
+ [JsonProperty("authToken")]
+ public string? AuthToken { get; set; }
+
+ [JsonProperty("username")]
+ public string? Username { get; set; }
+
+ [JsonProperty("mappingState")]
+ public string? MappingState { get; set; }
+
+ [JsonProperty("mappingError")]
+ public string? MappingError { get; set; }
+
+ [JsonProperty("signInState")]
+ public string? SignInState { get; set; }
+
+ [JsonProperty("publicAddress")]
+ public string? PublicAddress { get; set; }
+
+ [JsonProperty("publicPort")]
+ public double? PublicPort { get; set; }
+
+ [JsonProperty("privateAddress")]
+ public string? PrivateAddress { get; set; }
+
+ [JsonProperty("privatePort")]
+ public double? PrivatePort { get; set; }
+
+ [JsonProperty("subscriptionFeatures")]
+ public string? SubscriptionFeatures { get; set; }
+
+ [JsonProperty("subscriptionActive")]
+ public bool? SubscriptionActive { get; set; }
+
+ [JsonProperty("subscriptionState")]
+ public string? SubscriptionState { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/OnlyTransient.cs b/PlexAPI/Models/Requests/OnlyTransient.cs
new file mode 100644
index 0000000..3210a74
--- /dev/null
+++ b/PlexAPI/Models/Requests/OnlyTransient.cs
@@ -0,0 +1,22 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+
+ ///
+ /// Only return hubs which are "transient", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added).
+ ///
+ public enum OnlyTransient
+ {
+ Zero = 0,
+ One = 1,
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/Part.cs b/PlexAPI/Models/Requests/Part.cs
new file mode 100644
index 0000000..63742f4
--- /dev/null
+++ b/PlexAPI/Models/Requests/Part.cs
@@ -0,0 +1,48 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class Part
+ {
+
+ [JsonProperty("id")]
+ public double? Id { get; set; }
+
+ [JsonProperty("key")]
+ public string? Key { get; set; }
+
+ [JsonProperty("duration")]
+ public double? Duration { get; set; }
+
+ [JsonProperty("file")]
+ public string? File { get; set; }
+
+ [JsonProperty("size")]
+ public double? Size { get; set; }
+
+ [JsonProperty("container")]
+ public string? Container { get; set; }
+
+ [JsonProperty("has64bitOffsets")]
+ public bool? Has64bitOffsets { get; set; }
+
+ [JsonProperty("hasThumbnail")]
+ public double? HasThumbnail { get; set; }
+
+ [JsonProperty("optimizedForStreaming")]
+ public bool? OptimizedForStreaming { get; set; }
+
+ [JsonProperty("videoProfile")]
+ public string? VideoProfile { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/PathParamTaskName.cs b/PlexAPI/Models/Requests/PathParamTaskName.cs
new file mode 100644
index 0000000..0919394
--- /dev/null
+++ b/PlexAPI/Models/Requests/PathParamTaskName.cs
@@ -0,0 +1,83 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System;
+
+ ///
+ /// The name of the task to be started.
+ ///
+ public enum PathParamTaskName
+ {
+ [JsonProperty("BackupDatabase")]
+ BackupDatabase,
+ [JsonProperty("BuildGracenoteCollections")]
+ BuildGracenoteCollections,
+ [JsonProperty("CheckForUpdates")]
+ CheckForUpdates,
+ [JsonProperty("CleanOldBundles")]
+ CleanOldBundles,
+ [JsonProperty("CleanOldCacheFiles")]
+ CleanOldCacheFiles,
+ [JsonProperty("DeepMediaAnalysis")]
+ DeepMediaAnalysis,
+ [JsonProperty("GenerateAutoTags")]
+ GenerateAutoTags,
+ [JsonProperty("GenerateChapterThumbs")]
+ GenerateChapterThumbs,
+ [JsonProperty("GenerateMediaIndexFiles")]
+ GenerateMediaIndexFiles,
+ [JsonProperty("OptimizeDatabase")]
+ OptimizeDatabase,
+ [JsonProperty("RefreshLibraries")]
+ RefreshLibraries,
+ [JsonProperty("RefreshLocalMedia")]
+ RefreshLocalMedia,
+ [JsonProperty("RefreshPeriodicMetadata")]
+ RefreshPeriodicMetadata,
+ [JsonProperty("UpgradeMediaAnalysis")]
+ UpgradeMediaAnalysis,
+ }
+
+ public static class PathParamTaskNameExtension
+ {
+ public static string Value(this PathParamTaskName value)
+ {
+ return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString();
+ }
+
+ public static PathParamTaskName ToEnum(this string value)
+ {
+ foreach(var field in typeof(PathParamTaskName).GetFields())
+ {
+ var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false);
+ if (attributes.Length == 0)
+ {
+ continue;
+ }
+
+ var attribute = attributes[0] as JsonPropertyAttribute;
+ if (attribute != null && attribute.PropertyName == value)
+ {
+ var enumVal = field.GetValue(null);
+
+ if (enumVal is PathParamTaskName)
+ {
+ return (PathParamTaskName)enumVal;
+ }
+ }
+ }
+
+ throw new Exception($"Unknown value {value} for enum PathParamTaskName");
+ }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/PerformSearchErrors.cs b/PlexAPI/Models/Requests/PerformSearchErrors.cs
new file mode 100644
index 0000000..b2b311f
--- /dev/null
+++ b/PlexAPI/Models/Requests/PerformSearchErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class PerformSearchErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/PerformSearchRequest.cs b/PlexAPI/Models/Requests/PerformSearchRequest.cs
new file mode 100644
index 0000000..c935517
--- /dev/null
+++ b/PlexAPI/Models/Requests/PerformSearchRequest.cs
@@ -0,0 +1,36 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class PerformSearchRequest
+ {
+
+ ///
+ /// The query term
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=query")]
+ public string Query { get; set; } = default!;
+
+ ///
+ /// This gives context to the search, and can result in re-ordering of search result hubs
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=sectionId")]
+ public double? SectionId { get; set; }
+
+ ///
+ /// The number of items to return per hub
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=limit")]
+ public double? Limit { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/PerformSearchResponse.cs b/PlexAPI/Models/Requests/PerformSearchResponse.cs
new file mode 100644
index 0000000..0d76805
--- /dev/null
+++ b/PlexAPI/Models/Requests/PerformSearchResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class PerformSearchResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public PerformSearchResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/PerformSearchResponseBody.cs b/PlexAPI/Models/Requests/PerformSearchResponseBody.cs
new file mode 100644
index 0000000..e11e47d
--- /dev/null
+++ b/PlexAPI/Models/Requests/PerformSearchResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class PerformSearchResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/PerformVoiceSearchErrors.cs b/PlexAPI/Models/Requests/PerformVoiceSearchErrors.cs
new file mode 100644
index 0000000..cd8da72
--- /dev/null
+++ b/PlexAPI/Models/Requests/PerformVoiceSearchErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class PerformVoiceSearchErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/PerformVoiceSearchRequest.cs b/PlexAPI/Models/Requests/PerformVoiceSearchRequest.cs
new file mode 100644
index 0000000..42c3db3
--- /dev/null
+++ b/PlexAPI/Models/Requests/PerformVoiceSearchRequest.cs
@@ -0,0 +1,36 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class PerformVoiceSearchRequest
+ {
+
+ ///
+ /// The query term
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=query")]
+ public string Query { get; set; } = default!;
+
+ ///
+ /// This gives context to the search, and can result in re-ordering of search result hubs
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=sectionId")]
+ public double? SectionId { get; set; }
+
+ ///
+ /// The number of items to return per hub
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=limit")]
+ public double? Limit { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/PerformVoiceSearchResponse.cs b/PlexAPI/Models/Requests/PerformVoiceSearchResponse.cs
new file mode 100644
index 0000000..cfd2bdd
--- /dev/null
+++ b/PlexAPI/Models/Requests/PerformVoiceSearchResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class PerformVoiceSearchResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public PerformVoiceSearchResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/PerformVoiceSearchResponseBody.cs b/PlexAPI/Models/Requests/PerformVoiceSearchResponseBody.cs
new file mode 100644
index 0000000..594d55c
--- /dev/null
+++ b/PlexAPI/Models/Requests/PerformVoiceSearchResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class PerformVoiceSearchResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/PlaylistType.cs b/PlexAPI/Models/Requests/PlaylistType.cs
new file mode 100644
index 0000000..08dbced
--- /dev/null
+++ b/PlexAPI/Models/Requests/PlaylistType.cs
@@ -0,0 +1,61 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System;
+
+ ///
+ /// limit to a type of playlist.
+ ///
+ public enum PlaylistType
+ {
+ [JsonProperty("audio")]
+ Audio,
+ [JsonProperty("video")]
+ Video,
+ [JsonProperty("photo")]
+ Photo,
+ }
+
+ public static class PlaylistTypeExtension
+ {
+ public static string Value(this PlaylistType value)
+ {
+ return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString();
+ }
+
+ public static PlaylistType ToEnum(this string value)
+ {
+ foreach(var field in typeof(PlaylistType).GetFields())
+ {
+ var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false);
+ if (attributes.Length == 0)
+ {
+ continue;
+ }
+
+ var attribute = attributes[0] as JsonPropertyAttribute;
+ if (attribute != null && attribute.PropertyName == value)
+ {
+ var enumVal = field.GetValue(null);
+
+ if (enumVal is PlaylistType)
+ {
+ return (PlaylistType)enumVal;
+ }
+ }
+ }
+
+ throw new Exception($"Unknown value {value} for enum PlaylistType");
+ }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/Provider.cs b/PlexAPI/Models/Requests/Provider.cs
new file mode 100644
index 0000000..90c8321
--- /dev/null
+++ b/PlexAPI/Models/Requests/Provider.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class Provider
+ {
+
+ [JsonProperty("key")]
+ public string? Key { get; set; }
+
+ [JsonProperty("title")]
+ public string? Title { get; set; }
+
+ [JsonProperty("type")]
+ public string? Type { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/QueryParamOnlyTransient.cs b/PlexAPI/Models/Requests/QueryParamOnlyTransient.cs
new file mode 100644
index 0000000..3928832
--- /dev/null
+++ b/PlexAPI/Models/Requests/QueryParamOnlyTransient.cs
@@ -0,0 +1,22 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+
+ ///
+ /// Only return hubs which are "transient", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added).
+ ///
+ public enum QueryParamOnlyTransient
+ {
+ Zero = 0,
+ One = 1,
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/QueryParamSmart.cs b/PlexAPI/Models/Requests/QueryParamSmart.cs
new file mode 100644
index 0000000..93ef735
--- /dev/null
+++ b/PlexAPI/Models/Requests/QueryParamSmart.cs
@@ -0,0 +1,22 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+
+ ///
+ /// type of playlists to return (default is all).
+ ///
+ public enum QueryParamSmart
+ {
+ Zero = 0,
+ One = 1,
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/QueryParamType.cs b/PlexAPI/Models/Requests/QueryParamType.cs
new file mode 100644
index 0000000..3cedc3d
--- /dev/null
+++ b/PlexAPI/Models/Requests/QueryParamType.cs
@@ -0,0 +1,57 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System;
+
+ ///
+ /// `delegation` - This is the only supported `type` parameter.
+ ///
+ public enum QueryParamType
+ {
+ [JsonProperty("delegation")]
+ Delegation,
+ }
+
+ public static class QueryParamTypeExtension
+ {
+ public static string Value(this QueryParamType value)
+ {
+ return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString();
+ }
+
+ public static QueryParamType ToEnum(this string value)
+ {
+ foreach(var field in typeof(QueryParamType).GetFields())
+ {
+ var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false);
+ if (attributes.Length == 0)
+ {
+ continue;
+ }
+
+ var attribute = attributes[0] as JsonPropertyAttribute;
+ if (attribute != null && attribute.PropertyName == value)
+ {
+ var enumVal = field.GetValue(null);
+
+ if (enumVal is QueryParamType)
+ {
+ return (QueryParamType)enumVal;
+ }
+ }
+ }
+
+ throw new Exception($"Unknown value {value} for enum QueryParamType");
+ }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/RefreshLibraryErrors.cs b/PlexAPI/Models/Requests/RefreshLibraryErrors.cs
new file mode 100644
index 0000000..a8e8c36
--- /dev/null
+++ b/PlexAPI/Models/Requests/RefreshLibraryErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class RefreshLibraryErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/RefreshLibraryRequest.cs b/PlexAPI/Models/Requests/RefreshLibraryRequest.cs
new file mode 100644
index 0000000..e80bd40
--- /dev/null
+++ b/PlexAPI/Models/Requests/RefreshLibraryRequest.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class RefreshLibraryRequest
+ {
+
+ ///
+ /// the Id of the library to refresh
+ ///
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=sectionId")]
+ public double SectionId { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/RefreshLibraryResponse.cs b/PlexAPI/Models/Requests/RefreshLibraryResponse.cs
new file mode 100644
index 0000000..c735df0
--- /dev/null
+++ b/PlexAPI/Models/Requests/RefreshLibraryResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class RefreshLibraryResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public RefreshLibraryResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/RefreshLibraryResponseBody.cs b/PlexAPI/Models/Requests/RefreshLibraryResponseBody.cs
new file mode 100644
index 0000000..6fbda6d
--- /dev/null
+++ b/PlexAPI/Models/Requests/RefreshLibraryResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class RefreshLibraryResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/ResponseBody.cs b/PlexAPI/Models/Requests/ResponseBody.cs
new file mode 100644
index 0000000..065e625
--- /dev/null
+++ b/PlexAPI/Models/Requests/ResponseBody.cs
@@ -0,0 +1,21 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class ResponseBody
+ {
+
+ [JsonProperty("MediaContainer")]
+ public GetAvailableClientsMediaContainer? MediaContainer { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/Role.cs b/PlexAPI/Models/Requests/Role.cs
new file mode 100644
index 0000000..4d70bfb
--- /dev/null
+++ b/PlexAPI/Models/Requests/Role.cs
@@ -0,0 +1,21 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class Role
+ {
+
+ [JsonProperty("tag")]
+ public string? Tag { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/Scope.cs b/PlexAPI/Models/Requests/Scope.cs
new file mode 100644
index 0000000..74e805a
--- /dev/null
+++ b/PlexAPI/Models/Requests/Scope.cs
@@ -0,0 +1,57 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System;
+
+ ///
+ /// `all` - This is the only supported `scope` parameter.
+ ///
+ public enum Scope
+ {
+ [JsonProperty("all")]
+ All,
+ }
+
+ public static class ScopeExtension
+ {
+ public static string Value(this Scope value)
+ {
+ return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString();
+ }
+
+ public static Scope ToEnum(this string value)
+ {
+ foreach(var field in typeof(Scope).GetFields())
+ {
+ var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false);
+ if (attributes.Length == 0)
+ {
+ continue;
+ }
+
+ var attribute = attributes[0] as JsonPropertyAttribute;
+ if (attribute != null && attribute.PropertyName == value)
+ {
+ var enumVal = field.GetValue(null);
+
+ if (enumVal is Scope)
+ {
+ return (Scope)enumVal;
+ }
+ }
+ }
+
+ throw new Exception($"Unknown value {value} for enum Scope");
+ }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/Server.cs b/PlexAPI/Models/Requests/Server.cs
new file mode 100644
index 0000000..9ca1768
--- /dev/null
+++ b/PlexAPI/Models/Requests/Server.cs
@@ -0,0 +1,51 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class Server
+ {
+
+ [JsonProperty("name")]
+ public string? Name { get; set; }
+
+ [JsonProperty("host")]
+ public string? Host { get; set; }
+
+ [JsonProperty("address")]
+ public string? Address { get; set; }
+
+ [JsonProperty("port")]
+ public double? Port { get; set; }
+
+ [JsonProperty("machineIdentifier")]
+ public string? MachineIdentifier { get; set; }
+
+ [JsonProperty("version")]
+ public string? Version { get; set; }
+
+ [JsonProperty("protocol")]
+ public string? Protocol { get; set; }
+
+ [JsonProperty("product")]
+ public string? Product { get; set; }
+
+ [JsonProperty("deviceClass")]
+ public string? DeviceClass { get; set; }
+
+ [JsonProperty("protocolVersion")]
+ public double? ProtocolVersion { get; set; }
+
+ [JsonProperty("protocolCapabilities")]
+ public string? ProtocolCapabilities { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/Skip.cs b/PlexAPI/Models/Requests/Skip.cs
new file mode 100644
index 0000000..aa1c4be
--- /dev/null
+++ b/PlexAPI/Models/Requests/Skip.cs
@@ -0,0 +1,22 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+
+ ///
+ /// Indicate that the latest version should be marked as skipped. The <Release> entry for this version will have the `state` set to `skipped`.
+ ///
+ public enum Skip
+ {
+ Zero = 0,
+ One = 1,
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/Smart.cs b/PlexAPI/Models/Requests/Smart.cs
new file mode 100644
index 0000000..a3b165c
--- /dev/null
+++ b/PlexAPI/Models/Requests/Smart.cs
@@ -0,0 +1,22 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+
+ ///
+ /// whether the playlist is smart or not
+ ///
+ public enum Smart
+ {
+ Zero = 0,
+ One = 1,
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/StartAllTasksErrors.cs b/PlexAPI/Models/Requests/StartAllTasksErrors.cs
new file mode 100644
index 0000000..8a2b825
--- /dev/null
+++ b/PlexAPI/Models/Requests/StartAllTasksErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class StartAllTasksErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/StartAllTasksResponse.cs b/PlexAPI/Models/Requests/StartAllTasksResponse.cs
new file mode 100644
index 0000000..c42f856
--- /dev/null
+++ b/PlexAPI/Models/Requests/StartAllTasksResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class StartAllTasksResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public StartAllTasksResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/StartAllTasksResponseBody.cs b/PlexAPI/Models/Requests/StartAllTasksResponseBody.cs
new file mode 100644
index 0000000..6e82015
--- /dev/null
+++ b/PlexAPI/Models/Requests/StartAllTasksResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class StartAllTasksResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/StartTaskErrors.cs b/PlexAPI/Models/Requests/StartTaskErrors.cs
new file mode 100644
index 0000000..18bb201
--- /dev/null
+++ b/PlexAPI/Models/Requests/StartTaskErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class StartTaskErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/StartTaskRequest.cs b/PlexAPI/Models/Requests/StartTaskRequest.cs
new file mode 100644
index 0000000..e10e862
--- /dev/null
+++ b/PlexAPI/Models/Requests/StartTaskRequest.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class StartTaskRequest
+ {
+
+ ///
+ /// the name of the task to be started.
+ ///
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=taskName")]
+ public TaskName TaskName { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/StartTaskResponse.cs b/PlexAPI/Models/Requests/StartTaskResponse.cs
new file mode 100644
index 0000000..7912965
--- /dev/null
+++ b/PlexAPI/Models/Requests/StartTaskResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class StartTaskResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public StartTaskResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/StartTaskResponseBody.cs b/PlexAPI/Models/Requests/StartTaskResponseBody.cs
new file mode 100644
index 0000000..29f8f32
--- /dev/null
+++ b/PlexAPI/Models/Requests/StartTaskResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class StartTaskResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/StartUniversalTranscodeErrors.cs b/PlexAPI/Models/Requests/StartUniversalTranscodeErrors.cs
new file mode 100644
index 0000000..6d9d113
--- /dev/null
+++ b/PlexAPI/Models/Requests/StartUniversalTranscodeErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class StartUniversalTranscodeErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/StartUniversalTranscodeRequest.cs b/PlexAPI/Models/Requests/StartUniversalTranscodeRequest.cs
new file mode 100644
index 0000000..2ff1e3a
--- /dev/null
+++ b/PlexAPI/Models/Requests/StartUniversalTranscodeRequest.cs
@@ -0,0 +1,114 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class StartUniversalTranscodeRequest
+ {
+
+ ///
+ /// Whether the media item has MDE
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=hasMDE")]
+ public double HasMDE { get; set; } = default!;
+
+ ///
+ /// The path to the media item to transcode
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=path")]
+ public string Path { get; set; } = default!;
+
+ ///
+ /// The index of the media item to transcode
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=mediaIndex")]
+ public double MediaIndex { get; set; } = default!;
+
+ ///
+ /// The index of the part to transcode
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=partIndex")]
+ public double PartIndex { get; set; } = default!;
+
+ ///
+ /// The protocol to use for the transcode session
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=protocol")]
+ public string Protocol { get; set; } = default!;
+
+ ///
+ /// Whether to use fast seek or not
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=fastSeek")]
+ public double? FastSeek { get; set; }
+
+ ///
+ /// Whether to use direct play or not
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=directPlay")]
+ public double? DirectPlay { get; set; }
+
+ ///
+ /// Whether to use direct stream or not
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=directStream")]
+ public double? DirectStream { get; set; }
+
+ ///
+ /// The size of the subtitles
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=subtitleSize")]
+ public double? SubtitleSize { get; set; }
+
+ ///
+ /// The subtitles
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=subtites")]
+ public string? Subtites { get; set; }
+
+ ///
+ /// The audio boost
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=audioBoost")]
+ public double? AudioBoost { get; set; }
+
+ ///
+ /// The location of the transcode session
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=location")]
+ public string? Location { get; set; }
+
+ ///
+ /// The size of the media buffer
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=mediaBufferSize")]
+ public double? MediaBufferSize { get; set; }
+
+ ///
+ /// The session ID
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=session")]
+ public string? Session { get; set; }
+
+ ///
+ /// Whether to add a debug overlay or not
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=addDebugOverlay")]
+ public double? AddDebugOverlay { get; set; }
+
+ ///
+ /// Whether to auto adjust quality or not
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=autoAdjustQuality")]
+ public double? AutoAdjustQuality { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/StartUniversalTranscodeResponse.cs b/PlexAPI/Models/Requests/StartUniversalTranscodeResponse.cs
new file mode 100644
index 0000000..d1e015a
--- /dev/null
+++ b/PlexAPI/Models/Requests/StartUniversalTranscodeResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class StartUniversalTranscodeResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public StartUniversalTranscodeResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/StartUniversalTranscodeResponseBody.cs b/PlexAPI/Models/Requests/StartUniversalTranscodeResponseBody.cs
new file mode 100644
index 0000000..0372b9e
--- /dev/null
+++ b/PlexAPI/Models/Requests/StartUniversalTranscodeResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class StartUniversalTranscodeResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/State.cs b/PlexAPI/Models/Requests/State.cs
new file mode 100644
index 0000000..d34f7a8
--- /dev/null
+++ b/PlexAPI/Models/Requests/State.cs
@@ -0,0 +1,61 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System;
+
+ ///
+ /// The state of the media item
+ ///
+ public enum State
+ {
+ [JsonProperty("playing")]
+ Playing,
+ [JsonProperty("paused")]
+ Paused,
+ [JsonProperty("stopped")]
+ Stopped,
+ }
+
+ public static class StateExtension
+ {
+ public static string Value(this State value)
+ {
+ return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString();
+ }
+
+ public static State ToEnum(this string value)
+ {
+ foreach(var field in typeof(State).GetFields())
+ {
+ var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false);
+ if (attributes.Length == 0)
+ {
+ continue;
+ }
+
+ var attribute = attributes[0] as JsonPropertyAttribute;
+ if (attribute != null && attribute.PropertyName == value)
+ {
+ var enumVal = field.GetValue(null);
+
+ if (enumVal is State)
+ {
+ return (State)enumVal;
+ }
+ }
+ }
+
+ throw new Exception($"Unknown value {value} for enum State");
+ }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/StopAllTasksErrors.cs b/PlexAPI/Models/Requests/StopAllTasksErrors.cs
new file mode 100644
index 0000000..6a6c946
--- /dev/null
+++ b/PlexAPI/Models/Requests/StopAllTasksErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class StopAllTasksErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/StopAllTasksResponse.cs b/PlexAPI/Models/Requests/StopAllTasksResponse.cs
new file mode 100644
index 0000000..901e6a7
--- /dev/null
+++ b/PlexAPI/Models/Requests/StopAllTasksResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class StopAllTasksResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public StopAllTasksResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/StopAllTasksResponseBody.cs b/PlexAPI/Models/Requests/StopAllTasksResponseBody.cs
new file mode 100644
index 0000000..3e8f795
--- /dev/null
+++ b/PlexAPI/Models/Requests/StopAllTasksResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class StopAllTasksResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/StopTaskErrors.cs b/PlexAPI/Models/Requests/StopTaskErrors.cs
new file mode 100644
index 0000000..a371c4a
--- /dev/null
+++ b/PlexAPI/Models/Requests/StopTaskErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class StopTaskErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/StopTaskRequest.cs b/PlexAPI/Models/Requests/StopTaskRequest.cs
new file mode 100644
index 0000000..6d5cfae
--- /dev/null
+++ b/PlexAPI/Models/Requests/StopTaskRequest.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class StopTaskRequest
+ {
+
+ ///
+ /// The name of the task to be started.
+ ///
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=taskName")]
+ public PathParamTaskName TaskName { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/StopTaskResponse.cs b/PlexAPI/Models/Requests/StopTaskResponse.cs
new file mode 100644
index 0000000..7b8bb7e
--- /dev/null
+++ b/PlexAPI/Models/Requests/StopTaskResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class StopTaskResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public StopTaskResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/StopTaskResponseBody.cs b/PlexAPI/Models/Requests/StopTaskResponseBody.cs
new file mode 100644
index 0000000..851ca70
--- /dev/null
+++ b/PlexAPI/Models/Requests/StopTaskResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class StopTaskResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/StopTranscodeSessionErrors.cs b/PlexAPI/Models/Requests/StopTranscodeSessionErrors.cs
new file mode 100644
index 0000000..508508f
--- /dev/null
+++ b/PlexAPI/Models/Requests/StopTranscodeSessionErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class StopTranscodeSessionErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/StopTranscodeSessionRequest.cs b/PlexAPI/Models/Requests/StopTranscodeSessionRequest.cs
new file mode 100644
index 0000000..5b53e5b
--- /dev/null
+++ b/PlexAPI/Models/Requests/StopTranscodeSessionRequest.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class StopTranscodeSessionRequest
+ {
+
+ ///
+ /// the Key of the transcode session to stop
+ ///
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=sessionKey")]
+ public string SessionKey { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/StopTranscodeSessionResponse.cs b/PlexAPI/Models/Requests/StopTranscodeSessionResponse.cs
new file mode 100644
index 0000000..33c1ac8
--- /dev/null
+++ b/PlexAPI/Models/Requests/StopTranscodeSessionResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class StopTranscodeSessionResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public StopTranscodeSessionResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/StopTranscodeSessionResponseBody.cs b/PlexAPI/Models/Requests/StopTranscodeSessionResponseBody.cs
new file mode 100644
index 0000000..224c613
--- /dev/null
+++ b/PlexAPI/Models/Requests/StopTranscodeSessionResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class StopTranscodeSessionResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/Stream.cs b/PlexAPI/Models/Requests/Stream.cs
new file mode 100644
index 0000000..93c655a
--- /dev/null
+++ b/PlexAPI/Models/Requests/Stream.cs
@@ -0,0 +1,87 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class Stream
+ {
+
+ [JsonProperty("id")]
+ public double? Id { get; set; }
+
+ [JsonProperty("streamType")]
+ public double? StreamType { get; set; }
+
+ [JsonProperty("default")]
+ public bool? Default { get; set; }
+
+ [JsonProperty("codec")]
+ public string? Codec { get; set; }
+
+ [JsonProperty("index")]
+ public double? Index { get; set; }
+
+ [JsonProperty("bitrate")]
+ public double? Bitrate { get; set; }
+
+ [JsonProperty("language")]
+ public string? Language { get; set; }
+
+ [JsonProperty("languageTag")]
+ public string? LanguageTag { get; set; }
+
+ [JsonProperty("languageCode")]
+ public string? LanguageCode { get; set; }
+
+ [JsonProperty("bitDepth")]
+ public double? BitDepth { get; set; }
+
+ [JsonProperty("chromaLocation")]
+ public string? ChromaLocation { get; set; }
+
+ [JsonProperty("chromaSubsampling")]
+ public string? ChromaSubsampling { get; set; }
+
+ [JsonProperty("codedHeight")]
+ public double? CodedHeight { get; set; }
+
+ [JsonProperty("codedWidth")]
+ public double? CodedWidth { get; set; }
+
+ [JsonProperty("colorRange")]
+ public string? ColorRange { get; set; }
+
+ [JsonProperty("frameRate")]
+ public double? FrameRate { get; set; }
+
+ [JsonProperty("height")]
+ public double? Height { get; set; }
+
+ [JsonProperty("level")]
+ public double? Level { get; set; }
+
+ [JsonProperty("profile")]
+ public string? Profile { get; set; }
+
+ [JsonProperty("refFrames")]
+ public double? RefFrames { get; set; }
+
+ [JsonProperty("width")]
+ public double? Width { get; set; }
+
+ [JsonProperty("displayTitle")]
+ public string? DisplayTitle { get; set; }
+
+ [JsonProperty("extendedDisplayTitle")]
+ public string? ExtendedDisplayTitle { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/TaskName.cs b/PlexAPI/Models/Requests/TaskName.cs
new file mode 100644
index 0000000..5028a29
--- /dev/null
+++ b/PlexAPI/Models/Requests/TaskName.cs
@@ -0,0 +1,83 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System;
+
+ ///
+ /// the name of the task to be started.
+ ///
+ public enum TaskName
+ {
+ [JsonProperty("BackupDatabase")]
+ BackupDatabase,
+ [JsonProperty("BuildGracenoteCollections")]
+ BuildGracenoteCollections,
+ [JsonProperty("CheckForUpdates")]
+ CheckForUpdates,
+ [JsonProperty("CleanOldBundles")]
+ CleanOldBundles,
+ [JsonProperty("CleanOldCacheFiles")]
+ CleanOldCacheFiles,
+ [JsonProperty("DeepMediaAnalysis")]
+ DeepMediaAnalysis,
+ [JsonProperty("GenerateAutoTags")]
+ GenerateAutoTags,
+ [JsonProperty("GenerateChapterThumbs")]
+ GenerateChapterThumbs,
+ [JsonProperty("GenerateMediaIndexFiles")]
+ GenerateMediaIndexFiles,
+ [JsonProperty("OptimizeDatabase")]
+ OptimizeDatabase,
+ [JsonProperty("RefreshLibraries")]
+ RefreshLibraries,
+ [JsonProperty("RefreshLocalMedia")]
+ RefreshLocalMedia,
+ [JsonProperty("RefreshPeriodicMetadata")]
+ RefreshPeriodicMetadata,
+ [JsonProperty("UpgradeMediaAnalysis")]
+ UpgradeMediaAnalysis,
+ }
+
+ public static class TaskNameExtension
+ {
+ public static string Value(this TaskName value)
+ {
+ return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString();
+ }
+
+ public static TaskName ToEnum(this string value)
+ {
+ foreach(var field in typeof(TaskName).GetFields())
+ {
+ var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false);
+ if (attributes.Length == 0)
+ {
+ continue;
+ }
+
+ var attribute = attributes[0] as JsonPropertyAttribute;
+ if (attribute != null && attribute.PropertyName == value)
+ {
+ var enumVal = field.GetValue(null);
+
+ if (enumVal is TaskName)
+ {
+ return (TaskName)enumVal;
+ }
+ }
+ }
+
+ throw new Exception($"Unknown value {value} for enum TaskName");
+ }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/Tonight.cs b/PlexAPI/Models/Requests/Tonight.cs
new file mode 100644
index 0000000..e6db473
--- /dev/null
+++ b/PlexAPI/Models/Requests/Tonight.cs
@@ -0,0 +1,22 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+
+ ///
+ /// Indicate that you want the update to run during the next Butler execution. Omitting this or setting it to false indicates that the update should install
+ ///
+ public enum Tonight
+ {
+ Zero = 0,
+ One = 1,
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/TranscodeSession.cs b/PlexAPI/Models/Requests/TranscodeSession.cs
new file mode 100644
index 0000000..184104a
--- /dev/null
+++ b/PlexAPI/Models/Requests/TranscodeSession.cs
@@ -0,0 +1,84 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class TranscodeSession
+ {
+
+ [JsonProperty("key")]
+ public string? Key { get; set; }
+
+ [JsonProperty("throttled")]
+ public bool? Throttled { get; set; }
+
+ [JsonProperty("complete")]
+ public bool? Complete { get; set; }
+
+ [JsonProperty("progress")]
+ public double? Progress { get; set; }
+
+ [JsonProperty("size")]
+ public double? Size { get; set; }
+
+ [JsonProperty("speed")]
+ public double? Speed { get; set; }
+
+ [JsonProperty("error")]
+ public bool? Error { get; set; }
+
+ [JsonProperty("duration")]
+ public double? Duration { get; set; }
+
+ [JsonProperty("context")]
+ public string? Context { get; set; }
+
+ [JsonProperty("sourceVideoCodec")]
+ public string? SourceVideoCodec { get; set; }
+
+ [JsonProperty("sourceAudioCodec")]
+ public string? SourceAudioCodec { get; set; }
+
+ [JsonProperty("videoDecision")]
+ public string? VideoDecision { get; set; }
+
+ [JsonProperty("audioDecision")]
+ public string? AudioDecision { get; set; }
+
+ [JsonProperty("protocol")]
+ public string? Protocol { get; set; }
+
+ [JsonProperty("container")]
+ public string? Container { get; set; }
+
+ [JsonProperty("videoCodec")]
+ public string? VideoCodec { get; set; }
+
+ [JsonProperty("audioCodec")]
+ public string? AudioCodec { get; set; }
+
+ [JsonProperty("audioChannels")]
+ public double? AudioChannels { get; set; }
+
+ [JsonProperty("transcodeHwRequested")]
+ public bool? TranscodeHwRequested { get; set; }
+
+ [JsonProperty("timeStamp")]
+ public double? TimeStamp { get; set; }
+
+ [JsonProperty("maxOffsetAvailable")]
+ public double? MaxOffsetAvailable { get; set; }
+
+ [JsonProperty("minOffsetAvailable")]
+ public double? MinOffsetAvailable { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/Type.cs b/PlexAPI/Models/Requests/Type.cs
new file mode 100644
index 0000000..0cf667e
--- /dev/null
+++ b/PlexAPI/Models/Requests/Type.cs
@@ -0,0 +1,61 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System;
+
+ ///
+ /// type of playlist to create
+ ///
+ public enum Type
+ {
+ [JsonProperty("audio")]
+ Audio,
+ [JsonProperty("video")]
+ Video,
+ [JsonProperty("photo")]
+ Photo,
+ }
+
+ public static class TypeExtension
+ {
+ public static string Value(this Type value)
+ {
+ return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString();
+ }
+
+ public static Type ToEnum(this string value)
+ {
+ foreach(var field in typeof(Type).GetFields())
+ {
+ var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false);
+ if (attributes.Length == 0)
+ {
+ continue;
+ }
+
+ var attribute = attributes[0] as JsonPropertyAttribute;
+ if (attribute != null && attribute.PropertyName == value)
+ {
+ var enumVal = field.GetValue(null);
+
+ if (enumVal is Type)
+ {
+ return (Type)enumVal;
+ }
+ }
+ }
+
+ throw new Exception($"Unknown value {value} for enum Type");
+ }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/UpdatePlayProgressErrors.cs b/PlexAPI/Models/Requests/UpdatePlayProgressErrors.cs
new file mode 100644
index 0000000..68b2e31
--- /dev/null
+++ b/PlexAPI/Models/Requests/UpdatePlayProgressErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class UpdatePlayProgressErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/UpdatePlayProgressRequest.cs b/PlexAPI/Models/Requests/UpdatePlayProgressRequest.cs
new file mode 100644
index 0000000..b6cdf00
--- /dev/null
+++ b/PlexAPI/Models/Requests/UpdatePlayProgressRequest.cs
@@ -0,0 +1,36 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class UpdatePlayProgressRequest
+ {
+
+ ///
+ /// the media key
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=key")]
+ public string Key { get; set; } = default!;
+
+ ///
+ /// The time, in milliseconds, used to set the media playback progress.
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=time")]
+ public double Time { get; set; } = default!;
+
+ ///
+ /// The playback state of the media item.
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=state")]
+ public string State { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/UpdatePlayProgressResponse.cs b/PlexAPI/Models/Requests/UpdatePlayProgressResponse.cs
new file mode 100644
index 0000000..54661dd
--- /dev/null
+++ b/PlexAPI/Models/Requests/UpdatePlayProgressResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class UpdatePlayProgressResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public UpdatePlayProgressResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/UpdatePlayProgressResponseBody.cs b/PlexAPI/Models/Requests/UpdatePlayProgressResponseBody.cs
new file mode 100644
index 0000000..65316f1
--- /dev/null
+++ b/PlexAPI/Models/Requests/UpdatePlayProgressResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class UpdatePlayProgressResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/UpdatePlaylistErrors.cs b/PlexAPI/Models/Requests/UpdatePlaylistErrors.cs
new file mode 100644
index 0000000..ffcd017
--- /dev/null
+++ b/PlexAPI/Models/Requests/UpdatePlaylistErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class UpdatePlaylistErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/UpdatePlaylistRequest.cs b/PlexAPI/Models/Requests/UpdatePlaylistRequest.cs
new file mode 100644
index 0000000..7ec6062
--- /dev/null
+++ b/PlexAPI/Models/Requests/UpdatePlaylistRequest.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class UpdatePlaylistRequest
+ {
+
+ ///
+ /// the ID of the playlist
+ ///
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=playlistID")]
+ public double PlaylistID { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/UpdatePlaylistResponse.cs b/PlexAPI/Models/Requests/UpdatePlaylistResponse.cs
new file mode 100644
index 0000000..5138039
--- /dev/null
+++ b/PlexAPI/Models/Requests/UpdatePlaylistResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class UpdatePlaylistResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public UpdatePlaylistResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/UpdatePlaylistResponseBody.cs b/PlexAPI/Models/Requests/UpdatePlaylistResponseBody.cs
new file mode 100644
index 0000000..b70d524
--- /dev/null
+++ b/PlexAPI/Models/Requests/UpdatePlaylistResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class UpdatePlaylistResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/UploadPlaylistErrors.cs b/PlexAPI/Models/Requests/UploadPlaylistErrors.cs
new file mode 100644
index 0000000..c50c685
--- /dev/null
+++ b/PlexAPI/Models/Requests/UploadPlaylistErrors.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class UploadPlaylistErrors
+ {
+
+ [JsonProperty("code")]
+ public double? Code { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("status")]
+ public double? Status { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/UploadPlaylistRequest.cs b/PlexAPI/Models/Requests/UploadPlaylistRequest.cs
new file mode 100644
index 0000000..c1a3a30
--- /dev/null
+++ b/PlexAPI/Models/Requests/UploadPlaylistRequest.cs
@@ -0,0 +1,44 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using PlexAPI.Utils;
+
+ public class UploadPlaylistRequest
+ {
+
+ ///
+ /// absolute path to a directory on the server where m3u files are stored, or the absolute path to a playlist file on the server.
+ ///
+ ///
+ /// If the `path` argument is a directory, that path will be scanned for playlist files to be processed.
+ /// Each file in that directory creates a separate playlist, with a name based on the filename of the file that created it.
+ /// The GUID of each playlist is based on the filename.
+ /// If the `path` argument is a file, that file will be used to create a new playlist, with the name based on the filename of the file that created it.
+ /// The GUID of each playlist is based on the filename.
+ ///
+ ///
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=path")]
+ public string Path { get; set; } = default!;
+
+ ///
+ /// force overwriting of duplicate playlists. By default, a playlist file uploaded with the same path will overwrite the existing playlist.
+ ///
+ ///
+ /// The `force` argument is used to disable overwriting. If the `force` argument is set to 0, a new playlist will be created suffixed with the date and time that the duplicate was uploaded.
+ ///
+ ///
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=force")]
+ public Force Force { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/UploadPlaylistResponse.cs b/PlexAPI/Models/Requests/UploadPlaylistResponse.cs
new file mode 100644
index 0000000..d8bcfe6
--- /dev/null
+++ b/PlexAPI/Models/Requests/UploadPlaylistResponse.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using System.Net.Http;
+ using System;
+
+ public class UploadPlaylistResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage RawResponse { get; set; } = default!;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public UploadPlaylistResponseBody? Object { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/UploadPlaylistResponseBody.cs b/PlexAPI/Models/Requests/UploadPlaylistResponseBody.cs
new file mode 100644
index 0000000..3afd9b1
--- /dev/null
+++ b/PlexAPI/Models/Requests/UploadPlaylistResponseBody.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ ///
+ /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ ///
+ public class UploadPlaylistResponseBody
+ {
+
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/Upscale.cs b/PlexAPI/Models/Requests/Upscale.cs
new file mode 100644
index 0000000..d160666
--- /dev/null
+++ b/PlexAPI/Models/Requests/Upscale.cs
@@ -0,0 +1,22 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+
+ ///
+ /// allow images to be resized beyond native dimensions.
+ ///
+ public enum Upscale
+ {
+ Zero = 0,
+ One = 1,
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Models/Requests/Writer.cs b/PlexAPI/Models/Requests/Writer.cs
new file mode 100644
index 0000000..4785747
--- /dev/null
+++ b/PlexAPI/Models/Requests/Writer.cs
@@ -0,0 +1,21 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI.Models.Requests
+{
+ using Newtonsoft.Json;
+
+ public class Writer
+ {
+
+ [JsonProperty("tag")]
+ public string? Tag { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Playlists.cs b/PlexAPI/Playlists.cs
new file mode 100644
index 0000000..d49c1fe
--- /dev/null
+++ b/PlexAPI/Playlists.cs
@@ -0,0 +1,559 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI
+{
+ using Newtonsoft.Json;
+ using PlexAPI.Models.Requests;
+ using PlexAPI.Utils;
+ using System.Net.Http.Headers;
+ using System.Net.Http;
+ using System.Threading.Tasks;
+ using System;
+
+ ///
+ /// Playlists are ordered collections of media. They can be dumb (just a list of media) or smart (based on a media query, such as "all albums from 2017").
+ ///
+ ///
+ /// They can be organized in (optionally nesting) folders.
+ /// Retrieving a playlist, or its items, will trigger a refresh of its metadata.
+ /// This may cause the duration and number of items to change.
+ ///
+ ///
+ ///
+ public interface IPlaylists
+ {
+
+ ///
+ /// Create a Playlist
+ ///
+ ///
+ /// Create a new playlist. By default the playlist is blank. To create a playlist along with a first item, pass:
+ /// - `uri` - The content URI for what we're playing (e.g. `library://...`).
+ /// - `playQueueID` - To create a playlist from an existing play queue.
+ ///
+ ///
+ ///
+ Task CreatePlaylistAsync(CreatePlaylistRequest? request = null);
+
+ ///
+ /// Get All Playlists
+ ///
+ ///
+ /// Get All Playlists given the specified filters.
+ ///
+ ///
+ Task GetPlaylistsAsync(PlaylistType? playlistType = null, QueryParamSmart? smart = null);
+
+ ///
+ /// Retrieve Playlist
+ ///
+ ///
+ /// Gets detailed metadata for a playlist. A playlist for many purposes (rating, editing metadata, tagging), can be treated like a regular metadata item:
+ /// Smart playlist details contain the `content` attribute. This is the content URI for the generator. This can then be parsed by a client to provide smart playlist editing.
+ ///
+ ///
+ ///
+ Task GetPlaylistAsync(double playlistID);
+
+ ///
+ /// Deletes a Playlist
+ ///
+ ///
+ /// This endpoint will delete a playlist
+ ///
+ ///
+ ///
+ Task DeletePlaylistAsync(double playlistID);
+
+ ///
+ /// Update a Playlist
+ ///
+ ///
+ /// From PMS version 1.9.1 clients can also edit playlist metadata using this endpoint as they would via `PUT /library/metadata/{playlistID}`
+ ///
+ ///
+ ///
+ Task UpdatePlaylistAsync(double playlistID);
+
+ ///
+ /// Retrieve Playlist Contents
+ ///
+ ///
+ /// Gets the contents of a playlist. Should be paged by clients via standard mechanisms.
+ /// By default leaves are returned (e.g. episodes, movies). In order to return other types you can use the `type` parameter.
+ /// For example, you could use this to display a list of recently added albums vis a smart playlist.
+ /// Note that for dumb playlists, items have a `playlistItemID` attribute which is used for deleting or moving items.
+ ///
+ ///
+ ///
+ Task GetPlaylistContentsAsync(double playlistID, double type);
+
+ ///
+ /// Delete Playlist Contents
+ ///
+ ///
+ /// Clears a playlist, only works with dumb playlists. Returns the playlist.
+ ///
+ ///
+ ///
+ Task ClearPlaylistContentsAsync(double playlistID);
+
+ ///
+ /// Adding to a Playlist
+ ///
+ ///
+ /// Adds a generator to a playlist, same parameters as the POST above. With a dumb playlist, this adds the specified items to the playlist.
+ /// With a smart playlist, passing a new `uri` parameter replaces the rules for the playlist. Returns the playlist.
+ ///
+ ///
+ ///
+ Task AddPlaylistContentsAsync(double playlistID, string uri, double playQueueID);
+
+ ///
+ /// Upload Playlist
+ ///
+ ///
+ /// Imports m3u playlists by passing a path on the server to scan for m3u-formatted playlist files, or a path to a single playlist file.
+ ///
+ ///
+ ///
+ Task UploadPlaylistAsync(string path, Force force);
+ }
+
+ ///
+ /// Playlists are ordered collections of media. They can be dumb (just a list of media) or smart (based on a media query, such as "all albums from 2017").
+ ///
+ ///
+ /// They can be organized in (optionally nesting) folders.
+ /// Retrieving a playlist, or its items, will trigger a refresh of its metadata.
+ /// This may cause the duration and number of items to change.
+ ///
+ ///
+ ///
+ public class Playlists: IPlaylists
+ {
+ public SDKConfig SDKConfiguration { get; private set; }
+ private const string _language = "csharp";
+ private const string _sdkVersion = "0.1.0";
+ private const string _sdkGenVersion = "2.223.3";
+ private const string _openapiDocVersion = "0.0.3";
+ private const string _userAgent = "speakeasy-sdk/csharp 0.1.0 2.223.3 0.0.3 Plex-API";
+ private string _serverUrl = "";
+ private ISpeakeasyHttpClient _defaultClient;
+ private ISpeakeasyHttpClient _securityClient;
+
+ public Playlists(ISpeakeasyHttpClient defaultClient, ISpeakeasyHttpClient securityClient, string serverUrl, SDKConfig config)
+ {
+ _defaultClient = defaultClient;
+ _securityClient = securityClient;
+ _serverUrl = serverUrl;
+ SDKConfiguration = config;
+ }
+
+
+ public async Task CreatePlaylistAsync(CreatePlaylistRequest? request = null)
+ {
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/playlists", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new CreatePlaylistResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task GetPlaylistsAsync(PlaylistType? playlistType = null, QueryParamSmart? smart = null)
+ {
+ var request = new GetPlaylistsRequest()
+ {
+ PlaylistType = playlistType,
+ Smart = smart,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/playlists/all", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetPlaylistsResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task GetPlaylistAsync(double playlistID)
+ {
+ var request = new GetPlaylistRequest()
+ {
+ PlaylistID = playlistID,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistID}", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetPlaylistResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task DeletePlaylistAsync(double playlistID)
+ {
+ var request = new DeletePlaylistRequest()
+ {
+ PlaylistID = playlistID,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistID}", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new DeletePlaylistResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task UpdatePlaylistAsync(double playlistID)
+ {
+ var request = new UpdatePlaylistRequest()
+ {
+ PlaylistID = playlistID,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistID}", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new UpdatePlaylistResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task GetPlaylistContentsAsync(double playlistID, double type)
+ {
+ var request = new GetPlaylistContentsRequest()
+ {
+ PlaylistID = playlistID,
+ Type = type,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistID}/items", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetPlaylistContentsResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task ClearPlaylistContentsAsync(double playlistID)
+ {
+ var request = new ClearPlaylistContentsRequest()
+ {
+ PlaylistID = playlistID,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistID}/items", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new ClearPlaylistContentsResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task AddPlaylistContentsAsync(double playlistID, string uri, double playQueueID)
+ {
+ var request = new AddPlaylistContentsRequest()
+ {
+ PlaylistID = playlistID,
+ Uri = uri,
+ PlayQueueID = playQueueID,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/playlists/{playlistID}/items", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new AddPlaylistContentsResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task UploadPlaylistAsync(string path, Force force)
+ {
+ var request = new UploadPlaylistRequest()
+ {
+ Path = path,
+ Force = force,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/playlists/upload", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new UploadPlaylistResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/PlexAPI.csproj b/PlexAPI/PlexAPI.csproj
new file mode 100644
index 0000000..d386773
--- /dev/null
+++ b/PlexAPI/PlexAPI.csproj
@@ -0,0 +1,22 @@
+
+
+ true
+ Plex-API
+ 0.1.0
+ LukeHagar
+ net5.0
+ enable
+ README.md
+ true
+ 1591
+ https://github.com/LukeHagar/plexcsharp
+
+
+
+
+
+
+
+
+
+
diff --git a/PlexAPI/PlexAPISDK.cs b/PlexAPI/PlexAPISDK.cs
new file mode 100644
index 0000000..e680b7b
--- /dev/null
+++ b/PlexAPI/PlexAPISDK.cs
@@ -0,0 +1,309 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI
+{
+ using Newtonsoft.Json;
+ using PlexAPI.Models.Components;
+ using PlexAPI.Utils;
+ using System.Collections.Generic;
+ using System.Net.Http;
+ using System.Threading.Tasks;
+ using System;
+
+
+
+ ///
+ /// The protocol to use when connecting to your plex server.
+ ///
+ public enum ServerProtocol
+ {
+ [JsonProperty("http")]
+ Http,
+ [JsonProperty("https")]
+ Https,
+ }
+
+ public static class ServerProtocolExtension
+ {
+ public static string Value(this ServerProtocol value)
+ {
+ return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString();
+ }
+
+ public static ServerProtocol ToEnum(this string value)
+ {
+ foreach(var field in typeof(ServerProtocol).GetFields())
+ {
+ var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false);
+ if (attributes.Length == 0)
+ {
+ continue;
+ }
+
+ var attribute = attributes[0] as JsonPropertyAttribute;
+ if (attribute != null && attribute.PropertyName == value)
+ {
+ var enumVal = field.GetValue(null);
+
+ if (enumVal is ServerProtocol)
+ {
+ return (ServerProtocol)enumVal;
+ }
+ }
+ }
+
+ throw new Exception($"Unknown value {value} for enum ServerProtocol");
+ }
+ }
+ ///
+ /// Plex-API: A Plex Media Server API Map
+ ///
+ ///
+ /// An Open API Spec for interacting with Plex.tv and Plex Servers
+ ///
+ ///
+ public interface IPlexAPISDK
+ {
+
+ ///
+ /// Operations against the Plex Media Server System.
+ ///
+ ///
+ ///
+ ///
+ ///
+ public IServer Server { get; }
+
+ ///
+ /// API Calls interacting with Plex Media Server Media
+ ///
+ ///
+ ///
+ ///
+ ///
+ public IMedia Media { get; }
+
+ ///
+ /// Activities are awesome. They provide a way to monitor and control asynchronous operations on the server. In order to receive real-time updates for activities, a client would normally subscribe via either EventSource or Websocket endpoints.
+ ///
+ ///
+ /// Activities are associated with HTTP replies via a special `X-Plex-Activity` header which contains the UUID of the activity.
+ /// Activities are optional cancellable. If cancellable, they may be cancelled via the `DELETE` endpoint. Other details:
+ /// - They can contain a `progress` (from 0 to 100) marking the percent completion of the activity.
+ /// - They must contain an `type` which is used by clients to distinguish the specific activity.
+ /// - They may contain a `Context` object with attributes which associate the activity with various specific entities (items, libraries, etc.)
+ /// - The may contain a `Response` object which attributes which represent the result of the asynchronous operation.
+ ///
+ ///
+ ///
+ public IActivities Activities { get; }
+
+ ///
+ /// Butler is the task manager of the Plex Media Server Ecosystem.
+ ///
+ ///
+ ///
+ ///
+ ///
+ public IButler Butler { get; }
+
+ ///
+ /// Hubs are a structured two-dimensional container for media, generally represented by multiple horizontal rows.
+ ///
+ ///
+ ///
+ ///
+ ///
+ public IHubs Hubs { get; }
+
+ ///
+ /// API Calls that perform search operations with Plex Media Server
+ ///
+ ///
+ ///
+ ///
+ ///
+ public ISearch Search { get; }
+
+ ///
+ /// API Calls interacting with Plex Media Server Libraries
+ ///
+ ///
+ ///
+ ///
+ ///
+ public ILibrary Library { get; }
+
+ ///
+ /// Submit logs to the Log Handler for Plex Media Server
+ ///
+ ///
+ ///
+ ///
+ ///
+ public ILog Log { get; }
+
+ ///
+ /// Playlists are ordered collections of media. They can be dumb (just a list of media) or smart (based on a media query, such as "all albums from 2017").
+ ///
+ ///
+ /// They can be organized in (optionally nesting) folders.
+ /// Retrieving a playlist, or its items, will trigger a refresh of its metadata.
+ /// This may cause the duration and number of items to change.
+ ///
+ ///
+ ///
+ public IPlaylists Playlists { get; }
+
+ ///
+ /// API Calls against Security for Plex Media Server
+ ///
+ ///
+ ///
+ ///
+ ///
+ public ISecurity Security { get; }
+
+ ///
+ /// API Calls that perform search operations with Plex Media Server Sessions
+ ///
+ ///
+ ///
+ ///
+ ///
+ public ISessions Sessions { get; }
+
+ ///
+ /// This describes the API for searching and applying updates to the Plex Media Server.
+ ///
+ ///
+ /// Updates to the status can be observed via the Event API.
+ ///
+ ///
+ ///
+ public IUpdater Updater { get; }
+
+ ///
+ /// API Calls that perform operations with Plex Media Server Videos
+ ///
+ ///
+ ///
+ ///
+ ///
+ public IVideo Video { get; }
+ }
+
+ public class SDKConfig
+ {
+ public static string[] ServerList = new string[]
+ {
+ "http://10.10.10.47:32400",
+ "{protocol}://{ip}:{port}",
+ };
+ /// Contains the list of servers available to the SDK
+ public string serverUrl = "";
+ public int serverIndex = 0;
+ public List> ServerDefaults = new List>();
+
+ public string GetTemplatedServerDetails()
+ {
+ if (!String.IsNullOrEmpty(this.serverUrl))
+ {
+ return Utilities.TemplateUrl(Utilities.RemoveSuffix(this.serverUrl, "/"), new Dictionary());
+ }
+ return Utilities.TemplateUrl(SDKConfig.ServerList[this.serverIndex], this.ServerDefaults[this.serverIndex]);
+ }
+ }
+
+ ///
+ /// Plex-API: A Plex Media Server API Map
+ ///
+ ///
+ /// An Open API Spec for interacting with Plex.tv and Plex Servers
+ ///
+ ///
+ public class PlexAPISDK: IPlexAPISDK
+ {
+ public SDKConfig SDKConfiguration { get; private set; }
+
+ private const string _language = "csharp";
+ private const string _sdkVersion = "0.1.0";
+ private const string _sdkGenVersion = "2.223.3";
+ private const string _openapiDocVersion = "0.0.3";
+ private const string _userAgent = "speakeasy-sdk/csharp 0.1.0 2.223.3 0.0.3 Plex-API";
+ private string _serverUrl = "";
+ private ISpeakeasyHttpClient _defaultClient;
+ private ISpeakeasyHttpClient _securityClient;
+ public IServer Server { get; private set; }
+ public IMedia Media { get; private set; }
+ public IActivities Activities { get; private set; }
+ public IButler Butler { get; private set; }
+ public IHubs Hubs { get; private set; }
+ public ISearch Search { get; private set; }
+ public ILibrary Library { get; private set; }
+ public ILog Log { get; private set; }
+ public IPlaylists Playlists { get; private set; }
+ public ISecurity Security { get; private set; }
+ public ISessions Sessions { get; private set; }
+ public IUpdater Updater { get; private set; }
+ public IVideo Video { get; private set; }
+
+ public PlexAPISDK(Security? security = null, int? serverIndex = null, ServerProtocol? protocol = null, string? ip = null, string? port = null, string? serverUrl = null, Dictionary? urlParams = null, ISpeakeasyHttpClient? client = null)
+ {
+ if (serverUrl != null) {
+ if (urlParams != null) {
+ serverUrl = Utilities.TemplateUrl(serverUrl, urlParams);
+ }
+ _serverUrl = serverUrl;
+ }
+ List> serverDefaults = new List>()
+ {
+ new Dictionary()
+ {
+ },
+ new Dictionary()
+ {
+ {"protocol", protocol == null ? "http" : ServerProtocolExtension.Value(protocol.Value)},
+ {"ip", ip == null ? "10.10.10.47" : ip},
+ {"port", port == null ? "32400" : port},
+ },
+ };
+
+ _defaultClient = new SpeakeasyHttpClient(client);
+ _securityClient = _defaultClient;
+
+ if(security != null)
+ {
+ _securityClient = SecuritySerializer.Apply(_defaultClient, security);
+ }
+
+ SDKConfiguration = new SDKConfig()
+ {
+ ServerDefaults = serverDefaults,
+ serverUrl = _serverUrl
+ };
+
+ Server = new Server(_defaultClient, _securityClient, _serverUrl, SDKConfiguration);
+ Media = new Media(_defaultClient, _securityClient, _serverUrl, SDKConfiguration);
+ Activities = new Activities(_defaultClient, _securityClient, _serverUrl, SDKConfiguration);
+ Butler = new Butler(_defaultClient, _securityClient, _serverUrl, SDKConfiguration);
+ Hubs = new Hubs(_defaultClient, _securityClient, _serverUrl, SDKConfiguration);
+ Search = new Search(_defaultClient, _securityClient, _serverUrl, SDKConfiguration);
+ Library = new Library(_defaultClient, _securityClient, _serverUrl, SDKConfiguration);
+ Log = new Log(_defaultClient, _securityClient, _serverUrl, SDKConfiguration);
+ Playlists = new Playlists(_defaultClient, _securityClient, _serverUrl, SDKConfiguration);
+ Security = new Security(_defaultClient, _securityClient, _serverUrl, SDKConfiguration);
+ Sessions = new Sessions(_defaultClient, _securityClient, _serverUrl, SDKConfiguration);
+ Updater = new Updater(_defaultClient, _securityClient, _serverUrl, SDKConfiguration);
+ Video = new Video(_defaultClient, _securityClient, _serverUrl, SDKConfiguration);
+ }
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Search.cs b/PlexAPI/Search.cs
new file mode 100644
index 0000000..1305c0f
--- /dev/null
+++ b/PlexAPI/Search.cs
@@ -0,0 +1,248 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI
+{
+ using Newtonsoft.Json;
+ using PlexAPI.Models.Requests;
+ using PlexAPI.Utils;
+ using System.Net.Http.Headers;
+ using System.Net.Http;
+ using System.Threading.Tasks;
+ using System;
+
+ ///
+ /// API Calls that perform search operations with Plex Media Server
+ ///
+ ///
+ ///
+ ///
+ ///
+ public interface ISearch
+ {
+
+ ///
+ /// Perform a search
+ ///
+ ///
+ /// This endpoint performs a search across all library sections, or a single section, and returns matches as hubs, split up by type. It performs spell checking, looks for partial matches, and orders the hubs based on quality of results. In addition, based on matches, it will return other related matches (e.g. for a genre match, it may return movies in that genre, or for an actor match, movies with that actor).
+ ///
+ /// In the response's items, the following extra attributes are returned to further describe or disambiguate the result:
+ ///
+ /// - `reason`: The reason for the result, if not because of a direct search term match; can be either:
+ /// - `section`: There are multiple identical results from different sections.
+ /// - `originalTitle`: There was a search term match from the original title field (sometimes those can be very different or in a foreign language).
+ /// - `<hub identifier>`: If the reason for the result is due to a result in another hub, the source hub identifier is returned. For example, if the search is for "dylan" then Bob Dylan may be returned as an artist result, an a few of his albums returned as album results with a reason code of `artist` (the identifier of that particular hub). Or if the search is for "arnold", there might be movie results returned with a reason of `actor`
+ /// - `reasonTitle`: The string associated with the reason code. For a section reason, it'll be the section name; For a hub identifier, it'll be a string associated with the match (e.g. `Arnold Schwarzenegger` for movies which were returned because the search was for "arnold").
+ /// - `reasonID`: The ID of the item associated with the reason for the result. This might be a section ID, a tag ID, an artist ID, or a show ID.
+ ///
+ /// This request is intended to be very fast, and called as the user types.
+ ///
+ ///
+ ///
+ Task PerformSearchAsync(string query, double? sectionId = null, double? limit = null);
+
+ ///
+ /// Perform a voice search
+ ///
+ ///
+ /// This endpoint performs a search specifically tailored towards voice or other imprecise input which may work badly with the substring and spell-checking heuristics used by the `/hubs/search` endpoint.
+ /// It uses a Levenshtein distance heuristic to search titles, and as such is much slower than the other search endpoint.
+ /// Whenever possible, clients should limit the search to the appropriate type.
+ /// Results, as well as their containing per-type hubs, contain a `distance` attribute which can be used to judge result quality.
+ ///
+ ///
+ ///
+ Task PerformVoiceSearchAsync(string query, double? sectionId = null, double? limit = null);
+
+ ///
+ /// Get Search Results
+ ///
+ ///
+ /// This will search the database for the string provided.
+ ///
+ ///
+ Task GetSearchResultsAsync(string query);
+ }
+
+ ///
+ /// API Calls that perform search operations with Plex Media Server
+ ///
+ ///
+ ///
+ ///
+ ///
+ public class Search: ISearch
+ {
+ public SDKConfig SDKConfiguration { get; private set; }
+ private const string _language = "csharp";
+ private const string _sdkVersion = "0.1.0";
+ private const string _sdkGenVersion = "2.223.3";
+ private const string _openapiDocVersion = "0.0.3";
+ private const string _userAgent = "speakeasy-sdk/csharp 0.1.0 2.223.3 0.0.3 Plex-API";
+ private string _serverUrl = "";
+ private ISpeakeasyHttpClient _defaultClient;
+ private ISpeakeasyHttpClient _securityClient;
+
+ public Search(ISpeakeasyHttpClient defaultClient, ISpeakeasyHttpClient securityClient, string serverUrl, SDKConfig config)
+ {
+ _defaultClient = defaultClient;
+ _securityClient = securityClient;
+ _serverUrl = serverUrl;
+ SDKConfiguration = config;
+ }
+
+
+ public async Task PerformSearchAsync(string query, double? sectionId = null, double? limit = null)
+ {
+ var request = new PerformSearchRequest()
+ {
+ Query = query,
+ SectionId = sectionId,
+ Limit = limit,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/hubs/search", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new PerformSearchResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task PerformVoiceSearchAsync(string query, double? sectionId = null, double? limit = null)
+ {
+ var request = new PerformVoiceSearchRequest()
+ {
+ Query = query,
+ SectionId = sectionId,
+ Limit = limit,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/hubs/search/voice", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new PerformVoiceSearchResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task GetSearchResultsAsync(string query)
+ {
+ var request = new GetSearchResultsRequest()
+ {
+ Query = query,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/search", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetSearchResultsResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.TwoHundredApplicationJsonObject = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.FourHundredAndOneApplicationJsonObject = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Security.cs b/PlexAPI/Security.cs
new file mode 100644
index 0000000..ae3606e
--- /dev/null
+++ b/PlexAPI/Security.cs
@@ -0,0 +1,170 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI
+{
+ using Newtonsoft.Json;
+ using PlexAPI.Models.Requests;
+ using PlexAPI.Utils;
+ using System.Net.Http.Headers;
+ using System.Net.Http;
+ using System.Threading.Tasks;
+ using System;
+
+ ///
+ /// API Calls against Security for Plex Media Server
+ ///
+ ///
+ ///
+ ///
+ ///
+ public interface ISecurity
+ {
+
+ ///
+ /// Get a Transient Token.
+ ///
+ ///
+ /// This endpoint provides the caller with a temporary token with the same access level as the caller's token. These tokens are valid for up to 48 hours and are destroyed if the server instance is restarted.
+ ///
+ ///
+ ///
+ Task GetTransientTokenAsync(QueryParamType type, Scope scope);
+
+ ///
+ /// Get Source Connection Information
+ ///
+ ///
+ /// If a caller requires connection details and a transient token for a source that is known to the server, for example a cloud media provider or shared PMS, then this endpoint can be called. This endpoint is only accessible with either an admin token or a valid transient token generated from an admin token.
+ /// Note: requires Plex Media Server >= 1.15.4.
+ ///
+ ///
+ ///
+ Task GetSourceConnectionInformationAsync(string source);
+ }
+
+ ///
+ /// API Calls against Security for Plex Media Server
+ ///
+ ///
+ ///
+ ///
+ ///
+ public class Security: ISecurity
+ {
+ public SDKConfig SDKConfiguration { get; private set; }
+ private const string _language = "csharp";
+ private const string _sdkVersion = "0.1.0";
+ private const string _sdkGenVersion = "2.223.3";
+ private const string _openapiDocVersion = "0.0.3";
+ private const string _userAgent = "speakeasy-sdk/csharp 0.1.0 2.223.3 0.0.3 Plex-API";
+ private string _serverUrl = "";
+ private ISpeakeasyHttpClient _defaultClient;
+ private ISpeakeasyHttpClient _securityClient;
+
+ public Security(ISpeakeasyHttpClient defaultClient, ISpeakeasyHttpClient securityClient, string serverUrl, SDKConfig config)
+ {
+ _defaultClient = defaultClient;
+ _securityClient = securityClient;
+ _serverUrl = serverUrl;
+ SDKConfiguration = config;
+ }
+
+
+ public async Task GetTransientTokenAsync(QueryParamType type, Scope scope)
+ {
+ var request = new GetTransientTokenRequest()
+ {
+ Type = type,
+ Scope = scope,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/security/token", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetTransientTokenResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task GetSourceConnectionInformationAsync(string source)
+ {
+ var request = new GetSourceConnectionInformationRequest()
+ {
+ Source = source,
+ };
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/security/resources", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetSourceConnectionInformationResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Server.cs b/PlexAPI/Server.cs
new file mode 100644
index 0000000..99067f0
--- /dev/null
+++ b/PlexAPI/Server.cs
@@ -0,0 +1,508 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace PlexAPI
+{
+ using Newtonsoft.Json;
+ using PlexAPI.Models.Requests;
+ using PlexAPI.Utils;
+ using System.Collections.Generic;
+ using System.Net.Http.Headers;
+ using System.Net.Http;
+ using System.Threading.Tasks;
+ using System;
+
+ ///
+ /// Operations against the Plex Media Server System.
+ ///
+ ///
+ ///
+ ///
+ ///
+ public interface IServer
+ {
+
+ ///
+ /// Server Capabilities
+ ///
+ ///
+ /// Server Capabilities
+ ///
+ ///
+ Task GetServerCapabilitiesAsync();
+
+ ///
+ /// Get Server Preferences
+ ///
+ ///
+ /// Get Server Preferences
+ ///
+ ///
+ Task GetServerPreferencesAsync();
+
+ ///
+ /// Get Available Clients
+ ///
+ ///
+ /// Get Available Clients
+ ///
+ ///
+ Task GetAvailableClientsAsync();
+
+ ///
+ /// Get Devices
+ ///
+ ///
+ /// Get Devices
+ ///
+ ///
+ Task GetDevicesAsync();
+
+ ///
+ /// Get Server Identity
+ ///
+ ///
+ /// Get Server Identity
+ ///
+ ///
+ Task GetServerIdentityAsync();
+
+ ///
+ /// Get MyPlex Account
+ ///
+ ///
+ /// Returns MyPlex Account Information
+ ///
+ ///
+ Task GetMyPlexAccountAsync();
+
+ ///
+ /// Get a Resized Photo
+ ///
+ ///
+ /// Plex's Photo transcoder is used throughout the service to serve images at specified sizes.
+ ///
+ ///
+ ///
+ Task GetResizedPhotoAsync(GetResizedPhotoRequest? request = null);
+
+ ///
+ /// Get Server List
+ ///
+ ///
+ /// Get Server List
+ ///
+ ///
+ Task GetServerListAsync();
+ }
+
+ ///
+ /// Operations against the Plex Media Server System.
+ ///
+ ///
+ ///
+ ///
+ ///
+ public class Server: IServer
+ {
+ public SDKConfig SDKConfiguration { get; private set; }
+ private const string _language = "csharp";
+ private const string _sdkVersion = "0.1.0";
+ private const string _sdkGenVersion = "2.223.3";
+ private const string _openapiDocVersion = "0.0.3";
+ private const string _userAgent = "speakeasy-sdk/csharp 0.1.0 2.223.3 0.0.3 Plex-API";
+ private string _serverUrl = "";
+ private ISpeakeasyHttpClient _defaultClient;
+ private ISpeakeasyHttpClient _securityClient;
+
+ public Server(ISpeakeasyHttpClient defaultClient, ISpeakeasyHttpClient securityClient, string serverUrl, SDKConfig config)
+ {
+ _defaultClient = defaultClient;
+ _securityClient = securityClient;
+ _serverUrl = serverUrl;
+ SDKConfiguration = config;
+ }
+
+
+ public async Task GetServerCapabilitiesAsync()
+ {
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = baseUrl + "/";
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetServerCapabilitiesResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.TwoHundredApplicationJsonObject = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.FourHundredAndOneApplicationJsonObject = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task GetServerPreferencesAsync()
+ {
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = baseUrl + "/:/prefs";
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetServerPreferencesResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task GetAvailableClientsAsync()
+ {
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = baseUrl + "/clients";
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetAvailableClientsResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.ResponseBodies = JsonConvert.DeserializeObject>(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task GetDevicesAsync()
+ {
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = baseUrl + "/devices";
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetDevicesResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.TwoHundredApplicationJsonObject = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.FourHundredAndOneApplicationJsonObject = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task GetServerIdentityAsync()
+ {
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = baseUrl + "/identity";
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetServerIdentityResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.TwoHundredApplicationJsonObject = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.FourHundredAndOneApplicationJsonObject = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task GetMyPlexAccountAsync()
+ {
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = baseUrl + "/myplex/account";
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetMyPlexAccountResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.TwoHundredApplicationJsonObject = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.FourHundredAndOneApplicationJsonObject = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task GetResizedPhotoAsync(GetResizedPhotoRequest? request = null)
+ {
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = URLBuilder.Build(baseUrl, "/photo/:/transcode", request);
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetResizedPhotoResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200) || (response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Object = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ public async Task GetServerListAsync()
+ {
+ string baseUrl = this.SDKConfiguration.GetTemplatedServerDetails();
+ var urlString = baseUrl + "/servers";
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetServerListResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.TwoHundredApplicationJsonObject = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 400))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.FourHundredAndOneApplicationJsonObject = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/PlexAPI/Sessions.cs b/PlexAPI/Sessions.cs
new file mode 100644
index 0000000..3d57831
--- /dev/null
+++ b/PlexAPI/Sessions.cs
@@ -0,0 +1,269 @@
+
+//------------------------------------------------------------------------------
+//