diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..e672f6e
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,2 @@
+# This allows generated code to be indexed correctly
+*.php linguist-generated=false
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..d1e0a89
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+composer.lock
+vendor
+.DS_Store
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..7d52b29
--- /dev/null
+++ b/README.md
@@ -0,0 +1,225 @@
+# lukehagar/plex-api
+
+
+
+
+## 🏗 **Welcome to your new SDK!** 🏗
+
+It has been generated successfully based on your OpenAPI spec. However, it is not yet ready for production use. Here are some next steps:
+- [ ] 🛠 Make your SDK feel handcrafted by [customizing it](https://www.speakeasyapi.dev/docs/customize-sdks)
+- [ ] ♻️ Refine your SDK quickly by iterating locally with the [Speakeasy CLI](https://github.com/speakeasy-api/speakeasy)
+- [ ] 🎁 Publish your SDK to package managers by [configuring automatic publishing](https://www.speakeasyapi.dev/docs/productionize-sdks/publish-sdks)
+- [ ] ✨ When ready to productionize, delete this section from the README
+
+
+## SDK Installation
+
+### Composer
+
+To install the SDK first add the below to your `composer.json` file:
+
+```json
+{
+ "repositories": [
+ {
+ "type": "github",
+ "url": "https://github.com/LukeHagar/plexphp.git"
+ }
+ ],
+ "require": {
+ "lukehagar/plex-api": "*"
+ }
+}
+```
+
+Then run the following command:
+
+```bash
+composer update
+```
+
+
+
+## SDK Example Usage
+
+### Example
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()
+ ->setSecurity($security)
+ ->build();
+
+try {
+ $response = $sdk->server->getServerCapabilities();
+
+ if ($response->twoHundredApplicationJsonObject !== null) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+
+```
+
+
+
+## Available Resources and Operations
+
+### [Server](docs/sdks/server/README.md)
+
+* [getServerCapabilities](docs/sdks/server/README.md#getservercapabilities) - Server Capabilities
+* [getServerPreferences](docs/sdks/server/README.md#getserverpreferences) - Get Server Preferences
+* [getAvailableClients](docs/sdks/server/README.md#getavailableclients) - Get Available Clients
+* [getDevices](docs/sdks/server/README.md#getdevices) - Get Devices
+* [getServerIdentity](docs/sdks/server/README.md#getserveridentity) - Get Server Identity
+* [getMyPlexAccount](docs/sdks/server/README.md#getmyplexaccount) - Get MyPlex Account
+* [getResizedPhoto](docs/sdks/server/README.md#getresizedphoto) - Get a Resized Photo
+* [getServerList](docs/sdks/server/README.md#getserverlist) - Get Server List
+
+### [Media](docs/sdks/media/README.md)
+
+* [markPlayed](docs/sdks/media/README.md#markplayed) - Mark Media Played
+* [markUnplayed](docs/sdks/media/README.md#markunplayed) - Mark Media Unplayed
+* [updatePlayProgress](docs/sdks/media/README.md#updateplayprogress) - Update Media Play Progress
+
+### [Activities](docs/sdks/activities/README.md)
+
+* [getServerActivities](docs/sdks/activities/README.md#getserveractivities) - Get Server Activities
+* [cancelServerActivities](docs/sdks/activities/README.md#cancelserveractivities) - Cancel Server Activities
+
+### [Butler](docs/sdks/butler/README.md)
+
+* [getButlerTasks](docs/sdks/butler/README.md#getbutlertasks) - Get Butler tasks
+* [startAllTasks](docs/sdks/butler/README.md#startalltasks) - Start all Butler tasks
+* [stopAllTasks](docs/sdks/butler/README.md#stopalltasks) - Stop all Butler tasks
+* [startTask](docs/sdks/butler/README.md#starttask) - Start a single Butler task
+* [stopTask](docs/sdks/butler/README.md#stoptask) - Stop a single Butler task
+
+### [Hubs](docs/sdks/hubs/README.md)
+
+* [getGlobalHubs](docs/sdks/hubs/README.md#getglobalhubs) - Get Global Hubs
+* [getLibraryHubs](docs/sdks/hubs/README.md#getlibraryhubs) - Get library specific hubs
+
+### [Search](docs/sdks/search/README.md)
+
+* [performSearch](docs/sdks/search/README.md#performsearch) - Perform a search
+* [performVoiceSearch](docs/sdks/search/README.md#performvoicesearch) - Perform a voice search
+* [getSearchResults](docs/sdks/search/README.md#getsearchresults) - Get Search Results
+
+### [Library](docs/sdks/library/README.md)
+
+* [getFileHash](docs/sdks/library/README.md#getfilehash) - Get Hash Value
+* [getRecentlyAdded](docs/sdks/library/README.md#getrecentlyadded) - Get Recently Added
+* [getLibraries](docs/sdks/library/README.md#getlibraries) - Get All Libraries
+* [getLibrary](docs/sdks/library/README.md#getlibrary) - Get Library Details
+* [deleteLibrary](docs/sdks/library/README.md#deletelibrary) - Delete Library Section
+* [getLibraryItems](docs/sdks/library/README.md#getlibraryitems) - Get Library Items
+* [refreshLibrary](docs/sdks/library/README.md#refreshlibrary) - Refresh Library
+* [getLatestLibraryItems](docs/sdks/library/README.md#getlatestlibraryitems) - Get Latest Library Items
+* [getCommonLibraryItems](docs/sdks/library/README.md#getcommonlibraryitems) - Get Common Library Items
+* [getMetadata](docs/sdks/library/README.md#getmetadata) - Get Items Metadata
+* [getMetadataChildren](docs/sdks/library/README.md#getmetadatachildren) - Get Items Children
+* [getOnDeck](docs/sdks/library/README.md#getondeck) - Get On Deck
+
+### [Log](docs/sdks/log/README.md)
+
+* [logLine](docs/sdks/log/README.md#logline) - Logging a single line message.
+* [logMultiLine](docs/sdks/log/README.md#logmultiline) - Logging a multi-line message
+* [enablePaperTrail](docs/sdks/log/README.md#enablepapertrail) - Enabling Papertrail
+
+### [Playlists](docs/sdks/playlists/README.md)
+
+* [createPlaylist](docs/sdks/playlists/README.md#createplaylist) - Create a Playlist
+* [getPlaylists](docs/sdks/playlists/README.md#getplaylists) - Get All Playlists
+* [getPlaylist](docs/sdks/playlists/README.md#getplaylist) - Retrieve Playlist
+* [deletePlaylist](docs/sdks/playlists/README.md#deleteplaylist) - Deletes a Playlist
+* [updatePlaylist](docs/sdks/playlists/README.md#updateplaylist) - Update a Playlist
+* [getPlaylistContents](docs/sdks/playlists/README.md#getplaylistcontents) - Retrieve Playlist Contents
+* [clearPlaylistContents](docs/sdks/playlists/README.md#clearplaylistcontents) - Delete Playlist Contents
+* [addPlaylistContents](docs/sdks/playlists/README.md#addplaylistcontents) - Adding to a Playlist
+* [uploadPlaylist](docs/sdks/playlists/README.md#uploadplaylist) - Upload Playlist
+
+### [Security](docs/sdks/security/README.md)
+
+* [getTransientToken](docs/sdks/security/README.md#gettransienttoken) - Get a Transient Token.
+* [getSourceConnectionInformation](docs/sdks/security/README.md#getsourceconnectioninformation) - Get Source Connection Information
+
+### [Sessions](docs/sdks/sessions/README.md)
+
+* [getSessions](docs/sdks/sessions/README.md#getsessions) - Get Active Sessions
+* [getSessionHistory](docs/sdks/sessions/README.md#getsessionhistory) - Get Session History
+* [getTranscodeSessions](docs/sdks/sessions/README.md#gettranscodesessions) - Get Transcode Sessions
+* [stopTranscodeSession](docs/sdks/sessions/README.md#stoptranscodesession) - Stop a Transcode Session
+
+### [Updater](docs/sdks/updater/README.md)
+
+* [getUpdateStatus](docs/sdks/updater/README.md#getupdatestatus) - Querying status of updates
+* [checkForUpdates](docs/sdks/updater/README.md#checkforupdates) - Checking for updates
+* [applyUpdates](docs/sdks/updater/README.md#applyupdates) - Apply Updates
+
+### [Video](docs/sdks/video/README.md)
+
+* [startUniversalTranscode](docs/sdks/video/README.md#startuniversaltranscode) - Start Universal Transcode
+* [getTimeline](docs/sdks/video/README.md#gettimeline) - Get the timeline for a media item
+
+
+
+## Server Selection
+
+## Server Selection
+
+### Select Server by Index
+
+You can override the default server globally by passing a server index to the `server_idx: int` optional parameter when initializing the SDK client instance. The selected server will then be used as the default on the operations that use it. This table lists the indexes associated with the available servers:
+
+| # | Server | Variables |
+| - | ------ | --------- |
+| 0 | `http://10.10.10.47:32400` | None |
+| 1 | `{protocol}://{ip}:{port}` | `protocol` (default is `http`), `ip` (default is `10.10.10.47`), `port` (default is `32400`) |
+
+
+
+#### Variables
+
+Some of the server options above contain variables. If you want to set the values of those variables, the following optional parameters are available when initializing the SDK client instance:
+ * `protocol: ServerProtocol`
+ * `ip: string`
+ * `port: string`
+
+### Override Server URL Per-Client
+
+The default server can also be overridden globally by passing a URL to the `server_url: str` optional parameter when initializing the SDK client instance. For example:
+
+
+
+
+# Development
+
+## Maturity
+
+This SDK is in beta, and there may be breaking changes between versions without a major version update. Therefore, we recommend pinning usage
+to a specific package version. This way, you can install the same version each time without breaking changes unless you are intentionally
+looking for the latest version.
+
+## Contributions
+
+While we value open-source contributions to this SDK, this library is generated programmatically.
+Feel free to open a PR or a Github issue as a proof of concept and we'll do our best to include it in a future release!
+
+### SDK Created by [Speakeasy](https://docs.speakeasyapi.dev/docs/using-speakeasy/client-sdks)
diff --git a/RELEASES.md b/RELEASES.md
new file mode 100644
index 0000000..127c16b
--- /dev/null
+++ b/RELEASES.md
@@ -0,0 +1,9 @@
+
+
+## 2023-12-25 00:55:36
+### Changes
+Based on:
+- OpenAPI Doc 0.0.3
+- Speakeasy CLI 1.129.1 (2.223.3) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [php v0.1.0] .
\ No newline at end of file
diff --git a/USAGE.md b/USAGE.md
new file mode 100644
index 0000000..ed5fad4
--- /dev/null
+++ b/USAGE.md
@@ -0,0 +1,29 @@
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()
+ ->setSecurity($security)
+ ->build();
+
+try {
+ $response = $sdk->server->getServerCapabilities();
+
+ if ($response->twoHundredApplicationJsonObject !== null) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+
+```
+
\ No newline at end of file
diff --git a/composer.json b/composer.json
new file mode 100644
index 0000000..53a3612
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,19 @@
+{
+ "name": "lukehagar/plex-api",
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "LukeHagar\\Plex_API\\": "src/"
+ }
+ },
+ "license": "MIT",
+ "require": {
+ "php": ">=8.1.0",
+ "guzzlehttp/guzzle": "^7.0",
+ "jms/serializer": "^3.22"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.9",
+ "phpunit/phpunit": "^10"
+ }
+}
diff --git a/docs/Models/Components/Security.md b/docs/Models/Components/Security.md
new file mode 100644
index 0000000..72dd541
--- /dev/null
+++ b/docs/Models/Components/Security.md
@@ -0,0 +1,8 @@
+# Security
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `accessToken` | *string* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/Activity.md b/docs/Models/Operations/Activity.md
new file mode 100644
index 0000000..2fd2459
--- /dev/null
+++ b/docs/Models/Operations/Activity.md
@@ -0,0 +1,15 @@
+# Activity
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `uuid` | *?string* | :heavy_minus_sign: | N/A |
+| `type` | *?string* | :heavy_minus_sign: | N/A |
+| `cancellable` | *?bool* | :heavy_minus_sign: | N/A |
+| `userID` | *?float* | :heavy_minus_sign: | N/A |
+| `title` | *?string* | :heavy_minus_sign: | N/A |
+| `subtitle` | *?string* | :heavy_minus_sign: | N/A |
+| `progress` | *?float* | :heavy_minus_sign: | N/A |
+| `context` | [?\LukeHagar\Plex_API\Models\Operations\Context](../../Models/Operations/Context.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/AddPlaylistContentsErrors.md b/docs/Models/Operations/AddPlaylistContentsErrors.md
new file mode 100644
index 0000000..141feac
--- /dev/null
+++ b/docs/Models/Operations/AddPlaylistContentsErrors.md
@@ -0,0 +1,10 @@
+# AddPlaylistContentsErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/AddPlaylistContentsRequest.md b/docs/Models/Operations/AddPlaylistContentsRequest.md
new file mode 100644
index 0000000..7c7d343
--- /dev/null
+++ b/docs/Models/Operations/AddPlaylistContentsRequest.md
@@ -0,0 +1,10 @@
+# AddPlaylistContentsRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- |
+| `playlistID` | *float* | :heavy_check_mark: | the ID of the playlist | |
+| `uri` | *string* | :heavy_check_mark: | the content URI for the playlist | library://.. |
+| `playQueueID` | *float* | :heavy_check_mark: | the play queue to add to a playlist | 123 |
\ No newline at end of file
diff --git a/docs/Models/Operations/AddPlaylistContentsResponse.md b/docs/Models/Operations/AddPlaylistContentsResponse.md
new file mode 100644
index 0000000..8d3ba10
--- /dev/null
+++ b/docs/Models/Operations/AddPlaylistContentsResponse.md
@@ -0,0 +1,11 @@
+# AddPlaylistContentsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\AddPlaylistContentsResponseBody](../../Models/Operations/AddPlaylistContentsResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/AddPlaylistContentsResponseBody.md b/docs/Models/Operations/AddPlaylistContentsResponseBody.md
new file mode 100644
index 0000000..ef7c7b3
--- /dev/null
+++ b/docs/Models/Operations/AddPlaylistContentsResponseBody.md
@@ -0,0 +1,10 @@
+# AddPlaylistContentsResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\AddPlaylistContentsErrors](../../Models/Operations/AddPlaylistContentsErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/ApplyUpdatesErrors.md b/docs/Models/Operations/ApplyUpdatesErrors.md
new file mode 100644
index 0000000..53cf91e
--- /dev/null
+++ b/docs/Models/Operations/ApplyUpdatesErrors.md
@@ -0,0 +1,10 @@
+# ApplyUpdatesErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/ApplyUpdatesRequest.md b/docs/Models/Operations/ApplyUpdatesRequest.md
new file mode 100644
index 0000000..b656637
--- /dev/null
+++ b/docs/Models/Operations/ApplyUpdatesRequest.md
@@ -0,0 +1,9 @@
+# ApplyUpdatesRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `tonight` | [?\LukeHagar\Plex_API\Models\Operations\Tonight](../../Models/Operations/Tonight.md) | :heavy_minus_sign: | 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 |
+| `skip` | [?\LukeHagar\Plex_API\Models\Operations\Skip](../../Models/Operations/Skip.md) | :heavy_minus_sign: | Indicate that the latest version should be marked as skipped. The entry for this version will have the `state` set to `skipped`. |
\ No newline at end of file
diff --git a/docs/Models/Operations/ApplyUpdatesResponse.md b/docs/Models/Operations/ApplyUpdatesResponse.md
new file mode 100644
index 0000000..cad2205
--- /dev/null
+++ b/docs/Models/Operations/ApplyUpdatesResponse.md
@@ -0,0 +1,11 @@
+# ApplyUpdatesResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\ApplyUpdatesResponseBody](../../Models/Operations/ApplyUpdatesResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/ApplyUpdatesResponseBody.md b/docs/Models/Operations/ApplyUpdatesResponseBody.md
new file mode 100644
index 0000000..3380b0d
--- /dev/null
+++ b/docs/Models/Operations/ApplyUpdatesResponseBody.md
@@ -0,0 +1,10 @@
+# ApplyUpdatesResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\ApplyUpdatesErrors](../../Models/Operations/ApplyUpdatesErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/ButlerTask.md b/docs/Models/Operations/ButlerTask.md
new file mode 100644
index 0000000..bb1522e
--- /dev/null
+++ b/docs/Models/Operations/ButlerTask.md
@@ -0,0 +1,13 @@
+# ButlerTask
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `name` | *?string* | :heavy_minus_sign: | N/A | BackupDatabase |
+| `interval` | *?float* | :heavy_minus_sign: | N/A | 3 |
+| `scheduleRandomized` | *?bool* | :heavy_minus_sign: | N/A | |
+| `enabled` | *?bool* | :heavy_minus_sign: | N/A | |
+| `title` | *?string* | :heavy_minus_sign: | N/A | Backup Database |
+| `description` | *?string* | :heavy_minus_sign: | N/A | Create a backup copy of the server's database in the configured backup directory |
\ No newline at end of file
diff --git a/docs/Models/Operations/ButlerTasks.md b/docs/Models/Operations/ButlerTasks.md
new file mode 100644
index 0000000..1d07099
--- /dev/null
+++ b/docs/Models/Operations/ButlerTasks.md
@@ -0,0 +1,8 @@
+# ButlerTasks
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
+| `butlerTask` | array<[\LukeHagar\Plex_API\Models\Operations\ButlerTask](../../Models/Operations/ButlerTask.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/CancelServerActivitiesErrors.md b/docs/Models/Operations/CancelServerActivitiesErrors.md
new file mode 100644
index 0000000..05ec15a
--- /dev/null
+++ b/docs/Models/Operations/CancelServerActivitiesErrors.md
@@ -0,0 +1,10 @@
+# CancelServerActivitiesErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/CancelServerActivitiesRequest.md b/docs/Models/Operations/CancelServerActivitiesRequest.md
new file mode 100644
index 0000000..2e1518f
--- /dev/null
+++ b/docs/Models/Operations/CancelServerActivitiesRequest.md
@@ -0,0 +1,8 @@
+# CancelServerActivitiesRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- |
+| `activityUUID` | *string* | :heavy_check_mark: | The UUID of the activity to cancel. |
\ No newline at end of file
diff --git a/docs/Models/Operations/CancelServerActivitiesResponse.md b/docs/Models/Operations/CancelServerActivitiesResponse.md
new file mode 100644
index 0000000..14b3102
--- /dev/null
+++ b/docs/Models/Operations/CancelServerActivitiesResponse.md
@@ -0,0 +1,11 @@
+# CancelServerActivitiesResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\CancelServerActivitiesResponseBody](../../Models/Operations/CancelServerActivitiesResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/CancelServerActivitiesResponseBody.md b/docs/Models/Operations/CancelServerActivitiesResponseBody.md
new file mode 100644
index 0000000..41df54e
--- /dev/null
+++ b/docs/Models/Operations/CancelServerActivitiesResponseBody.md
@@ -0,0 +1,10 @@
+# CancelServerActivitiesResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\CancelServerActivitiesErrors](../../Models/Operations/CancelServerActivitiesErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/CheckForUpdatesErrors.md b/docs/Models/Operations/CheckForUpdatesErrors.md
new file mode 100644
index 0000000..89cfa3f
--- /dev/null
+++ b/docs/Models/Operations/CheckForUpdatesErrors.md
@@ -0,0 +1,10 @@
+# CheckForUpdatesErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/CheckForUpdatesRequest.md b/docs/Models/Operations/CheckForUpdatesRequest.md
new file mode 100644
index 0000000..60c7329
--- /dev/null
+++ b/docs/Models/Operations/CheckForUpdatesRequest.md
@@ -0,0 +1,8 @@
+# CheckForUpdatesRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
+| `download` | [?\LukeHagar\Plex_API\Models\Operations\Download](../../Models/Operations/Download.md) | :heavy_minus_sign: | Indicate that you want to start download any updates found. |
\ No newline at end of file
diff --git a/docs/Models/Operations/CheckForUpdatesResponse.md b/docs/Models/Operations/CheckForUpdatesResponse.md
new file mode 100644
index 0000000..34c895b
--- /dev/null
+++ b/docs/Models/Operations/CheckForUpdatesResponse.md
@@ -0,0 +1,11 @@
+# CheckForUpdatesResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\CheckForUpdatesResponseBody](../../Models/Operations/CheckForUpdatesResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/CheckForUpdatesResponseBody.md b/docs/Models/Operations/CheckForUpdatesResponseBody.md
new file mode 100644
index 0000000..fbd90aa
--- /dev/null
+++ b/docs/Models/Operations/CheckForUpdatesResponseBody.md
@@ -0,0 +1,10 @@
+# CheckForUpdatesResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\CheckForUpdatesErrors](../../Models/Operations/CheckForUpdatesErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/ClearPlaylistContentsErrors.md b/docs/Models/Operations/ClearPlaylistContentsErrors.md
new file mode 100644
index 0000000..a107aeb
--- /dev/null
+++ b/docs/Models/Operations/ClearPlaylistContentsErrors.md
@@ -0,0 +1,10 @@
+# ClearPlaylistContentsErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/ClearPlaylistContentsRequest.md b/docs/Models/Operations/ClearPlaylistContentsRequest.md
new file mode 100644
index 0000000..7d0e508
--- /dev/null
+++ b/docs/Models/Operations/ClearPlaylistContentsRequest.md
@@ -0,0 +1,8 @@
+# ClearPlaylistContentsRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------- | ---------------------- | ---------------------- | ---------------------- |
+| `playlistID` | *float* | :heavy_check_mark: | the ID of the playlist |
\ No newline at end of file
diff --git a/docs/Models/Operations/ClearPlaylistContentsResponse.md b/docs/Models/Operations/ClearPlaylistContentsResponse.md
new file mode 100644
index 0000000..9204f33
--- /dev/null
+++ b/docs/Models/Operations/ClearPlaylistContentsResponse.md
@@ -0,0 +1,11 @@
+# ClearPlaylistContentsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\ClearPlaylistContentsResponseBody](../../Models/Operations/ClearPlaylistContentsResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/ClearPlaylistContentsResponseBody.md b/docs/Models/Operations/ClearPlaylistContentsResponseBody.md
new file mode 100644
index 0000000..4ede52b
--- /dev/null
+++ b/docs/Models/Operations/ClearPlaylistContentsResponseBody.md
@@ -0,0 +1,10 @@
+# ClearPlaylistContentsResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\ClearPlaylistContentsErrors](../../Models/Operations/ClearPlaylistContentsErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/Context.md b/docs/Models/Operations/Context.md
new file mode 100644
index 0000000..5395008
--- /dev/null
+++ b/docs/Models/Operations/Context.md
@@ -0,0 +1,8 @@
+# Context
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `librarySectionID` | *?string* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/Country.md b/docs/Models/Operations/Country.md
new file mode 100644
index 0000000..920bed6
--- /dev/null
+++ b/docs/Models/Operations/Country.md
@@ -0,0 +1,8 @@
+# Country
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------ | ------------------------ | ------------------------ | ------------------------ | ------------------------ |
+| `tag` | *?string* | :heavy_minus_sign: | N/A | United States of America |
\ No newline at end of file
diff --git a/docs/Models/Operations/CreatePlaylistErrors.md b/docs/Models/Operations/CreatePlaylistErrors.md
new file mode 100644
index 0000000..62f5ab5
--- /dev/null
+++ b/docs/Models/Operations/CreatePlaylistErrors.md
@@ -0,0 +1,10 @@
+# CreatePlaylistErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/CreatePlaylistRequest.md b/docs/Models/Operations/CreatePlaylistRequest.md
new file mode 100644
index 0000000..c72454f
--- /dev/null
+++ b/docs/Models/Operations/CreatePlaylistRequest.md
@@ -0,0 +1,12 @@
+# CreatePlaylistRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
+| `title` | *string* | :heavy_check_mark: | name of the playlist |
+| `type` | [\LukeHagar\Plex_API\Models\Operations\Type](../../Models/Operations/Type.md) | :heavy_check_mark: | type of playlist to create |
+| `smart` | [\LukeHagar\Plex_API\Models\Operations\Smart](../../Models/Operations/Smart.md) | :heavy_check_mark: | whether the playlist is smart or not |
+| `uri` | *?string* | :heavy_minus_sign: | the content URI for the playlist |
+| `playQueueID` | *?float* | :heavy_minus_sign: | the play queue to copy to a playlist |
\ No newline at end of file
diff --git a/docs/Models/Operations/CreatePlaylistResponse.md b/docs/Models/Operations/CreatePlaylistResponse.md
new file mode 100644
index 0000000..a59b77d
--- /dev/null
+++ b/docs/Models/Operations/CreatePlaylistResponse.md
@@ -0,0 +1,11 @@
+# CreatePlaylistResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\CreatePlaylistResponseBody](../../Models/Operations/CreatePlaylistResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/CreatePlaylistResponseBody.md b/docs/Models/Operations/CreatePlaylistResponseBody.md
new file mode 100644
index 0000000..63ceecf
--- /dev/null
+++ b/docs/Models/Operations/CreatePlaylistResponseBody.md
@@ -0,0 +1,10 @@
+# CreatePlaylistResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\CreatePlaylistErrors](../../Models/Operations/CreatePlaylistErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/DeleteLibraryErrors.md b/docs/Models/Operations/DeleteLibraryErrors.md
new file mode 100644
index 0000000..e119a1e
--- /dev/null
+++ b/docs/Models/Operations/DeleteLibraryErrors.md
@@ -0,0 +1,10 @@
+# DeleteLibraryErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/DeleteLibraryRequest.md b/docs/Models/Operations/DeleteLibraryRequest.md
new file mode 100644
index 0000000..c42a582
--- /dev/null
+++ b/docs/Models/Operations/DeleteLibraryRequest.md
@@ -0,0 +1,8 @@
+# DeleteLibraryRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ |
+| `sectionId` | *float* | :heavy_check_mark: | the Id of the library to query | 1000 |
\ No newline at end of file
diff --git a/docs/Models/Operations/DeleteLibraryResponse.md b/docs/Models/Operations/DeleteLibraryResponse.md
new file mode 100644
index 0000000..c5b4bbb
--- /dev/null
+++ b/docs/Models/Operations/DeleteLibraryResponse.md
@@ -0,0 +1,11 @@
+# DeleteLibraryResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\DeleteLibraryResponseBody](../../Models/Operations/DeleteLibraryResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/DeleteLibraryResponseBody.md b/docs/Models/Operations/DeleteLibraryResponseBody.md
new file mode 100644
index 0000000..1aa3c36
--- /dev/null
+++ b/docs/Models/Operations/DeleteLibraryResponseBody.md
@@ -0,0 +1,10 @@
+# DeleteLibraryResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\DeleteLibraryErrors](../../Models/Operations/DeleteLibraryErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/DeletePlaylistErrors.md b/docs/Models/Operations/DeletePlaylistErrors.md
new file mode 100644
index 0000000..93ed1dd
--- /dev/null
+++ b/docs/Models/Operations/DeletePlaylistErrors.md
@@ -0,0 +1,10 @@
+# DeletePlaylistErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/DeletePlaylistRequest.md b/docs/Models/Operations/DeletePlaylistRequest.md
new file mode 100644
index 0000000..0e975da
--- /dev/null
+++ b/docs/Models/Operations/DeletePlaylistRequest.md
@@ -0,0 +1,8 @@
+# DeletePlaylistRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------- | ---------------------- | ---------------------- | ---------------------- |
+| `playlistID` | *float* | :heavy_check_mark: | the ID of the playlist |
\ No newline at end of file
diff --git a/docs/Models/Operations/DeletePlaylistResponse.md b/docs/Models/Operations/DeletePlaylistResponse.md
new file mode 100644
index 0000000..a783e04
--- /dev/null
+++ b/docs/Models/Operations/DeletePlaylistResponse.md
@@ -0,0 +1,11 @@
+# DeletePlaylistResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\DeletePlaylistResponseBody](../../Models/Operations/DeletePlaylistResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/DeletePlaylistResponseBody.md b/docs/Models/Operations/DeletePlaylistResponseBody.md
new file mode 100644
index 0000000..af7340b
--- /dev/null
+++ b/docs/Models/Operations/DeletePlaylistResponseBody.md
@@ -0,0 +1,10 @@
+# DeletePlaylistResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\DeletePlaylistErrors](../../Models/Operations/DeletePlaylistErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/Device.md b/docs/Models/Operations/Device.md
new file mode 100644
index 0000000..31336ff
--- /dev/null
+++ b/docs/Models/Operations/Device.md
@@ -0,0 +1,12 @@
+# Device
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `id` | *?float* | :heavy_minus_sign: | N/A | 1 |
+| `name` | *?string* | :heavy_minus_sign: | N/A | iPhone |
+| `platform` | *?string* | :heavy_minus_sign: | N/A | iOS |
+| `clientIdentifier` | *?string* | :heavy_minus_sign: | N/A | |
+| `createdAt` | *?float* | :heavy_minus_sign: | N/A | 1654131230 |
\ No newline at end of file
diff --git a/docs/Models/Operations/Director.md b/docs/Models/Operations/Director.md
new file mode 100644
index 0000000..7719fbb
--- /dev/null
+++ b/docs/Models/Operations/Director.md
@@ -0,0 +1,8 @@
+# Director
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `tag` | *?string* | :heavy_minus_sign: | N/A | Peyton Reed |
\ No newline at end of file
diff --git a/docs/Models/Operations/Directory.md b/docs/Models/Operations/Directory.md
new file mode 100644
index 0000000..598e7f5
--- /dev/null
+++ b/docs/Models/Operations/Directory.md
@@ -0,0 +1,10 @@
+# Directory
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `count` | *?float* | :heavy_minus_sign: | N/A |
+| `key` | *?string* | :heavy_minus_sign: | N/A |
+| `title` | *?string* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/Download.md b/docs/Models/Operations/Download.md
new file mode 100644
index 0000000..a29a21f
--- /dev/null
+++ b/docs/Models/Operations/Download.md
@@ -0,0 +1,11 @@
+# Download
+
+Indicate that you want to start download any updates found.
+
+
+## Values
+
+| Name | Value |
+| ------ | ------ |
+| `Zero` | 0 |
+| `One` | 1 |
\ No newline at end of file
diff --git a/docs/Models/Operations/EnablePaperTrailErrors.md b/docs/Models/Operations/EnablePaperTrailErrors.md
new file mode 100644
index 0000000..1d4398d
--- /dev/null
+++ b/docs/Models/Operations/EnablePaperTrailErrors.md
@@ -0,0 +1,10 @@
+# EnablePaperTrailErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/EnablePaperTrailResponse.md b/docs/Models/Operations/EnablePaperTrailResponse.md
new file mode 100644
index 0000000..6522b1d
--- /dev/null
+++ b/docs/Models/Operations/EnablePaperTrailResponse.md
@@ -0,0 +1,11 @@
+# EnablePaperTrailResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\EnablePaperTrailResponseBody](../../Models/Operations/EnablePaperTrailResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/EnablePaperTrailResponseBody.md b/docs/Models/Operations/EnablePaperTrailResponseBody.md
new file mode 100644
index 0000000..eb989ab
--- /dev/null
+++ b/docs/Models/Operations/EnablePaperTrailResponseBody.md
@@ -0,0 +1,10 @@
+# EnablePaperTrailResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\EnablePaperTrailErrors](../../Models/Operations/EnablePaperTrailErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/Errors.md b/docs/Models/Operations/Errors.md
new file mode 100644
index 0000000..3547374
--- /dev/null
+++ b/docs/Models/Operations/Errors.md
@@ -0,0 +1,10 @@
+# Errors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/Force.md b/docs/Models/Operations/Force.md
new file mode 100644
index 0000000..1cdfc16
--- /dev/null
+++ b/docs/Models/Operations/Force.md
@@ -0,0 +1,13 @@
+# Force
+
+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.
+
+
+
+## Values
+
+| Name | Value |
+| ------ | ------ |
+| `Zero` | 0 |
+| `One` | 1 |
\ No newline at end of file
diff --git a/docs/Models/Operations/Genre.md b/docs/Models/Operations/Genre.md
new file mode 100644
index 0000000..47f02b2
--- /dev/null
+++ b/docs/Models/Operations/Genre.md
@@ -0,0 +1,8 @@
+# Genre
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `tag` | *?string* | :heavy_minus_sign: | N/A | Comedy |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetAvailableClientsErrors.md b/docs/Models/Operations/GetAvailableClientsErrors.md
new file mode 100644
index 0000000..600f781
--- /dev/null
+++ b/docs/Models/Operations/GetAvailableClientsErrors.md
@@ -0,0 +1,10 @@
+# GetAvailableClientsErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetAvailableClientsMediaContainer.md b/docs/Models/Operations/GetAvailableClientsMediaContainer.md
new file mode 100644
index 0000000..286989a
--- /dev/null
+++ b/docs/Models/Operations/GetAvailableClientsMediaContainer.md
@@ -0,0 +1,9 @@
+# GetAvailableClientsMediaContainer
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| `size` | *?float* | :heavy_minus_sign: | N/A | 1 |
+| `server` | array<[\LukeHagar\Plex_API\Models\Operations\Server](../../Models/Operations/Server.md)> | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetAvailableClientsResponse.md b/docs/Models/Operations/GetAvailableClientsResponse.md
new file mode 100644
index 0000000..d19bdb4
--- /dev/null
+++ b/docs/Models/Operations/GetAvailableClientsResponse.md
@@ -0,0 +1,12 @@
+# GetAvailableClientsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `responseBodies` | array<[\LukeHagar\Plex_API\Models\Operations\ResponseBody](../../Models/Operations/ResponseBody.md)> | :heavy_minus_sign: | Available Clients |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\GetAvailableClientsResponseBody](../../Models/Operations/GetAvailableClientsResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetAvailableClientsResponseBody.md b/docs/Models/Operations/GetAvailableClientsResponseBody.md
new file mode 100644
index 0000000..f28949f
--- /dev/null
+++ b/docs/Models/Operations/GetAvailableClientsResponseBody.md
@@ -0,0 +1,10 @@
+# GetAvailableClientsResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetAvailableClientsErrors](../../Models/Operations/GetAvailableClientsErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetButlerTasksButlerResponseBody.md b/docs/Models/Operations/GetButlerTasksButlerResponseBody.md
new file mode 100644
index 0000000..b5577b9
--- /dev/null
+++ b/docs/Models/Operations/GetButlerTasksButlerResponseBody.md
@@ -0,0 +1,10 @@
+# GetButlerTasksButlerResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetButlerTasksErrors](../../Models/Operations/GetButlerTasksErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetButlerTasksErrors.md b/docs/Models/Operations/GetButlerTasksErrors.md
new file mode 100644
index 0000000..3471bba
--- /dev/null
+++ b/docs/Models/Operations/GetButlerTasksErrors.md
@@ -0,0 +1,10 @@
+# GetButlerTasksErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetButlerTasksResponse.md b/docs/Models/Operations/GetButlerTasksResponse.md
new file mode 100644
index 0000000..e620b1e
--- /dev/null
+++ b/docs/Models/Operations/GetButlerTasksResponse.md
@@ -0,0 +1,12 @@
+# GetButlerTasksResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `twoHundredApplicationJsonObject` | [?\LukeHagar\Plex_API\Models\Operations\GetButlerTasksResponseBody](../../Models/Operations/GetButlerTasksResponseBody.md) | :heavy_minus_sign: | All butler tasks |
+| `fourHundredAndOneApplicationJsonObject` | [?\LukeHagar\Plex_API\Models\Operations\GetButlerTasksButlerResponseBody](../../Models/Operations/GetButlerTasksButlerResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetButlerTasksResponseBody.md b/docs/Models/Operations/GetButlerTasksResponseBody.md
new file mode 100644
index 0000000..7202636
--- /dev/null
+++ b/docs/Models/Operations/GetButlerTasksResponseBody.md
@@ -0,0 +1,10 @@
+# GetButlerTasksResponseBody
+
+All butler tasks
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `butlerTasks` | [?\LukeHagar\Plex_API\Models\Operations\ButlerTasks](../../Models/Operations/ButlerTasks.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetCommonLibraryItemsErrors.md b/docs/Models/Operations/GetCommonLibraryItemsErrors.md
new file mode 100644
index 0000000..965572e
--- /dev/null
+++ b/docs/Models/Operations/GetCommonLibraryItemsErrors.md
@@ -0,0 +1,10 @@
+# GetCommonLibraryItemsErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetCommonLibraryItemsRequest.md b/docs/Models/Operations/GetCommonLibraryItemsRequest.md
new file mode 100644
index 0000000..083d6a3
--- /dev/null
+++ b/docs/Models/Operations/GetCommonLibraryItemsRequest.md
@@ -0,0 +1,10 @@
+# GetCommonLibraryItemsRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ |
+| `sectionId` | *float* | :heavy_check_mark: | the Id of the library to query |
+| `type` | *float* | :heavy_check_mark: | item type |
+| `filter` | *?string* | :heavy_minus_sign: | the filter parameter |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetCommonLibraryItemsResponse.md b/docs/Models/Operations/GetCommonLibraryItemsResponse.md
new file mode 100644
index 0000000..cdc07da
--- /dev/null
+++ b/docs/Models/Operations/GetCommonLibraryItemsResponse.md
@@ -0,0 +1,11 @@
+# GetCommonLibraryItemsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\GetCommonLibraryItemsResponseBody](../../Models/Operations/GetCommonLibraryItemsResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetCommonLibraryItemsResponseBody.md b/docs/Models/Operations/GetCommonLibraryItemsResponseBody.md
new file mode 100644
index 0000000..2b85bbc
--- /dev/null
+++ b/docs/Models/Operations/GetCommonLibraryItemsResponseBody.md
@@ -0,0 +1,10 @@
+# GetCommonLibraryItemsResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetCommonLibraryItemsErrors](../../Models/Operations/GetCommonLibraryItemsErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetDevicesErrors.md b/docs/Models/Operations/GetDevicesErrors.md
new file mode 100644
index 0000000..8a3f328
--- /dev/null
+++ b/docs/Models/Operations/GetDevicesErrors.md
@@ -0,0 +1,10 @@
+# GetDevicesErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetDevicesMediaContainer.md b/docs/Models/Operations/GetDevicesMediaContainer.md
new file mode 100644
index 0000000..0236248
--- /dev/null
+++ b/docs/Models/Operations/GetDevicesMediaContainer.md
@@ -0,0 +1,10 @@
+# GetDevicesMediaContainer
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| `size` | *?float* | :heavy_minus_sign: | N/A | 151 |
+| `identifier` | *?string* | :heavy_minus_sign: | N/A | com.plexapp.system.devices |
+| `device` | array<[\LukeHagar\Plex_API\Models\Operations\Device](../../Models/Operations/Device.md)> | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetDevicesResponse.md b/docs/Models/Operations/GetDevicesResponse.md
new file mode 100644
index 0000000..f0ba4e9
--- /dev/null
+++ b/docs/Models/Operations/GetDevicesResponse.md
@@ -0,0 +1,12 @@
+# GetDevicesResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `twoHundredApplicationJsonObject` | [?\LukeHagar\Plex_API\Models\Operations\GetDevicesResponseBody](../../Models/Operations/GetDevicesResponseBody.md) | :heavy_minus_sign: | Devices |
+| `fourHundredAndOneApplicationJsonObject` | [?\LukeHagar\Plex_API\Models\Operations\GetDevicesServerResponseBody](../../Models/Operations/GetDevicesServerResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetDevicesResponseBody.md b/docs/Models/Operations/GetDevicesResponseBody.md
new file mode 100644
index 0000000..d9f3973
--- /dev/null
+++ b/docs/Models/Operations/GetDevicesResponseBody.md
@@ -0,0 +1,10 @@
+# GetDevicesResponseBody
+
+Devices
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
+| `mediaContainer` | [?\LukeHagar\Plex_API\Models\Operations\GetDevicesMediaContainer](../../Models/Operations/GetDevicesMediaContainer.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetDevicesServerResponseBody.md b/docs/Models/Operations/GetDevicesServerResponseBody.md
new file mode 100644
index 0000000..ce359c1
--- /dev/null
+++ b/docs/Models/Operations/GetDevicesServerResponseBody.md
@@ -0,0 +1,10 @@
+# GetDevicesServerResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetDevicesErrors](../../Models/Operations/GetDevicesErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetFileHashErrors.md b/docs/Models/Operations/GetFileHashErrors.md
new file mode 100644
index 0000000..6d9bc64
--- /dev/null
+++ b/docs/Models/Operations/GetFileHashErrors.md
@@ -0,0 +1,10 @@
+# GetFileHashErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetFileHashRequest.md b/docs/Models/Operations/GetFileHashRequest.md
new file mode 100644
index 0000000..43478fd
--- /dev/null
+++ b/docs/Models/Operations/GetFileHashRequest.md
@@ -0,0 +1,9 @@
+# GetFileHashRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- |
+| `url` | *string* | :heavy_check_mark: | This is the path to the local file, must be prefixed by `file://` | file://C:\Image.png&type=13 |
+| `type` | *?float* | :heavy_minus_sign: | Item type | |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetFileHashResponse.md b/docs/Models/Operations/GetFileHashResponse.md
new file mode 100644
index 0000000..624b8e6
--- /dev/null
+++ b/docs/Models/Operations/GetFileHashResponse.md
@@ -0,0 +1,11 @@
+# GetFileHashResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\GetFileHashResponseBody](../../Models/Operations/GetFileHashResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetFileHashResponseBody.md b/docs/Models/Operations/GetFileHashResponseBody.md
new file mode 100644
index 0000000..f393d2d
--- /dev/null
+++ b/docs/Models/Operations/GetFileHashResponseBody.md
@@ -0,0 +1,10 @@
+# GetFileHashResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetFileHashErrors](../../Models/Operations/GetFileHashErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetGlobalHubsErrors.md b/docs/Models/Operations/GetGlobalHubsErrors.md
new file mode 100644
index 0000000..a2db4ea
--- /dev/null
+++ b/docs/Models/Operations/GetGlobalHubsErrors.md
@@ -0,0 +1,10 @@
+# GetGlobalHubsErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetGlobalHubsRequest.md b/docs/Models/Operations/GetGlobalHubsRequest.md
new file mode 100644
index 0000000..35c80f9
--- /dev/null
+++ b/docs/Models/Operations/GetGlobalHubsRequest.md
@@ -0,0 +1,9 @@
+# GetGlobalHubsRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `count` | *?float* | :heavy_minus_sign: | The number of items to return with each hub. |
+| `onlyTransient` | [?\LukeHagar\Plex_API\Models\Operations\OnlyTransient](../../Models/Operations/OnlyTransient.md) | :heavy_minus_sign: | 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). |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetGlobalHubsResponse.md b/docs/Models/Operations/GetGlobalHubsResponse.md
new file mode 100644
index 0000000..7727055
--- /dev/null
+++ b/docs/Models/Operations/GetGlobalHubsResponse.md
@@ -0,0 +1,11 @@
+# GetGlobalHubsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\GetGlobalHubsResponseBody](../../Models/Operations/GetGlobalHubsResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetGlobalHubsResponseBody.md b/docs/Models/Operations/GetGlobalHubsResponseBody.md
new file mode 100644
index 0000000..67d74c5
--- /dev/null
+++ b/docs/Models/Operations/GetGlobalHubsResponseBody.md
@@ -0,0 +1,10 @@
+# GetGlobalHubsResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetGlobalHubsErrors](../../Models/Operations/GetGlobalHubsErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetLatestLibraryItemsErrors.md b/docs/Models/Operations/GetLatestLibraryItemsErrors.md
new file mode 100644
index 0000000..2e48743
--- /dev/null
+++ b/docs/Models/Operations/GetLatestLibraryItemsErrors.md
@@ -0,0 +1,10 @@
+# GetLatestLibraryItemsErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetLatestLibraryItemsRequest.md b/docs/Models/Operations/GetLatestLibraryItemsRequest.md
new file mode 100644
index 0000000..fb47866
--- /dev/null
+++ b/docs/Models/Operations/GetLatestLibraryItemsRequest.md
@@ -0,0 +1,10 @@
+# GetLatestLibraryItemsRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ |
+| `sectionId` | *float* | :heavy_check_mark: | the Id of the library to query |
+| `type` | *float* | :heavy_check_mark: | item type |
+| `filter` | *?string* | :heavy_minus_sign: | the filter parameter |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetLatestLibraryItemsResponse.md b/docs/Models/Operations/GetLatestLibraryItemsResponse.md
new file mode 100644
index 0000000..4a59c0f
--- /dev/null
+++ b/docs/Models/Operations/GetLatestLibraryItemsResponse.md
@@ -0,0 +1,11 @@
+# GetLatestLibraryItemsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\GetLatestLibraryItemsResponseBody](../../Models/Operations/GetLatestLibraryItemsResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetLatestLibraryItemsResponseBody.md b/docs/Models/Operations/GetLatestLibraryItemsResponseBody.md
new file mode 100644
index 0000000..430d3f8
--- /dev/null
+++ b/docs/Models/Operations/GetLatestLibraryItemsResponseBody.md
@@ -0,0 +1,10 @@
+# GetLatestLibraryItemsResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetLatestLibraryItemsErrors](../../Models/Operations/GetLatestLibraryItemsErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetLibrariesErrors.md b/docs/Models/Operations/GetLibrariesErrors.md
new file mode 100644
index 0000000..0fe2cf1
--- /dev/null
+++ b/docs/Models/Operations/GetLibrariesErrors.md
@@ -0,0 +1,10 @@
+# GetLibrariesErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetLibrariesResponse.md b/docs/Models/Operations/GetLibrariesResponse.md
new file mode 100644
index 0000000..192c817
--- /dev/null
+++ b/docs/Models/Operations/GetLibrariesResponse.md
@@ -0,0 +1,11 @@
+# GetLibrariesResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\GetLibrariesResponseBody](../../Models/Operations/GetLibrariesResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetLibrariesResponseBody.md b/docs/Models/Operations/GetLibrariesResponseBody.md
new file mode 100644
index 0000000..f27a7db
--- /dev/null
+++ b/docs/Models/Operations/GetLibrariesResponseBody.md
@@ -0,0 +1,10 @@
+# GetLibrariesResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetLibrariesErrors](../../Models/Operations/GetLibrariesErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetLibraryErrors.md b/docs/Models/Operations/GetLibraryErrors.md
new file mode 100644
index 0000000..c7d122c
--- /dev/null
+++ b/docs/Models/Operations/GetLibraryErrors.md
@@ -0,0 +1,10 @@
+# GetLibraryErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetLibraryHubsErrors.md b/docs/Models/Operations/GetLibraryHubsErrors.md
new file mode 100644
index 0000000..beaea58
--- /dev/null
+++ b/docs/Models/Operations/GetLibraryHubsErrors.md
@@ -0,0 +1,10 @@
+# GetLibraryHubsErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetLibraryHubsRequest.md b/docs/Models/Operations/GetLibraryHubsRequest.md
new file mode 100644
index 0000000..6e682d5
--- /dev/null
+++ b/docs/Models/Operations/GetLibraryHubsRequest.md
@@ -0,0 +1,10 @@
+# GetLibraryHubsRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `sectionId` | *float* | :heavy_check_mark: | the Id of the library to query |
+| `count` | *?float* | :heavy_minus_sign: | The number of items to return with each hub. |
+| `onlyTransient` | [?\LukeHagar\Plex_API\Models\Operations\QueryParamOnlyTransient](../../Models/Operations/QueryParamOnlyTransient.md) | :heavy_minus_sign: | 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). |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetLibraryHubsResponse.md b/docs/Models/Operations/GetLibraryHubsResponse.md
new file mode 100644
index 0000000..2ced486
--- /dev/null
+++ b/docs/Models/Operations/GetLibraryHubsResponse.md
@@ -0,0 +1,11 @@
+# GetLibraryHubsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\GetLibraryHubsResponseBody](../../Models/Operations/GetLibraryHubsResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetLibraryHubsResponseBody.md b/docs/Models/Operations/GetLibraryHubsResponseBody.md
new file mode 100644
index 0000000..f37711d
--- /dev/null
+++ b/docs/Models/Operations/GetLibraryHubsResponseBody.md
@@ -0,0 +1,10 @@
+# GetLibraryHubsResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetLibraryHubsErrors](../../Models/Operations/GetLibraryHubsErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetLibraryItemsErrors.md b/docs/Models/Operations/GetLibraryItemsErrors.md
new file mode 100644
index 0000000..39d2fc7
--- /dev/null
+++ b/docs/Models/Operations/GetLibraryItemsErrors.md
@@ -0,0 +1,10 @@
+# GetLibraryItemsErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetLibraryItemsRequest.md b/docs/Models/Operations/GetLibraryItemsRequest.md
new file mode 100644
index 0000000..2674567
--- /dev/null
+++ b/docs/Models/Operations/GetLibraryItemsRequest.md
@@ -0,0 +1,10 @@
+# GetLibraryItemsRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ |
+| `sectionId` | *float* | :heavy_check_mark: | the Id of the library to query |
+| `type` | *?float* | :heavy_minus_sign: | item type |
+| `filter` | *?string* | :heavy_minus_sign: | the filter parameter |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetLibraryItemsResponse.md b/docs/Models/Operations/GetLibraryItemsResponse.md
new file mode 100644
index 0000000..e5b46be
--- /dev/null
+++ b/docs/Models/Operations/GetLibraryItemsResponse.md
@@ -0,0 +1,11 @@
+# GetLibraryItemsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\GetLibraryItemsResponseBody](../../Models/Operations/GetLibraryItemsResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetLibraryItemsResponseBody.md b/docs/Models/Operations/GetLibraryItemsResponseBody.md
new file mode 100644
index 0000000..3381089
--- /dev/null
+++ b/docs/Models/Operations/GetLibraryItemsResponseBody.md
@@ -0,0 +1,10 @@
+# GetLibraryItemsResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetLibraryItemsErrors](../../Models/Operations/GetLibraryItemsErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetLibraryRequest.md b/docs/Models/Operations/GetLibraryRequest.md
new file mode 100644
index 0000000..f055e28
--- /dev/null
+++ b/docs/Models/Operations/GetLibraryRequest.md
@@ -0,0 +1,9 @@
+# GetLibraryRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `sectionId` | *float* | :heavy_check_mark: | the Id of the library to query | 1000 |
+| `includeDetails` | [?\LukeHagar\Plex_API\Models\Operations\IncludeDetails](../../Models/Operations/IncludeDetails.md) | :heavy_minus_sign: | 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.
| |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetLibraryResponse.md b/docs/Models/Operations/GetLibraryResponse.md
new file mode 100644
index 0000000..60f402f
--- /dev/null
+++ b/docs/Models/Operations/GetLibraryResponse.md
@@ -0,0 +1,11 @@
+# GetLibraryResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\GetLibraryResponseBody](../../Models/Operations/GetLibraryResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetLibraryResponseBody.md b/docs/Models/Operations/GetLibraryResponseBody.md
new file mode 100644
index 0000000..cfcd56f
--- /dev/null
+++ b/docs/Models/Operations/GetLibraryResponseBody.md
@@ -0,0 +1,10 @@
+# GetLibraryResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetLibraryErrors](../../Models/Operations/GetLibraryErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetMetadataChildrenErrors.md b/docs/Models/Operations/GetMetadataChildrenErrors.md
new file mode 100644
index 0000000..ca225cc
--- /dev/null
+++ b/docs/Models/Operations/GetMetadataChildrenErrors.md
@@ -0,0 +1,10 @@
+# GetMetadataChildrenErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetMetadataChildrenRequest.md b/docs/Models/Operations/GetMetadataChildrenRequest.md
new file mode 100644
index 0000000..f5d23d5
--- /dev/null
+++ b/docs/Models/Operations/GetMetadataChildrenRequest.md
@@ -0,0 +1,8 @@
+# GetMetadataChildrenRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- |
+| `ratingKey` | *float* | :heavy_check_mark: | the id of the library item to return the children of. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetMetadataChildrenResponse.md b/docs/Models/Operations/GetMetadataChildrenResponse.md
new file mode 100644
index 0000000..0b41a54
--- /dev/null
+++ b/docs/Models/Operations/GetMetadataChildrenResponse.md
@@ -0,0 +1,11 @@
+# GetMetadataChildrenResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\GetMetadataChildrenResponseBody](../../Models/Operations/GetMetadataChildrenResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetMetadataChildrenResponseBody.md b/docs/Models/Operations/GetMetadataChildrenResponseBody.md
new file mode 100644
index 0000000..48316b1
--- /dev/null
+++ b/docs/Models/Operations/GetMetadataChildrenResponseBody.md
@@ -0,0 +1,10 @@
+# GetMetadataChildrenResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetMetadataChildrenErrors](../../Models/Operations/GetMetadataChildrenErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetMetadataErrors.md b/docs/Models/Operations/GetMetadataErrors.md
new file mode 100644
index 0000000..98f5293
--- /dev/null
+++ b/docs/Models/Operations/GetMetadataErrors.md
@@ -0,0 +1,10 @@
+# GetMetadataErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetMetadataRequest.md b/docs/Models/Operations/GetMetadataRequest.md
new file mode 100644
index 0000000..c427663
--- /dev/null
+++ b/docs/Models/Operations/GetMetadataRequest.md
@@ -0,0 +1,8 @@
+# GetMetadataRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- |
+| `ratingKey` | *float* | :heavy_check_mark: | the id of the library item to return the children of. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetMetadataResponse.md b/docs/Models/Operations/GetMetadataResponse.md
new file mode 100644
index 0000000..e03dcd4
--- /dev/null
+++ b/docs/Models/Operations/GetMetadataResponse.md
@@ -0,0 +1,11 @@
+# GetMetadataResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\GetMetadataResponseBody](../../Models/Operations/GetMetadataResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetMetadataResponseBody.md b/docs/Models/Operations/GetMetadataResponseBody.md
new file mode 100644
index 0000000..c7fd32f
--- /dev/null
+++ b/docs/Models/Operations/GetMetadataResponseBody.md
@@ -0,0 +1,10 @@
+# GetMetadataResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetMetadataErrors](../../Models/Operations/GetMetadataErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetMyPlexAccountErrors.md b/docs/Models/Operations/GetMyPlexAccountErrors.md
new file mode 100644
index 0000000..e7f4478
--- /dev/null
+++ b/docs/Models/Operations/GetMyPlexAccountErrors.md
@@ -0,0 +1,10 @@
+# GetMyPlexAccountErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetMyPlexAccountResponse.md b/docs/Models/Operations/GetMyPlexAccountResponse.md
new file mode 100644
index 0000000..d49ce74
--- /dev/null
+++ b/docs/Models/Operations/GetMyPlexAccountResponse.md
@@ -0,0 +1,12 @@
+# GetMyPlexAccountResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `twoHundredApplicationJsonObject` | [?\LukeHagar\Plex_API\Models\Operations\GetMyPlexAccountResponseBody](../../Models/Operations/GetMyPlexAccountResponseBody.md) | :heavy_minus_sign: | MyPlex Account |
+| `fourHundredAndOneApplicationJsonObject` | [?\LukeHagar\Plex_API\Models\Operations\GetMyPlexAccountServerResponseBody](../../Models/Operations/GetMyPlexAccountServerResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetMyPlexAccountResponseBody.md b/docs/Models/Operations/GetMyPlexAccountResponseBody.md
new file mode 100644
index 0000000..5c5b69b
--- /dev/null
+++ b/docs/Models/Operations/GetMyPlexAccountResponseBody.md
@@ -0,0 +1,10 @@
+# GetMyPlexAccountResponseBody
+
+MyPlex Account
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
+| `myPlex` | [?\LukeHagar\Plex_API\Models\Operations\MyPlex](../../Models/Operations/MyPlex.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetMyPlexAccountServerResponseBody.md b/docs/Models/Operations/GetMyPlexAccountServerResponseBody.md
new file mode 100644
index 0000000..fdd64ac
--- /dev/null
+++ b/docs/Models/Operations/GetMyPlexAccountServerResponseBody.md
@@ -0,0 +1,10 @@
+# GetMyPlexAccountServerResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetMyPlexAccountErrors](../../Models/Operations/GetMyPlexAccountErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetOnDeckErrors.md b/docs/Models/Operations/GetOnDeckErrors.md
new file mode 100644
index 0000000..fab3e14
--- /dev/null
+++ b/docs/Models/Operations/GetOnDeckErrors.md
@@ -0,0 +1,10 @@
+# GetOnDeckErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetOnDeckLibraryResponseBody.md b/docs/Models/Operations/GetOnDeckLibraryResponseBody.md
new file mode 100644
index 0000000..a7bf1d4
--- /dev/null
+++ b/docs/Models/Operations/GetOnDeckLibraryResponseBody.md
@@ -0,0 +1,10 @@
+# GetOnDeckLibraryResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetOnDeckErrors](../../Models/Operations/GetOnDeckErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetOnDeckMedia.md b/docs/Models/Operations/GetOnDeckMedia.md
new file mode 100644
index 0000000..b284a31
--- /dev/null
+++ b/docs/Models/Operations/GetOnDeckMedia.md
@@ -0,0 +1,22 @@
+# GetOnDeckMedia
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
+| `id` | *?float* | :heavy_minus_sign: | N/A | 80994 |
+| `duration` | *?float* | :heavy_minus_sign: | N/A | 420080 |
+| `bitrate` | *?float* | :heavy_minus_sign: | N/A | 1046 |
+| `width` | *?float* | :heavy_minus_sign: | N/A | 1920 |
+| `height` | *?float* | :heavy_minus_sign: | N/A | 1080 |
+| `aspectRatio` | *?float* | :heavy_minus_sign: | N/A | 1.78 |
+| `audioChannels` | *?float* | :heavy_minus_sign: | N/A | 2 |
+| `audioCodec` | *?string* | :heavy_minus_sign: | N/A | aac |
+| `videoCodec` | *?string* | :heavy_minus_sign: | N/A | hevc |
+| `videoResolution` | *?string* | :heavy_minus_sign: | N/A | 1080 |
+| `container` | *?string* | :heavy_minus_sign: | N/A | mkv |
+| `videoFrameRate` | *?string* | :heavy_minus_sign: | N/A | PAL |
+| `audioProfile` | *?string* | :heavy_minus_sign: | N/A | lc |
+| `videoProfile` | *?string* | :heavy_minus_sign: | N/A | main |
+| `part` | array<[\LukeHagar\Plex_API\Models\Operations\GetOnDeckPart](../../Models/Operations/GetOnDeckPart.md)> | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetOnDeckMediaContainer.md b/docs/Models/Operations/GetOnDeckMediaContainer.md
new file mode 100644
index 0000000..f9c368c
--- /dev/null
+++ b/docs/Models/Operations/GetOnDeckMediaContainer.md
@@ -0,0 +1,14 @@
+# GetOnDeckMediaContainer
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
+| `size` | *?float* | :heavy_minus_sign: | N/A | 16 |
+| `allowSync` | *?bool* | :heavy_minus_sign: | N/A | |
+| `identifier` | *?string* | :heavy_minus_sign: | N/A | com.plexapp.plugins.library |
+| `mediaTagPrefix` | *?string* | :heavy_minus_sign: | N/A | /system/bundle/media/flags/ |
+| `mediaTagVersion` | *?float* | :heavy_minus_sign: | N/A | 1680021154 |
+| `mixedParents` | *?bool* | :heavy_minus_sign: | N/A | |
+| `metadata` | array<[\LukeHagar\Plex_API\Models\Operations\GetOnDeckMetadata](../../Models/Operations/GetOnDeckMetadata.md)> | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetOnDeckMetadata.md b/docs/Models/Operations/GetOnDeckMetadata.md
new file mode 100644
index 0000000..3d3b24c
--- /dev/null
+++ b/docs/Models/Operations/GetOnDeckMetadata.md
@@ -0,0 +1,43 @@
+# GetOnDeckMetadata
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `allowSync` | *?bool* | :heavy_minus_sign: | N/A | |
+| `librarySectionID` | *?float* | :heavy_minus_sign: | N/A | 2 |
+| `librarySectionTitle` | *?string* | :heavy_minus_sign: | N/A | TV Shows |
+| `librarySectionUUID` | *?string* | :heavy_minus_sign: | N/A | 4bb2521c-8ba9-459b-aaee-8ab8bc35eabd |
+| `ratingKey` | *?float* | :heavy_minus_sign: | N/A | 49564 |
+| `key` | *?string* | :heavy_minus_sign: | N/A | /library/metadata/49564 |
+| `parentRatingKey` | *?float* | :heavy_minus_sign: | N/A | 49557 |
+| `grandparentRatingKey` | *?float* | :heavy_minus_sign: | N/A | 49556 |
+| `guid` | *?string* | :heavy_minus_sign: | N/A | plex://episode/5ea7d7402e7ab10042e74d4f |
+| `parentGuid` | *?string* | :heavy_minus_sign: | N/A | plex://season/602e754d67f4c8002ce54b3d |
+| `grandparentGuid` | *?string* | :heavy_minus_sign: | N/A | plex://show/5d9c090e705e7a001e6e94d8 |
+| `type` | *?string* | :heavy_minus_sign: | N/A | episode |
+| `title` | *?string* | :heavy_minus_sign: | N/A | Circus |
+| `grandparentKey` | *?string* | :heavy_minus_sign: | N/A | /library/metadata/49556 |
+| `parentKey` | *?string* | :heavy_minus_sign: | N/A | /library/metadata/49557 |
+| `librarySectionKey` | *?string* | :heavy_minus_sign: | N/A | /library/sections/2 |
+| `grandparentTitle` | *?string* | :heavy_minus_sign: | N/A | Bluey (2018) |
+| `parentTitle` | *?string* | :heavy_minus_sign: | N/A | Season 2 |
+| `contentRating` | *?string* | :heavy_minus_sign: | N/A | TV-Y |
+| `summary` | *?string* | :heavy_minus_sign: | N/A | Bluey is the ringmaster in a game of circus with her friends but Hercules wants to play his motorcycle game instead. Luckily Bluey has a solution to keep everyone happy. |
+| `index` | *?float* | :heavy_minus_sign: | N/A | 33 |
+| `parentIndex` | *?float* | :heavy_minus_sign: | N/A | 2 |
+| `lastViewedAt` | *?float* | :heavy_minus_sign: | N/A | 1681908352 |
+| `year` | *?float* | :heavy_minus_sign: | N/A | 2018 |
+| `thumb` | *?string* | :heavy_minus_sign: | N/A | /library/metadata/49564/thumb/1654258204 |
+| `art` | *?string* | :heavy_minus_sign: | N/A | /library/metadata/49556/art/1680939546 |
+| `parentThumb` | *?string* | :heavy_minus_sign: | N/A | /library/metadata/49557/thumb/1654258204 |
+| `grandparentThumb` | *?string* | :heavy_minus_sign: | N/A | /library/metadata/49556/thumb/1680939546 |
+| `grandparentArt` | *?string* | :heavy_minus_sign: | N/A | /library/metadata/49556/art/1680939546 |
+| `grandparentTheme` | *?string* | :heavy_minus_sign: | N/A | /library/metadata/49556/theme/1680939546 |
+| `duration` | *?float* | :heavy_minus_sign: | N/A | 420080 |
+| `originallyAvailableAt` | [\DateTime](https://www.php.net/manual/en/class.datetime.php) | :heavy_minus_sign: | N/A | 2020-10-31 00:00:00 +0000 UTC |
+| `addedAt` | *?float* | :heavy_minus_sign: | N/A | 1654258196 |
+| `updatedAt` | *?float* | :heavy_minus_sign: | N/A | 1654258204 |
+| `media` | array<[\LukeHagar\Plex_API\Models\Operations\GetOnDeckMedia](../../Models/Operations/GetOnDeckMedia.md)> | :heavy_minus_sign: | N/A | |
+| `guids` | array<[\LukeHagar\Plex_API\Models\Operations\Guids](../../Models/Operations/Guids.md)> | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetOnDeckPart.md b/docs/Models/Operations/GetOnDeckPart.md
new file mode 100644
index 0000000..8d9c99d
--- /dev/null
+++ b/docs/Models/Operations/GetOnDeckPart.md
@@ -0,0 +1,16 @@
+# GetOnDeckPart
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| `id` | *?float* | :heavy_minus_sign: | N/A | 80994 |
+| `key` | *?string* | :heavy_minus_sign: | N/A | /library/parts/80994/1655007810/file.mkv |
+| `duration` | *?float* | :heavy_minus_sign: | N/A | 420080 |
+| `file` | *?string* | :heavy_minus_sign: | N/A | /tvshows/Bluey (2018)/Bluey (2018) - S02E33 - Circus.mkv |
+| `size` | *?float* | :heavy_minus_sign: | N/A | 55148931 |
+| `audioProfile` | *?string* | :heavy_minus_sign: | N/A | lc |
+| `container` | *?string* | :heavy_minus_sign: | N/A | mkv |
+| `videoProfile` | *?string* | :heavy_minus_sign: | N/A | main |
+| `stream` | array<[\LukeHagar\Plex_API\Models\Operations\Stream](../../Models/Operations/Stream.md)> | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetOnDeckResponse.md b/docs/Models/Operations/GetOnDeckResponse.md
new file mode 100644
index 0000000..7ec2bb1
--- /dev/null
+++ b/docs/Models/Operations/GetOnDeckResponse.md
@@ -0,0 +1,12 @@
+# GetOnDeckResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `twoHundredApplicationJsonObject` | [?\LukeHagar\Plex_API\Models\Operations\GetOnDeckResponseBody](../../Models/Operations/GetOnDeckResponseBody.md) | :heavy_minus_sign: | The on Deck content |
+| `fourHundredAndOneApplicationJsonObject` | [?\LukeHagar\Plex_API\Models\Operations\GetOnDeckLibraryResponseBody](../../Models/Operations/GetOnDeckLibraryResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetOnDeckResponseBody.md b/docs/Models/Operations/GetOnDeckResponseBody.md
new file mode 100644
index 0000000..9aea995
--- /dev/null
+++ b/docs/Models/Operations/GetOnDeckResponseBody.md
@@ -0,0 +1,10 @@
+# GetOnDeckResponseBody
+
+The on Deck content
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
+| `mediaContainer` | [?\LukeHagar\Plex_API\Models\Operations\GetOnDeckMediaContainer](../../Models/Operations/GetOnDeckMediaContainer.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetPlaylistContentsErrors.md b/docs/Models/Operations/GetPlaylistContentsErrors.md
new file mode 100644
index 0000000..f704583
--- /dev/null
+++ b/docs/Models/Operations/GetPlaylistContentsErrors.md
@@ -0,0 +1,10 @@
+# GetPlaylistContentsErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetPlaylistContentsRequest.md b/docs/Models/Operations/GetPlaylistContentsRequest.md
new file mode 100644
index 0000000..254b4f4
--- /dev/null
+++ b/docs/Models/Operations/GetPlaylistContentsRequest.md
@@ -0,0 +1,9 @@
+# GetPlaylistContentsRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------- | --------------------------------------- | --------------------------------------- | --------------------------------------- |
+| `playlistID` | *float* | :heavy_check_mark: | the ID of the playlist |
+| `type` | *float* | :heavy_check_mark: | the metadata type of the item to return |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetPlaylistContentsResponse.md b/docs/Models/Operations/GetPlaylistContentsResponse.md
new file mode 100644
index 0000000..852f609
--- /dev/null
+++ b/docs/Models/Operations/GetPlaylistContentsResponse.md
@@ -0,0 +1,11 @@
+# GetPlaylistContentsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\GetPlaylistContentsResponseBody](../../Models/Operations/GetPlaylistContentsResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetPlaylistContentsResponseBody.md b/docs/Models/Operations/GetPlaylistContentsResponseBody.md
new file mode 100644
index 0000000..17be5e5
--- /dev/null
+++ b/docs/Models/Operations/GetPlaylistContentsResponseBody.md
@@ -0,0 +1,10 @@
+# GetPlaylistContentsResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetPlaylistContentsErrors](../../Models/Operations/GetPlaylistContentsErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetPlaylistErrors.md b/docs/Models/Operations/GetPlaylistErrors.md
new file mode 100644
index 0000000..5b7b8bd
--- /dev/null
+++ b/docs/Models/Operations/GetPlaylistErrors.md
@@ -0,0 +1,10 @@
+# GetPlaylistErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetPlaylistRequest.md b/docs/Models/Operations/GetPlaylistRequest.md
new file mode 100644
index 0000000..a1e8ed8
--- /dev/null
+++ b/docs/Models/Operations/GetPlaylistRequest.md
@@ -0,0 +1,8 @@
+# GetPlaylistRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------- | ---------------------- | ---------------------- | ---------------------- |
+| `playlistID` | *float* | :heavy_check_mark: | the ID of the playlist |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetPlaylistResponse.md b/docs/Models/Operations/GetPlaylistResponse.md
new file mode 100644
index 0000000..bcda00e
--- /dev/null
+++ b/docs/Models/Operations/GetPlaylistResponse.md
@@ -0,0 +1,11 @@
+# GetPlaylistResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\GetPlaylistResponseBody](../../Models/Operations/GetPlaylistResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetPlaylistResponseBody.md b/docs/Models/Operations/GetPlaylistResponseBody.md
new file mode 100644
index 0000000..ef8701b
--- /dev/null
+++ b/docs/Models/Operations/GetPlaylistResponseBody.md
@@ -0,0 +1,10 @@
+# GetPlaylistResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetPlaylistErrors](../../Models/Operations/GetPlaylistErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetPlaylistsErrors.md b/docs/Models/Operations/GetPlaylistsErrors.md
new file mode 100644
index 0000000..f00df56
--- /dev/null
+++ b/docs/Models/Operations/GetPlaylistsErrors.md
@@ -0,0 +1,10 @@
+# GetPlaylistsErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetPlaylistsRequest.md b/docs/Models/Operations/GetPlaylistsRequest.md
new file mode 100644
index 0000000..2f2272c
--- /dev/null
+++ b/docs/Models/Operations/GetPlaylistsRequest.md
@@ -0,0 +1,9 @@
+# GetPlaylistsRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `playlistType` | [?\LukeHagar\Plex_API\Models\Operations\PlaylistType](../../Models/Operations/PlaylistType.md) | :heavy_minus_sign: | limit to a type of playlist. |
+| `smart` | [?\LukeHagar\Plex_API\Models\Operations\QueryParamSmart](../../Models/Operations/QueryParamSmart.md) | :heavy_minus_sign: | type of playlists to return (default is all). |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetPlaylistsResponse.md b/docs/Models/Operations/GetPlaylistsResponse.md
new file mode 100644
index 0000000..0303b82
--- /dev/null
+++ b/docs/Models/Operations/GetPlaylistsResponse.md
@@ -0,0 +1,11 @@
+# GetPlaylistsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\GetPlaylistsResponseBody](../../Models/Operations/GetPlaylistsResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetPlaylistsResponseBody.md b/docs/Models/Operations/GetPlaylistsResponseBody.md
new file mode 100644
index 0000000..af693c4
--- /dev/null
+++ b/docs/Models/Operations/GetPlaylistsResponseBody.md
@@ -0,0 +1,10 @@
+# GetPlaylistsResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetPlaylistsErrors](../../Models/Operations/GetPlaylistsErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetRecentlyAddedErrors.md b/docs/Models/Operations/GetRecentlyAddedErrors.md
new file mode 100644
index 0000000..604ae43
--- /dev/null
+++ b/docs/Models/Operations/GetRecentlyAddedErrors.md
@@ -0,0 +1,10 @@
+# GetRecentlyAddedErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetRecentlyAddedLibraryResponseBody.md b/docs/Models/Operations/GetRecentlyAddedLibraryResponseBody.md
new file mode 100644
index 0000000..b7fd116
--- /dev/null
+++ b/docs/Models/Operations/GetRecentlyAddedLibraryResponseBody.md
@@ -0,0 +1,10 @@
+# GetRecentlyAddedLibraryResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetRecentlyAddedErrors](../../Models/Operations/GetRecentlyAddedErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetRecentlyAddedMediaContainer.md b/docs/Models/Operations/GetRecentlyAddedMediaContainer.md
new file mode 100644
index 0000000..575634c
--- /dev/null
+++ b/docs/Models/Operations/GetRecentlyAddedMediaContainer.md
@@ -0,0 +1,14 @@
+# GetRecentlyAddedMediaContainer
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `size` | *?float* | :heavy_minus_sign: | N/A | 50 |
+| `allowSync` | *?bool* | :heavy_minus_sign: | N/A | |
+| `identifier` | *?string* | :heavy_minus_sign: | N/A | com.plexapp.plugins.library |
+| `mediaTagPrefix` | *?string* | :heavy_minus_sign: | N/A | /system/bundle/media/flags/ |
+| `mediaTagVersion` | *?float* | :heavy_minus_sign: | N/A | 1680021154 |
+| `mixedParents` | *?bool* | :heavy_minus_sign: | N/A | |
+| `metadata` | array<[\LukeHagar\Plex_API\Models\Operations\Metadata](../../Models/Operations/Metadata.md)> | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetRecentlyAddedResponse.md b/docs/Models/Operations/GetRecentlyAddedResponse.md
new file mode 100644
index 0000000..1a33446
--- /dev/null
+++ b/docs/Models/Operations/GetRecentlyAddedResponse.md
@@ -0,0 +1,12 @@
+# GetRecentlyAddedResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `twoHundredApplicationJsonObject` | [?\LukeHagar\Plex_API\Models\Operations\GetRecentlyAddedResponseBody](../../Models/Operations/GetRecentlyAddedResponseBody.md) | :heavy_minus_sign: | The recently added content |
+| `fourHundredAndOneApplicationJsonObject` | [?\LukeHagar\Plex_API\Models\Operations\GetRecentlyAddedLibraryResponseBody](../../Models/Operations/GetRecentlyAddedLibraryResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetRecentlyAddedResponseBody.md b/docs/Models/Operations/GetRecentlyAddedResponseBody.md
new file mode 100644
index 0000000..86309a9
--- /dev/null
+++ b/docs/Models/Operations/GetRecentlyAddedResponseBody.md
@@ -0,0 +1,10 @@
+# GetRecentlyAddedResponseBody
+
+The recently added content
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
+| `mediaContainer` | [?\LukeHagar\Plex_API\Models\Operations\GetRecentlyAddedMediaContainer](../../Models/Operations/GetRecentlyAddedMediaContainer.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetResizedPhotoErrors.md b/docs/Models/Operations/GetResizedPhotoErrors.md
new file mode 100644
index 0000000..c10d023
--- /dev/null
+++ b/docs/Models/Operations/GetResizedPhotoErrors.md
@@ -0,0 +1,10 @@
+# GetResizedPhotoErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetResizedPhotoRequest.md b/docs/Models/Operations/GetResizedPhotoRequest.md
new file mode 100644
index 0000000..b2be1a3
--- /dev/null
+++ b/docs/Models/Operations/GetResizedPhotoRequest.md
@@ -0,0 +1,14 @@
+# GetResizedPhotoRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| `width` | *float* | :heavy_check_mark: | The width for the resized photo | 110 |
+| `height` | *float* | :heavy_check_mark: | The height for the resized photo | 165 |
+| `opacity` | *int* | :heavy_check_mark: | The opacity for the resized photo | |
+| `blur` | *float* | :heavy_check_mark: | The width for the resized photo | 0 |
+| `minSize` | [\LukeHagar\Plex_API\Models\Operations\MinSize](../../Models/Operations/MinSize.md) | :heavy_check_mark: | images are always scaled proportionally. A value of '1' in minSize will make the smaller native dimension the dimension resized against. | |
+| `upscale` | [\LukeHagar\Plex_API\Models\Operations\Upscale](../../Models/Operations/Upscale.md) | :heavy_check_mark: | allow images to be resized beyond native dimensions. | |
+| `url` | *string* | :heavy_check_mark: | path to image within Plex | /library/metadata/49564/thumb/1654258204 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetResizedPhotoResponse.md b/docs/Models/Operations/GetResizedPhotoResponse.md
new file mode 100644
index 0000000..cd54692
--- /dev/null
+++ b/docs/Models/Operations/GetResizedPhotoResponse.md
@@ -0,0 +1,11 @@
+# GetResizedPhotoResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\GetResizedPhotoResponseBody](../../Models/Operations/GetResizedPhotoResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetResizedPhotoResponseBody.md b/docs/Models/Operations/GetResizedPhotoResponseBody.md
new file mode 100644
index 0000000..26905ab
--- /dev/null
+++ b/docs/Models/Operations/GetResizedPhotoResponseBody.md
@@ -0,0 +1,10 @@
+# GetResizedPhotoResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetResizedPhotoErrors](../../Models/Operations/GetResizedPhotoErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetSearchResultsCountry.md b/docs/Models/Operations/GetSearchResultsCountry.md
new file mode 100644
index 0000000..8026c20
--- /dev/null
+++ b/docs/Models/Operations/GetSearchResultsCountry.md
@@ -0,0 +1,8 @@
+# GetSearchResultsCountry
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------ | ------------------------ | ------------------------ | ------------------------ | ------------------------ |
+| `tag` | *?string* | :heavy_minus_sign: | N/A | United States of America |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetSearchResultsDirector.md b/docs/Models/Operations/GetSearchResultsDirector.md
new file mode 100644
index 0000000..3a2e112
--- /dev/null
+++ b/docs/Models/Operations/GetSearchResultsDirector.md
@@ -0,0 +1,8 @@
+# GetSearchResultsDirector
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `tag` | *?string* | :heavy_minus_sign: | N/A | Brian De Palma |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetSearchResultsErrors.md b/docs/Models/Operations/GetSearchResultsErrors.md
new file mode 100644
index 0000000..760ecff
--- /dev/null
+++ b/docs/Models/Operations/GetSearchResultsErrors.md
@@ -0,0 +1,10 @@
+# GetSearchResultsErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetSearchResultsGenre.md b/docs/Models/Operations/GetSearchResultsGenre.md
new file mode 100644
index 0000000..24973d9
--- /dev/null
+++ b/docs/Models/Operations/GetSearchResultsGenre.md
@@ -0,0 +1,8 @@
+# GetSearchResultsGenre
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `tag` | *?string* | :heavy_minus_sign: | N/A | Action |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetSearchResultsMedia.md b/docs/Models/Operations/GetSearchResultsMedia.md
new file mode 100644
index 0000000..de25a22
--- /dev/null
+++ b/docs/Models/Operations/GetSearchResultsMedia.md
@@ -0,0 +1,22 @@
+# GetSearchResultsMedia
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
+| `id` | *?float* | :heavy_minus_sign: | N/A | 26610 |
+| `duration` | *?float* | :heavy_minus_sign: | N/A | 6612628 |
+| `bitrate` | *?float* | :heavy_minus_sign: | N/A | 4751 |
+| `width` | *?float* | :heavy_minus_sign: | N/A | 1916 |
+| `height` | *?float* | :heavy_minus_sign: | N/A | 796 |
+| `aspectRatio` | *?float* | :heavy_minus_sign: | N/A | 2.35 |
+| `audioChannels` | *?float* | :heavy_minus_sign: | N/A | 6 |
+| `audioCodec` | *?string* | :heavy_minus_sign: | N/A | aac |
+| `videoCodec` | *?string* | :heavy_minus_sign: | N/A | hevc |
+| `videoResolution` | *?float* | :heavy_minus_sign: | N/A | 1080 |
+| `container` | *?string* | :heavy_minus_sign: | N/A | mkv |
+| `videoFrameRate` | *?string* | :heavy_minus_sign: | N/A | 24p |
+| `audioProfile` | *?string* | :heavy_minus_sign: | N/A | lc |
+| `videoProfile` | *?string* | :heavy_minus_sign: | N/A | main 10 |
+| `part` | array<[\LukeHagar\Plex_API\Models\Operations\GetSearchResultsPart](../../Models/Operations/GetSearchResultsPart.md)> | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetSearchResultsMediaContainer.md b/docs/Models/Operations/GetSearchResultsMediaContainer.md
new file mode 100644
index 0000000..d4d7975
--- /dev/null
+++ b/docs/Models/Operations/GetSearchResultsMediaContainer.md
@@ -0,0 +1,13 @@
+# GetSearchResultsMediaContainer
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
+| `size` | *?float* | :heavy_minus_sign: | N/A | 26 |
+| `identifier` | *?string* | :heavy_minus_sign: | N/A | com.plexapp.plugins.library |
+| `mediaTagPrefix` | *?string* | :heavy_minus_sign: | N/A | /system/bundle/media/flags/ |
+| `mediaTagVersion` | *?float* | :heavy_minus_sign: | N/A | 1680021154 |
+| `metadata` | array<[\LukeHagar\Plex_API\Models\Operations\GetSearchResultsMetadata](../../Models/Operations/GetSearchResultsMetadata.md)> | :heavy_minus_sign: | N/A | |
+| `provider` | array<[\LukeHagar\Plex_API\Models\Operations\Provider](../../Models/Operations/Provider.md)> | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetSearchResultsMetadata.md b/docs/Models/Operations/GetSearchResultsMetadata.md
new file mode 100644
index 0000000..8226644
--- /dev/null
+++ b/docs/Models/Operations/GetSearchResultsMetadata.md
@@ -0,0 +1,41 @@
+# GetSearchResultsMetadata
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `allowSync` | *?bool* | :heavy_minus_sign: | N/A | |
+| `librarySectionID` | *?float* | :heavy_minus_sign: | N/A | 1 |
+| `librarySectionTitle` | *?string* | :heavy_minus_sign: | N/A | Movies |
+| `librarySectionUUID` | *?string* | :heavy_minus_sign: | N/A | 322a231a-b7f7-49f5-920f-14c61199cd30 |
+| `personal` | *?bool* | :heavy_minus_sign: | N/A | |
+| `sourceTitle` | *?string* | :heavy_minus_sign: | N/A | Hera |
+| `ratingKey` | *?float* | :heavy_minus_sign: | N/A | 10398 |
+| `key` | *?string* | :heavy_minus_sign: | N/A | /library/metadata/10398 |
+| `guid` | *?string* | :heavy_minus_sign: | N/A | plex://movie/5d7768284de0ee001fcc8f52 |
+| `studio` | *?string* | :heavy_minus_sign: | N/A | Paramount |
+| `type` | *?string* | :heavy_minus_sign: | N/A | movie |
+| `title` | *?string* | :heavy_minus_sign: | N/A | Mission: Impossible |
+| `contentRating` | *?string* | :heavy_minus_sign: | N/A | PG-13 |
+| `summary` | *?string* | :heavy_minus_sign: | N/A | When Ethan Hunt the leader of a crack espionage team whose perilous operation has gone awry with no explanation discovers that a mole has penetrated the CIA he's surprised to learn that he's the No. 1 suspect. To clear his name Hunt now must ferret out the real double agent and in the process even the score. |
+| `rating` | *?float* | :heavy_minus_sign: | N/A | 6.6 |
+| `audienceRating` | *?float* | :heavy_minus_sign: | N/A | 7.1 |
+| `year` | *?float* | :heavy_minus_sign: | N/A | 1996 |
+| `tagline` | *?string* | :heavy_minus_sign: | N/A | Expect the impossible. |
+| `thumb` | *?string* | :heavy_minus_sign: | N/A | /library/metadata/10398/thumb/1679505055 |
+| `art` | *?string* | :heavy_minus_sign: | N/A | /library/metadata/10398/art/1679505055 |
+| `duration` | *?float* | :heavy_minus_sign: | N/A | 6612628 |
+| `originallyAvailableAt` | [\DateTime](https://www.php.net/manual/en/class.datetime.php) | :heavy_minus_sign: | N/A | 1996-05-22 00:00:00 +0000 UTC |
+| `addedAt` | *?float* | :heavy_minus_sign: | N/A | 1589234571 |
+| `updatedAt` | *?float* | :heavy_minus_sign: | N/A | 1679505055 |
+| `audienceRatingImage` | *?string* | :heavy_minus_sign: | N/A | rottentomatoes://image.rating.upright |
+| `chapterSource` | *?string* | :heavy_minus_sign: | N/A | media |
+| `primaryExtraKey` | *?string* | :heavy_minus_sign: | N/A | /library/metadata/10501 |
+| `ratingImage` | *?string* | :heavy_minus_sign: | N/A | rottentomatoes://image.rating.ripe |
+| `media` | array<[\LukeHagar\Plex_API\Models\Operations\GetSearchResultsMedia](../../Models/Operations/GetSearchResultsMedia.md)> | :heavy_minus_sign: | N/A | |
+| `genre` | array<[\LukeHagar\Plex_API\Models\Operations\GetSearchResultsGenre](../../Models/Operations/GetSearchResultsGenre.md)> | :heavy_minus_sign: | N/A | |
+| `director` | array<[\LukeHagar\Plex_API\Models\Operations\GetSearchResultsDirector](../../Models/Operations/GetSearchResultsDirector.md)> | :heavy_minus_sign: | N/A | |
+| `writer` | array<[\LukeHagar\Plex_API\Models\Operations\GetSearchResultsWriter](../../Models/Operations/GetSearchResultsWriter.md)> | :heavy_minus_sign: | N/A | |
+| `country` | array<[\LukeHagar\Plex_API\Models\Operations\GetSearchResultsCountry](../../Models/Operations/GetSearchResultsCountry.md)> | :heavy_minus_sign: | N/A | |
+| `role` | array<[\LukeHagar\Plex_API\Models\Operations\GetSearchResultsRole](../../Models/Operations/GetSearchResultsRole.md)> | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetSearchResultsPart.md b/docs/Models/Operations/GetSearchResultsPart.md
new file mode 100644
index 0000000..17f826e
--- /dev/null
+++ b/docs/Models/Operations/GetSearchResultsPart.md
@@ -0,0 +1,15 @@
+# GetSearchResultsPart
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
+| `id` | *?float* | :heavy_minus_sign: | N/A | 26610 |
+| `key` | *?string* | :heavy_minus_sign: | N/A | /library/parts/26610/1589234571/file.mkv |
+| `duration` | *?float* | :heavy_minus_sign: | N/A | 6612628 |
+| `file` | *?string* | :heavy_minus_sign: | N/A | /movies/Mission Impossible (1996)/Mission Impossible (1996) Bluray-1080p.mkv |
+| `size` | *?float* | :heavy_minus_sign: | N/A | 3926903851 |
+| `audioProfile` | *?string* | :heavy_minus_sign: | N/A | lc |
+| `container` | *?string* | :heavy_minus_sign: | N/A | mkv |
+| `videoProfile` | *?string* | :heavy_minus_sign: | N/A | main 10 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetSearchResultsRequest.md b/docs/Models/Operations/GetSearchResultsRequest.md
new file mode 100644
index 0000000..72579d9
--- /dev/null
+++ b/docs/Models/Operations/GetSearchResultsRequest.md
@@ -0,0 +1,8 @@
+# GetSearchResultsRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ |
+| `query` | *string* | :heavy_check_mark: | The search query string to use | 110 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetSearchResultsResponse.md b/docs/Models/Operations/GetSearchResultsResponse.md
new file mode 100644
index 0000000..5d4446b
--- /dev/null
+++ b/docs/Models/Operations/GetSearchResultsResponse.md
@@ -0,0 +1,12 @@
+# GetSearchResultsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `twoHundredApplicationJsonObject` | [?\LukeHagar\Plex_API\Models\Operations\GetSearchResultsResponseBody](../../Models/Operations/GetSearchResultsResponseBody.md) | :heavy_minus_sign: | Search Results |
+| `fourHundredAndOneApplicationJsonObject` | [?\LukeHagar\Plex_API\Models\Operations\GetSearchResultsSearchResponseBody](../../Models/Operations/GetSearchResultsSearchResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetSearchResultsResponseBody.md b/docs/Models/Operations/GetSearchResultsResponseBody.md
new file mode 100644
index 0000000..5e53fc0
--- /dev/null
+++ b/docs/Models/Operations/GetSearchResultsResponseBody.md
@@ -0,0 +1,10 @@
+# GetSearchResultsResponseBody
+
+Search Results
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
+| `mediaContainer` | [?\LukeHagar\Plex_API\Models\Operations\GetSearchResultsMediaContainer](../../Models/Operations/GetSearchResultsMediaContainer.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetSearchResultsRole.md b/docs/Models/Operations/GetSearchResultsRole.md
new file mode 100644
index 0000000..d789245
--- /dev/null
+++ b/docs/Models/Operations/GetSearchResultsRole.md
@@ -0,0 +1,8 @@
+# GetSearchResultsRole
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `tag` | *?string* | :heavy_minus_sign: | N/A | Tom Cruise |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetSearchResultsSearchResponseBody.md b/docs/Models/Operations/GetSearchResultsSearchResponseBody.md
new file mode 100644
index 0000000..318fe84
--- /dev/null
+++ b/docs/Models/Operations/GetSearchResultsSearchResponseBody.md
@@ -0,0 +1,10 @@
+# GetSearchResultsSearchResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetSearchResultsErrors](../../Models/Operations/GetSearchResultsErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetSearchResultsWriter.md b/docs/Models/Operations/GetSearchResultsWriter.md
new file mode 100644
index 0000000..18f3670
--- /dev/null
+++ b/docs/Models/Operations/GetSearchResultsWriter.md
@@ -0,0 +1,8 @@
+# GetSearchResultsWriter
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `tag` | *?string* | :heavy_minus_sign: | N/A | David Koepp |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetServerActivitiesActivitiesResponseBody.md b/docs/Models/Operations/GetServerActivitiesActivitiesResponseBody.md
new file mode 100644
index 0000000..ffbe690
--- /dev/null
+++ b/docs/Models/Operations/GetServerActivitiesActivitiesResponseBody.md
@@ -0,0 +1,10 @@
+# GetServerActivitiesActivitiesResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetServerActivitiesErrors](../../Models/Operations/GetServerActivitiesErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetServerActivitiesErrors.md b/docs/Models/Operations/GetServerActivitiesErrors.md
new file mode 100644
index 0000000..b1ce3d1
--- /dev/null
+++ b/docs/Models/Operations/GetServerActivitiesErrors.md
@@ -0,0 +1,10 @@
+# GetServerActivitiesErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetServerActivitiesMediaContainer.md b/docs/Models/Operations/GetServerActivitiesMediaContainer.md
new file mode 100644
index 0000000..29fe7ac
--- /dev/null
+++ b/docs/Models/Operations/GetServerActivitiesMediaContainer.md
@@ -0,0 +1,9 @@
+# GetServerActivitiesMediaContainer
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `size` | *?float* | :heavy_minus_sign: | N/A |
+| `activity` | array<[\LukeHagar\Plex_API\Models\Operations\Activity](../../Models/Operations/Activity.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetServerActivitiesResponse.md b/docs/Models/Operations/GetServerActivitiesResponse.md
new file mode 100644
index 0000000..6b8d95c
--- /dev/null
+++ b/docs/Models/Operations/GetServerActivitiesResponse.md
@@ -0,0 +1,12 @@
+# GetServerActivitiesResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `twoHundredApplicationJsonObject` | [?\LukeHagar\Plex_API\Models\Operations\GetServerActivitiesResponseBody](../../Models/Operations/GetServerActivitiesResponseBody.md) | :heavy_minus_sign: | The Server Activities |
+| `fourHundredAndOneApplicationJsonObject` | [?\LukeHagar\Plex_API\Models\Operations\GetServerActivitiesActivitiesResponseBody](../../Models/Operations/GetServerActivitiesActivitiesResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetServerActivitiesResponseBody.md b/docs/Models/Operations/GetServerActivitiesResponseBody.md
new file mode 100644
index 0000000..a1f421d
--- /dev/null
+++ b/docs/Models/Operations/GetServerActivitiesResponseBody.md
@@ -0,0 +1,10 @@
+# GetServerActivitiesResponseBody
+
+The Server Activities
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| `mediaContainer` | [?\LukeHagar\Plex_API\Models\Operations\GetServerActivitiesMediaContainer](../../Models/Operations/GetServerActivitiesMediaContainer.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetServerCapabilitiesResponse.md b/docs/Models/Operations/GetServerCapabilitiesResponse.md
new file mode 100644
index 0000000..ce5a6e5
--- /dev/null
+++ b/docs/Models/Operations/GetServerCapabilitiesResponse.md
@@ -0,0 +1,12 @@
+# GetServerCapabilitiesResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `twoHundredApplicationJsonObject` | [?\LukeHagar\Plex_API\Models\Operations\GetServerCapabilitiesResponseBody](../../Models/Operations/GetServerCapabilitiesResponseBody.md) | :heavy_minus_sign: | The Server Capabilities |
+| `fourHundredAndOneApplicationJsonObject` | [?\LukeHagar\Plex_API\Models\Operations\GetServerCapabilitiesServerResponseBody](../../Models/Operations/GetServerCapabilitiesServerResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetServerCapabilitiesResponseBody.md b/docs/Models/Operations/GetServerCapabilitiesResponseBody.md
new file mode 100644
index 0000000..602cd73
--- /dev/null
+++ b/docs/Models/Operations/GetServerCapabilitiesResponseBody.md
@@ -0,0 +1,10 @@
+# GetServerCapabilitiesResponseBody
+
+The Server Capabilities
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `mediaContainer` | [?\LukeHagar\Plex_API\Models\Operations\MediaContainer](../../Models/Operations/MediaContainer.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetServerCapabilitiesServerResponseBody.md b/docs/Models/Operations/GetServerCapabilitiesServerResponseBody.md
new file mode 100644
index 0000000..b049215
--- /dev/null
+++ b/docs/Models/Operations/GetServerCapabilitiesServerResponseBody.md
@@ -0,0 +1,10 @@
+# GetServerCapabilitiesServerResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\Errors](../../Models/Operations/Errors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetServerIdentityErrors.md b/docs/Models/Operations/GetServerIdentityErrors.md
new file mode 100644
index 0000000..4d5b635
--- /dev/null
+++ b/docs/Models/Operations/GetServerIdentityErrors.md
@@ -0,0 +1,10 @@
+# GetServerIdentityErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetServerIdentityMediaContainer.md b/docs/Models/Operations/GetServerIdentityMediaContainer.md
new file mode 100644
index 0000000..fdcc720
--- /dev/null
+++ b/docs/Models/Operations/GetServerIdentityMediaContainer.md
@@ -0,0 +1,11 @@
+# GetServerIdentityMediaContainer
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- |
+| `size` | *?float* | :heavy_minus_sign: | N/A | 0 |
+| `claimed` | *?bool* | :heavy_minus_sign: | N/A | |
+| `machineIdentifier` | *?string* | :heavy_minus_sign: | N/A | 96f2fe7a78c9dc1f16a16bedbe90f98149be16b4 |
+| `version` | *?string* | :heavy_minus_sign: | N/A | 1.31.3.6868-28fc46b27 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetServerIdentityResponse.md b/docs/Models/Operations/GetServerIdentityResponse.md
new file mode 100644
index 0000000..b7cb498
--- /dev/null
+++ b/docs/Models/Operations/GetServerIdentityResponse.md
@@ -0,0 +1,12 @@
+# GetServerIdentityResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `twoHundredApplicationJsonObject` | [?\LukeHagar\Plex_API\Models\Operations\GetServerIdentityResponseBody](../../Models/Operations/GetServerIdentityResponseBody.md) | :heavy_minus_sign: | The Transcode Sessions |
+| `fourHundredAndOneApplicationJsonObject` | [?\LukeHagar\Plex_API\Models\Operations\GetServerIdentityServerResponseBody](../../Models/Operations/GetServerIdentityServerResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetServerIdentityResponseBody.md b/docs/Models/Operations/GetServerIdentityResponseBody.md
new file mode 100644
index 0000000..412072f
--- /dev/null
+++ b/docs/Models/Operations/GetServerIdentityResponseBody.md
@@ -0,0 +1,10 @@
+# GetServerIdentityResponseBody
+
+The Transcode Sessions
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ |
+| `mediaContainer` | [?\LukeHagar\Plex_API\Models\Operations\GetServerIdentityMediaContainer](../../Models/Operations/GetServerIdentityMediaContainer.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetServerIdentityServerResponseBody.md b/docs/Models/Operations/GetServerIdentityServerResponseBody.md
new file mode 100644
index 0000000..25f3f13
--- /dev/null
+++ b/docs/Models/Operations/GetServerIdentityServerResponseBody.md
@@ -0,0 +1,10 @@
+# GetServerIdentityServerResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetServerIdentityErrors](../../Models/Operations/GetServerIdentityErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetServerListErrors.md b/docs/Models/Operations/GetServerListErrors.md
new file mode 100644
index 0000000..d1890a8
--- /dev/null
+++ b/docs/Models/Operations/GetServerListErrors.md
@@ -0,0 +1,10 @@
+# GetServerListErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetServerListMediaContainer.md b/docs/Models/Operations/GetServerListMediaContainer.md
new file mode 100644
index 0000000..6fd2021
--- /dev/null
+++ b/docs/Models/Operations/GetServerListMediaContainer.md
@@ -0,0 +1,9 @@
+# GetServerListMediaContainer
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ |
+| `size` | *?float* | :heavy_minus_sign: | N/A | 1 |
+| `server` | array<[\LukeHagar\Plex_API\Models\Operations\GetServerListServer](../../Models/Operations/GetServerListServer.md)> | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetServerListResponse.md b/docs/Models/Operations/GetServerListResponse.md
new file mode 100644
index 0000000..b4e5ba4
--- /dev/null
+++ b/docs/Models/Operations/GetServerListResponse.md
@@ -0,0 +1,12 @@
+# GetServerListResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `twoHundredApplicationJsonObject` | [?\LukeHagar\Plex_API\Models\Operations\GetServerListResponseBody](../../Models/Operations/GetServerListResponseBody.md) | :heavy_minus_sign: | List of Servers |
+| `fourHundredAndOneApplicationJsonObject` | [?\LukeHagar\Plex_API\Models\Operations\GetServerListServerResponseBody](../../Models/Operations/GetServerListServerResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetServerListResponseBody.md b/docs/Models/Operations/GetServerListResponseBody.md
new file mode 100644
index 0000000..8969ec8
--- /dev/null
+++ b/docs/Models/Operations/GetServerListResponseBody.md
@@ -0,0 +1,10 @@
+# GetServerListResponseBody
+
+List of Servers
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
+| `mediaContainer` | [?\LukeHagar\Plex_API\Models\Operations\GetServerListMediaContainer](../../Models/Operations/GetServerListMediaContainer.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetServerListServer.md b/docs/Models/Operations/GetServerListServer.md
new file mode 100644
index 0000000..8628eb4
--- /dev/null
+++ b/docs/Models/Operations/GetServerListServer.md
@@ -0,0 +1,13 @@
+# GetServerListServer
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- |
+| `name` | *?string* | :heavy_minus_sign: | N/A | Hera |
+| `host` | *?string* | :heavy_minus_sign: | N/A | 10.10.10.47 |
+| `address` | *?string* | :heavy_minus_sign: | N/A | 10.10.10.47 |
+| `port` | *?float* | :heavy_minus_sign: | N/A | 32400 |
+| `machineIdentifier` | *?string* | :heavy_minus_sign: | N/A | 96f2fe7a78c9dc1f16a16bedbe90f98149be16b4 |
+| `version` | *?string* | :heavy_minus_sign: | N/A | 1.31.3.6868-28fc46b27 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetServerListServerResponseBody.md b/docs/Models/Operations/GetServerListServerResponseBody.md
new file mode 100644
index 0000000..03f75c9
--- /dev/null
+++ b/docs/Models/Operations/GetServerListServerResponseBody.md
@@ -0,0 +1,10 @@
+# GetServerListServerResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetServerListErrors](../../Models/Operations/GetServerListErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetServerPreferencesErrors.md b/docs/Models/Operations/GetServerPreferencesErrors.md
new file mode 100644
index 0000000..ecc7049
--- /dev/null
+++ b/docs/Models/Operations/GetServerPreferencesErrors.md
@@ -0,0 +1,10 @@
+# GetServerPreferencesErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetServerPreferencesResponse.md b/docs/Models/Operations/GetServerPreferencesResponse.md
new file mode 100644
index 0000000..60de77c
--- /dev/null
+++ b/docs/Models/Operations/GetServerPreferencesResponse.md
@@ -0,0 +1,11 @@
+# GetServerPreferencesResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\GetServerPreferencesResponseBody](../../Models/Operations/GetServerPreferencesResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetServerPreferencesResponseBody.md b/docs/Models/Operations/GetServerPreferencesResponseBody.md
new file mode 100644
index 0000000..059682c
--- /dev/null
+++ b/docs/Models/Operations/GetServerPreferencesResponseBody.md
@@ -0,0 +1,10 @@
+# GetServerPreferencesResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetServerPreferencesErrors](../../Models/Operations/GetServerPreferencesErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetSessionHistoryErrors.md b/docs/Models/Operations/GetSessionHistoryErrors.md
new file mode 100644
index 0000000..290229f
--- /dev/null
+++ b/docs/Models/Operations/GetSessionHistoryErrors.md
@@ -0,0 +1,10 @@
+# GetSessionHistoryErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetSessionHistoryResponse.md b/docs/Models/Operations/GetSessionHistoryResponse.md
new file mode 100644
index 0000000..29ab0f2
--- /dev/null
+++ b/docs/Models/Operations/GetSessionHistoryResponse.md
@@ -0,0 +1,11 @@
+# GetSessionHistoryResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\GetSessionHistoryResponseBody](../../Models/Operations/GetSessionHistoryResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetSessionHistoryResponseBody.md b/docs/Models/Operations/GetSessionHistoryResponseBody.md
new file mode 100644
index 0000000..afe4103
--- /dev/null
+++ b/docs/Models/Operations/GetSessionHistoryResponseBody.md
@@ -0,0 +1,10 @@
+# GetSessionHistoryResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetSessionHistoryErrors](../../Models/Operations/GetSessionHistoryErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetSessionsErrors.md b/docs/Models/Operations/GetSessionsErrors.md
new file mode 100644
index 0000000..243719c
--- /dev/null
+++ b/docs/Models/Operations/GetSessionsErrors.md
@@ -0,0 +1,10 @@
+# GetSessionsErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetSessionsResponse.md b/docs/Models/Operations/GetSessionsResponse.md
new file mode 100644
index 0000000..d9308c6
--- /dev/null
+++ b/docs/Models/Operations/GetSessionsResponse.md
@@ -0,0 +1,11 @@
+# GetSessionsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\GetSessionsResponseBody](../../Models/Operations/GetSessionsResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetSessionsResponseBody.md b/docs/Models/Operations/GetSessionsResponseBody.md
new file mode 100644
index 0000000..cd259f2
--- /dev/null
+++ b/docs/Models/Operations/GetSessionsResponseBody.md
@@ -0,0 +1,10 @@
+# GetSessionsResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetSessionsErrors](../../Models/Operations/GetSessionsErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetSourceConnectionInformationErrors.md b/docs/Models/Operations/GetSourceConnectionInformationErrors.md
new file mode 100644
index 0000000..6aade96
--- /dev/null
+++ b/docs/Models/Operations/GetSourceConnectionInformationErrors.md
@@ -0,0 +1,10 @@
+# GetSourceConnectionInformationErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetSourceConnectionInformationRequest.md b/docs/Models/Operations/GetSourceConnectionInformationRequest.md
new file mode 100644
index 0000000..64fdbc4
--- /dev/null
+++ b/docs/Models/Operations/GetSourceConnectionInformationRequest.md
@@ -0,0 +1,8 @@
+# GetSourceConnectionInformationRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- |
+| `source` | *string* | :heavy_check_mark: | The source identifier with an included prefix. | server://client-identifier |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetSourceConnectionInformationResponse.md b/docs/Models/Operations/GetSourceConnectionInformationResponse.md
new file mode 100644
index 0000000..d0c81b3
--- /dev/null
+++ b/docs/Models/Operations/GetSourceConnectionInformationResponse.md
@@ -0,0 +1,11 @@
+# GetSourceConnectionInformationResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\GetSourceConnectionInformationResponseBody](../../Models/Operations/GetSourceConnectionInformationResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetSourceConnectionInformationResponseBody.md b/docs/Models/Operations/GetSourceConnectionInformationResponseBody.md
new file mode 100644
index 0000000..abe183b
--- /dev/null
+++ b/docs/Models/Operations/GetSourceConnectionInformationResponseBody.md
@@ -0,0 +1,10 @@
+# GetSourceConnectionInformationResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetSourceConnectionInformationErrors](../../Models/Operations/GetSourceConnectionInformationErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetTimelineErrors.md b/docs/Models/Operations/GetTimelineErrors.md
new file mode 100644
index 0000000..553581f
--- /dev/null
+++ b/docs/Models/Operations/GetTimelineErrors.md
@@ -0,0 +1,10 @@
+# GetTimelineErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetTimelineRequest.md b/docs/Models/Operations/GetTimelineRequest.md
new file mode 100644
index 0000000..10dfc76
--- /dev/null
+++ b/docs/Models/Operations/GetTimelineRequest.md
@@ -0,0 +1,17 @@
+# GetTimelineRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
+| `ratingKey` | *float* | :heavy_check_mark: | The rating key of the media item |
+| `key` | *string* | :heavy_check_mark: | The key of the media item to get the timeline for |
+| `state` | [\LukeHagar\Plex_API\Models\Operations\State](../../Models/Operations/State.md) | :heavy_check_mark: | The state of the media item |
+| `hasMDE` | *float* | :heavy_check_mark: | Whether the media item has MDE |
+| `time` | *float* | :heavy_check_mark: | The time of the media item |
+| `duration` | *float* | :heavy_check_mark: | The duration of the media item |
+| `context` | *string* | :heavy_check_mark: | The context of the media item |
+| `playQueueItemID` | *float* | :heavy_check_mark: | The play queue item ID of the media item |
+| `playBackTime` | *float* | :heavy_check_mark: | The playback time of the media item |
+| `row` | *float* | :heavy_check_mark: | The row of the media item |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetTimelineResponse.md b/docs/Models/Operations/GetTimelineResponse.md
new file mode 100644
index 0000000..71e7530
--- /dev/null
+++ b/docs/Models/Operations/GetTimelineResponse.md
@@ -0,0 +1,11 @@
+# GetTimelineResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\GetTimelineResponseBody](../../Models/Operations/GetTimelineResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetTimelineResponseBody.md b/docs/Models/Operations/GetTimelineResponseBody.md
new file mode 100644
index 0000000..6200fa4
--- /dev/null
+++ b/docs/Models/Operations/GetTimelineResponseBody.md
@@ -0,0 +1,10 @@
+# GetTimelineResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetTimelineErrors](../../Models/Operations/GetTimelineErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetTranscodeSessionsErrors.md b/docs/Models/Operations/GetTranscodeSessionsErrors.md
new file mode 100644
index 0000000..1c4b93e
--- /dev/null
+++ b/docs/Models/Operations/GetTranscodeSessionsErrors.md
@@ -0,0 +1,10 @@
+# GetTranscodeSessionsErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetTranscodeSessionsMediaContainer.md b/docs/Models/Operations/GetTranscodeSessionsMediaContainer.md
new file mode 100644
index 0000000..955f6df
--- /dev/null
+++ b/docs/Models/Operations/GetTranscodeSessionsMediaContainer.md
@@ -0,0 +1,9 @@
+# GetTranscodeSessionsMediaContainer
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
+| `size` | *?float* | :heavy_minus_sign: | N/A | 1 |
+| `transcodeSession` | array<[\LukeHagar\Plex_API\Models\Operations\TranscodeSession](../../Models/Operations/TranscodeSession.md)> | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetTranscodeSessionsResponse.md b/docs/Models/Operations/GetTranscodeSessionsResponse.md
new file mode 100644
index 0000000..64ff216
--- /dev/null
+++ b/docs/Models/Operations/GetTranscodeSessionsResponse.md
@@ -0,0 +1,12 @@
+# GetTranscodeSessionsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `twoHundredApplicationJsonObject` | [?\LukeHagar\Plex_API\Models\Operations\GetTranscodeSessionsResponseBody](../../Models/Operations/GetTranscodeSessionsResponseBody.md) | :heavy_minus_sign: | The Transcode Sessions |
+| `fourHundredAndOneApplicationJsonObject` | [?\LukeHagar\Plex_API\Models\Operations\GetTranscodeSessionsSessionsResponseBody](../../Models/Operations/GetTranscodeSessionsSessionsResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetTranscodeSessionsResponseBody.md b/docs/Models/Operations/GetTranscodeSessionsResponseBody.md
new file mode 100644
index 0000000..c663940
--- /dev/null
+++ b/docs/Models/Operations/GetTranscodeSessionsResponseBody.md
@@ -0,0 +1,10 @@
+# GetTranscodeSessionsResponseBody
+
+The Transcode Sessions
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ |
+| `mediaContainer` | [?\LukeHagar\Plex_API\Models\Operations\GetTranscodeSessionsMediaContainer](../../Models/Operations/GetTranscodeSessionsMediaContainer.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetTranscodeSessionsSessionsResponseBody.md b/docs/Models/Operations/GetTranscodeSessionsSessionsResponseBody.md
new file mode 100644
index 0000000..7cc1c75
--- /dev/null
+++ b/docs/Models/Operations/GetTranscodeSessionsSessionsResponseBody.md
@@ -0,0 +1,10 @@
+# GetTranscodeSessionsSessionsResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetTranscodeSessionsErrors](../../Models/Operations/GetTranscodeSessionsErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetTransientTokenErrors.md b/docs/Models/Operations/GetTransientTokenErrors.md
new file mode 100644
index 0000000..a20352a
--- /dev/null
+++ b/docs/Models/Operations/GetTransientTokenErrors.md
@@ -0,0 +1,10 @@
+# GetTransientTokenErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetTransientTokenRequest.md b/docs/Models/Operations/GetTransientTokenRequest.md
new file mode 100644
index 0000000..dbc60a3
--- /dev/null
+++ b/docs/Models/Operations/GetTransientTokenRequest.md
@@ -0,0 +1,9 @@
+# GetTransientTokenRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
+| `type` | [\LukeHagar\Plex_API\Models\Operations\QueryParamType](../../Models/Operations/QueryParamType.md) | :heavy_check_mark: | `delegation` - This is the only supported `type` parameter. |
+| `scope` | [\LukeHagar\Plex_API\Models\Operations\Scope](../../Models/Operations/Scope.md) | :heavy_check_mark: | `all` - This is the only supported `scope` parameter. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetTransientTokenResponse.md b/docs/Models/Operations/GetTransientTokenResponse.md
new file mode 100644
index 0000000..c22b338
--- /dev/null
+++ b/docs/Models/Operations/GetTransientTokenResponse.md
@@ -0,0 +1,11 @@
+# GetTransientTokenResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\GetTransientTokenResponseBody](../../Models/Operations/GetTransientTokenResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetTransientTokenResponseBody.md b/docs/Models/Operations/GetTransientTokenResponseBody.md
new file mode 100644
index 0000000..99c3a3d
--- /dev/null
+++ b/docs/Models/Operations/GetTransientTokenResponseBody.md
@@ -0,0 +1,10 @@
+# GetTransientTokenResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetTransientTokenErrors](../../Models/Operations/GetTransientTokenErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetUpdateStatusErrors.md b/docs/Models/Operations/GetUpdateStatusErrors.md
new file mode 100644
index 0000000..965b0fd
--- /dev/null
+++ b/docs/Models/Operations/GetUpdateStatusErrors.md
@@ -0,0 +1,10 @@
+# GetUpdateStatusErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetUpdateStatusResponse.md b/docs/Models/Operations/GetUpdateStatusResponse.md
new file mode 100644
index 0000000..226f6d0
--- /dev/null
+++ b/docs/Models/Operations/GetUpdateStatusResponse.md
@@ -0,0 +1,11 @@
+# GetUpdateStatusResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\GetUpdateStatusResponseBody](../../Models/Operations/GetUpdateStatusResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/GetUpdateStatusResponseBody.md b/docs/Models/Operations/GetUpdateStatusResponseBody.md
new file mode 100644
index 0000000..eb17308
--- /dev/null
+++ b/docs/Models/Operations/GetUpdateStatusResponseBody.md
@@ -0,0 +1,10 @@
+# GetUpdateStatusResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\GetUpdateStatusErrors](../../Models/Operations/GetUpdateStatusErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/Guids.md b/docs/Models/Operations/Guids.md
new file mode 100644
index 0000000..fa5e8ff
--- /dev/null
+++ b/docs/Models/Operations/Guids.md
@@ -0,0 +1,8 @@
+# Guids
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `id` | *?string* | :heavy_minus_sign: | N/A | imdb://tt13303712 |
\ No newline at end of file
diff --git a/docs/Models/Operations/IncludeDetails.md b/docs/Models/Operations/IncludeDetails.md
new file mode 100644
index 0000000..7085055
--- /dev/null
+++ b/docs/Models/Operations/IncludeDetails.md
@@ -0,0 +1,13 @@
+# IncludeDetails
+
+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.
+
+
+
+## Values
+
+| Name | Value |
+| ------ | ------ |
+| `Zero` | 0 |
+| `One` | 1 |
\ No newline at end of file
diff --git a/docs/Models/Operations/Level.md b/docs/Models/Operations/Level.md
new file mode 100644
index 0000000..7be3adb
--- /dev/null
+++ b/docs/Models/Operations/Level.md
@@ -0,0 +1,20 @@
+# Level
+
+An integer log level to write to the PMS log with.
+0: Error
+1: Warning
+2: Info
+3: Debug
+4: Verbose
+
+
+
+## Values
+
+| Name | Value |
+| ------- | ------- |
+| `Zero` | 0 |
+| `One` | 1 |
+| `Two` | 2 |
+| `Three` | 3 |
+| `Four` | 4 |
\ No newline at end of file
diff --git a/docs/Models/Operations/LogLineErrors.md b/docs/Models/Operations/LogLineErrors.md
new file mode 100644
index 0000000..ee70e7e
--- /dev/null
+++ b/docs/Models/Operations/LogLineErrors.md
@@ -0,0 +1,10 @@
+# LogLineErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/LogLineRequest.md b/docs/Models/Operations/LogLineRequest.md
new file mode 100644
index 0000000..9acf39c
--- /dev/null
+++ b/docs/Models/Operations/LogLineRequest.md
@@ -0,0 +1,10 @@
+# LogLineRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
+| `level` | [\LukeHagar\Plex_API\Models\Operations\Level](../../Models/Operations/Level.md) | :heavy_check_mark: | An integer log level to write to the PMS log with.
0: Error
1: Warning
2: Info
3: Debug
4: Verbose
| |
+| `message` | *string* | :heavy_check_mark: | The text of the message to write to the log. | |
+| `source` | *string* | :heavy_check_mark: | a string indicating the source of the message. | |
\ No newline at end of file
diff --git a/docs/Models/Operations/LogLineResponse.md b/docs/Models/Operations/LogLineResponse.md
new file mode 100644
index 0000000..b5f3996
--- /dev/null
+++ b/docs/Models/Operations/LogLineResponse.md
@@ -0,0 +1,11 @@
+# LogLineResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\LogLineResponseBody](../../Models/Operations/LogLineResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/LogLineResponseBody.md b/docs/Models/Operations/LogLineResponseBody.md
new file mode 100644
index 0000000..f4454cd
--- /dev/null
+++ b/docs/Models/Operations/LogLineResponseBody.md
@@ -0,0 +1,10 @@
+# LogLineResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\LogLineErrors](../../Models/Operations/LogLineErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/LogMultiLineErrors.md b/docs/Models/Operations/LogMultiLineErrors.md
new file mode 100644
index 0000000..9f9f127
--- /dev/null
+++ b/docs/Models/Operations/LogMultiLineErrors.md
@@ -0,0 +1,10 @@
+# LogMultiLineErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/LogMultiLineResponse.md b/docs/Models/Operations/LogMultiLineResponse.md
new file mode 100644
index 0000000..79e624a
--- /dev/null
+++ b/docs/Models/Operations/LogMultiLineResponse.md
@@ -0,0 +1,11 @@
+# LogMultiLineResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\LogMultiLineResponseBody](../../Models/Operations/LogMultiLineResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/LogMultiLineResponseBody.md b/docs/Models/Operations/LogMultiLineResponseBody.md
new file mode 100644
index 0000000..aee2656
--- /dev/null
+++ b/docs/Models/Operations/LogMultiLineResponseBody.md
@@ -0,0 +1,10 @@
+# LogMultiLineResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\LogMultiLineErrors](../../Models/Operations/LogMultiLineErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/MarkPlayedErrors.md b/docs/Models/Operations/MarkPlayedErrors.md
new file mode 100644
index 0000000..6136735
--- /dev/null
+++ b/docs/Models/Operations/MarkPlayedErrors.md
@@ -0,0 +1,10 @@
+# MarkPlayedErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/MarkPlayedRequest.md b/docs/Models/Operations/MarkPlayedRequest.md
new file mode 100644
index 0000000..20b11eb
--- /dev/null
+++ b/docs/Models/Operations/MarkPlayedRequest.md
@@ -0,0 +1,8 @@
+# MarkPlayedRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `key` | *float* | :heavy_check_mark: | The media key to mark as played | 59398 |
\ No newline at end of file
diff --git a/docs/Models/Operations/MarkPlayedResponse.md b/docs/Models/Operations/MarkPlayedResponse.md
new file mode 100644
index 0000000..f27670d
--- /dev/null
+++ b/docs/Models/Operations/MarkPlayedResponse.md
@@ -0,0 +1,11 @@
+# MarkPlayedResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\MarkPlayedResponseBody](../../Models/Operations/MarkPlayedResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/MarkPlayedResponseBody.md b/docs/Models/Operations/MarkPlayedResponseBody.md
new file mode 100644
index 0000000..5618f3e
--- /dev/null
+++ b/docs/Models/Operations/MarkPlayedResponseBody.md
@@ -0,0 +1,10 @@
+# MarkPlayedResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\MarkPlayedErrors](../../Models/Operations/MarkPlayedErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/MarkUnplayedErrors.md b/docs/Models/Operations/MarkUnplayedErrors.md
new file mode 100644
index 0000000..2598696
--- /dev/null
+++ b/docs/Models/Operations/MarkUnplayedErrors.md
@@ -0,0 +1,10 @@
+# MarkUnplayedErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/MarkUnplayedRequest.md b/docs/Models/Operations/MarkUnplayedRequest.md
new file mode 100644
index 0000000..7711a20
--- /dev/null
+++ b/docs/Models/Operations/MarkUnplayedRequest.md
@@ -0,0 +1,8 @@
+# MarkUnplayedRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- |
+| `key` | *float* | :heavy_check_mark: | The media key to mark as Unplayed | 59398 |
\ No newline at end of file
diff --git a/docs/Models/Operations/MarkUnplayedResponse.md b/docs/Models/Operations/MarkUnplayedResponse.md
new file mode 100644
index 0000000..936706b
--- /dev/null
+++ b/docs/Models/Operations/MarkUnplayedResponse.md
@@ -0,0 +1,11 @@
+# MarkUnplayedResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\MarkUnplayedResponseBody](../../Models/Operations/MarkUnplayedResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/MarkUnplayedResponseBody.md b/docs/Models/Operations/MarkUnplayedResponseBody.md
new file mode 100644
index 0000000..d6e148b
--- /dev/null
+++ b/docs/Models/Operations/MarkUnplayedResponseBody.md
@@ -0,0 +1,10 @@
+# MarkUnplayedResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\MarkUnplayedErrors](../../Models/Operations/MarkUnplayedErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/Media.md b/docs/Models/Operations/Media.md
new file mode 100644
index 0000000..c02acdd
--- /dev/null
+++ b/docs/Models/Operations/Media.md
@@ -0,0 +1,23 @@
+# Media
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `id` | *?float* | :heavy_minus_sign: | N/A | 120345 |
+| `duration` | *?float* | :heavy_minus_sign: | N/A | 7474422 |
+| `bitrate` | *?float* | :heavy_minus_sign: | N/A | 3623 |
+| `width` | *?float* | :heavy_minus_sign: | N/A | 1920 |
+| `height` | *?float* | :heavy_minus_sign: | N/A | 804 |
+| `aspectRatio` | *?float* | :heavy_minus_sign: | N/A | 2.35 |
+| `audioChannels` | *?float* | :heavy_minus_sign: | N/A | 6 |
+| `audioCodec` | *?string* | :heavy_minus_sign: | N/A | ac3 |
+| `videoCodec` | *?string* | :heavy_minus_sign: | N/A | h264 |
+| `videoResolution` | *?float* | :heavy_minus_sign: | N/A | 1080 |
+| `container` | *?string* | :heavy_minus_sign: | N/A | mp4 |
+| `videoFrameRate` | *?string* | :heavy_minus_sign: | N/A | 24p |
+| `optimizedForStreaming` | *?float* | :heavy_minus_sign: | N/A | 0 |
+| `has64bitOffsets` | *?bool* | :heavy_minus_sign: | N/A | |
+| `videoProfile` | *?string* | :heavy_minus_sign: | N/A | high |
+| `part` | array<[\LukeHagar\Plex_API\Models\Operations\Part](../../Models/Operations/Part.md)> | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/Models/Operations/MediaContainer.md b/docs/Models/Operations/MediaContainer.md
new file mode 100644
index 0000000..abc3953
--- /dev/null
+++ b/docs/Models/Operations/MediaContainer.md
@@ -0,0 +1,58 @@
+# MediaContainer
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
+| `size` | *?float* | :heavy_minus_sign: | N/A |
+| `allowCameraUpload` | *?bool* | :heavy_minus_sign: | N/A |
+| `allowChannelAccess` | *?bool* | :heavy_minus_sign: | N/A |
+| `allowMediaDeletion` | *?bool* | :heavy_minus_sign: | N/A |
+| `allowSharing` | *?bool* | :heavy_minus_sign: | N/A |
+| `allowSync` | *?bool* | :heavy_minus_sign: | N/A |
+| `allowTuners` | *?bool* | :heavy_minus_sign: | N/A |
+| `backgroundProcessing` | *?bool* | :heavy_minus_sign: | N/A |
+| `certificate` | *?bool* | :heavy_minus_sign: | N/A |
+| `companionProxy` | *?bool* | :heavy_minus_sign: | N/A |
+| `countryCode` | *?string* | :heavy_minus_sign: | N/A |
+| `diagnostics` | *?string* | :heavy_minus_sign: | N/A |
+| `eventStream` | *?bool* | :heavy_minus_sign: | N/A |
+| `friendlyName` | *?string* | :heavy_minus_sign: | N/A |
+| `hubSearch` | *?bool* | :heavy_minus_sign: | N/A |
+| `itemClusters` | *?bool* | :heavy_minus_sign: | N/A |
+| `livetv` | *?float* | :heavy_minus_sign: | N/A |
+| `machineIdentifier` | *?string* | :heavy_minus_sign: | N/A |
+| `mediaProviders` | *?bool* | :heavy_minus_sign: | N/A |
+| `multiuser` | *?bool* | :heavy_minus_sign: | N/A |
+| `musicAnalysis` | *?float* | :heavy_minus_sign: | N/A |
+| `myPlex` | *?bool* | :heavy_minus_sign: | N/A |
+| `myPlexMappingState` | *?string* | :heavy_minus_sign: | N/A |
+| `myPlexSigninState` | *?string* | :heavy_minus_sign: | N/A |
+| `myPlexSubscription` | *?bool* | :heavy_minus_sign: | N/A |
+| `myPlexUsername` | *?string* | :heavy_minus_sign: | N/A |
+| `offlineTranscode` | *?float* | :heavy_minus_sign: | N/A |
+| `ownerFeatures` | *?string* | :heavy_minus_sign: | N/A |
+| `photoAutoTag` | *?bool* | :heavy_minus_sign: | N/A |
+| `platform` | *?string* | :heavy_minus_sign: | N/A |
+| `platformVersion` | *?string* | :heavy_minus_sign: | N/A |
+| `pluginHost` | *?bool* | :heavy_minus_sign: | N/A |
+| `pushNotifications` | *?bool* | :heavy_minus_sign: | N/A |
+| `readOnlyLibraries` | *?bool* | :heavy_minus_sign: | N/A |
+| `streamingBrainABRVersion` | *?float* | :heavy_minus_sign: | N/A |
+| `streamingBrainVersion` | *?float* | :heavy_minus_sign: | N/A |
+| `sync` | *?bool* | :heavy_minus_sign: | N/A |
+| `transcoderActiveVideoSessions` | *?float* | :heavy_minus_sign: | N/A |
+| `transcoderAudio` | *?bool* | :heavy_minus_sign: | N/A |
+| `transcoderLyrics` | *?bool* | :heavy_minus_sign: | N/A |
+| `transcoderPhoto` | *?bool* | :heavy_minus_sign: | N/A |
+| `transcoderSubtitles` | *?bool* | :heavy_minus_sign: | N/A |
+| `transcoderVideo` | *?bool* | :heavy_minus_sign: | N/A |
+| `transcoderVideoBitrates` | *?string* | :heavy_minus_sign: | N/A |
+| `transcoderVideoQualities` | *?string* | :heavy_minus_sign: | N/A |
+| `transcoderVideoResolutions` | *?string* | :heavy_minus_sign: | N/A |
+| `updatedAt` | *?float* | :heavy_minus_sign: | N/A |
+| `updater` | *?bool* | :heavy_minus_sign: | N/A |
+| `version` | *?string* | :heavy_minus_sign: | N/A |
+| `voiceSearch` | *?bool* | :heavy_minus_sign: | N/A |
+| `directory` | array<[\LukeHagar\Plex_API\Models\Operations\Directory](../../Models/Operations/Directory.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/Metadata.md b/docs/Models/Operations/Metadata.md
new file mode 100644
index 0000000..9de5516
--- /dev/null
+++ b/docs/Models/Operations/Metadata.md
@@ -0,0 +1,39 @@
+# Metadata
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `allowSync` | *?bool* | :heavy_minus_sign: | N/A | |
+| `librarySectionID` | *?float* | :heavy_minus_sign: | N/A | 1 |
+| `librarySectionTitle` | *?string* | :heavy_minus_sign: | N/A | Movies |
+| `librarySectionUUID` | *?string* | :heavy_minus_sign: | N/A | 322a231a-b7f7-49f5-920f-14c61199cd30 |
+| `ratingKey` | *?float* | :heavy_minus_sign: | N/A | 59398 |
+| `key` | *?string* | :heavy_minus_sign: | N/A | /library/metadata/59398 |
+| `guid` | *?string* | :heavy_minus_sign: | N/A | plex://movie/5e161a83bea6ac004126e148 |
+| `studio` | *?string* | :heavy_minus_sign: | N/A | Marvel Studios |
+| `type` | *?string* | :heavy_minus_sign: | N/A | movie |
+| `title` | *?string* | :heavy_minus_sign: | N/A | Ant-Man and the Wasp: Quantumania |
+| `contentRating` | *?string* | :heavy_minus_sign: | N/A | PG-13 |
+| `summary` | *?string* | :heavy_minus_sign: | N/A | Scott Lang and Hope Van Dyne along with Hank Pym and Janet Van Dyne explore the Quantum Realm where they interact with strange creatures and embark on an adventure that goes beyond the limits of what they thought was possible. |
+| `rating` | *?float* | :heavy_minus_sign: | N/A | 4.7 |
+| `audienceRating` | *?float* | :heavy_minus_sign: | N/A | 8.3 |
+| `year` | *?float* | :heavy_minus_sign: | N/A | 2023 |
+| `tagline` | *?string* | :heavy_minus_sign: | N/A | Witness the beginning of a new dynasty. |
+| `thumb` | *?string* | :heavy_minus_sign: | N/A | /library/metadata/59398/thumb/1681888010 |
+| `art` | *?string* | :heavy_minus_sign: | N/A | /library/metadata/59398/art/1681888010 |
+| `duration` | *?float* | :heavy_minus_sign: | N/A | 7474422 |
+| `originallyAvailableAt` | [\DateTime](https://www.php.net/manual/en/class.datetime.php) | :heavy_minus_sign: | N/A | 2023-02-15 00:00:00 +0000 UTC |
+| `addedAt` | *?float* | :heavy_minus_sign: | N/A | 1681803215 |
+| `updatedAt` | *?float* | :heavy_minus_sign: | N/A | 1681888010 |
+| `audienceRatingImage` | *?string* | :heavy_minus_sign: | N/A | rottentomatoes://image.rating.upright |
+| `chapterSource` | *?string* | :heavy_minus_sign: | N/A | media |
+| `primaryExtraKey` | *?string* | :heavy_minus_sign: | N/A | /library/metadata/59399 |
+| `ratingImage` | *?string* | :heavy_minus_sign: | N/A | rottentomatoes://image.rating.rotten |
+| `media` | array<[\LukeHagar\Plex_API\Models\Operations\Media](../../Models/Operations/Media.md)> | :heavy_minus_sign: | N/A | |
+| `genre` | array<[\LukeHagar\Plex_API\Models\Operations\Genre](../../Models/Operations/Genre.md)> | :heavy_minus_sign: | N/A | |
+| `director` | array<[\LukeHagar\Plex_API\Models\Operations\Director](../../Models/Operations/Director.md)> | :heavy_minus_sign: | N/A | |
+| `writer` | array<[\LukeHagar\Plex_API\Models\Operations\Writer](../../Models/Operations/Writer.md)> | :heavy_minus_sign: | N/A | |
+| `country` | array<[\LukeHagar\Plex_API\Models\Operations\Country](../../Models/Operations/Country.md)> | :heavy_minus_sign: | N/A | |
+| `role` | array<[\LukeHagar\Plex_API\Models\Operations\Role](../../Models/Operations/Role.md)> | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/Models/Operations/MinSize.md b/docs/Models/Operations/MinSize.md
new file mode 100644
index 0000000..cb991b5
--- /dev/null
+++ b/docs/Models/Operations/MinSize.md
@@ -0,0 +1,11 @@
+# MinSize
+
+images are always scaled proportionally. A value of '1' in minSize will make the smaller native dimension the dimension resized against.
+
+
+## Values
+
+| Name | Value |
+| ------ | ------ |
+| `Zero` | 0 |
+| `One` | 1 |
\ No newline at end of file
diff --git a/docs/Models/Operations/MyPlex.md b/docs/Models/Operations/MyPlex.md
new file mode 100644
index 0000000..db4c64a
--- /dev/null
+++ b/docs/Models/Operations/MyPlex.md
@@ -0,0 +1,19 @@
+# MyPlex
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `authToken` | *?string* | :heavy_minus_sign: | N/A | Z5v-PrNASDFpsaCi3CPK7 |
+| `username` | *?string* | :heavy_minus_sign: | N/A | example.email@mail.com |
+| `mappingState` | *?string* | :heavy_minus_sign: | N/A | mapped |
+| `mappingError` | *?string* | :heavy_minus_sign: | N/A | |
+| `signInState` | *?string* | :heavy_minus_sign: | N/A | ok |
+| `publicAddress` | *?string* | :heavy_minus_sign: | N/A | 140.20.68.140 |
+| `publicPort` | *?float* | :heavy_minus_sign: | N/A | 32400 |
+| `privateAddress` | *?string* | :heavy_minus_sign: | N/A | 10.10.10.47 |
+| `privatePort` | *?float* | :heavy_minus_sign: | N/A | 32400 |
+| `subscriptionFeatures` | *?string* | :heavy_minus_sign: | N/A | federated-auth,hardware_transcoding,home,hwtranscode,item_clusters,kevin-bacon,livetv,loudness,lyrics,music-analysis,music_videos,pass,photo_autotags,photos-v5,photosV6-edit,photosV6-tv-albums,premium_music_metadata,radio,server-manager,session_bandwidth_restrictions,session_kick,shared-radio,sync,trailers,tuner-sharing,type-first,unsupportedtuners,webhooks |
+| `subscriptionActive` | *?bool* | :heavy_minus_sign: | N/A | |
+| `subscriptionState` | *?string* | :heavy_minus_sign: | N/A | Active |
\ No newline at end of file
diff --git a/docs/Models/Operations/OnlyTransient.md b/docs/Models/Operations/OnlyTransient.md
new file mode 100644
index 0000000..763848f
--- /dev/null
+++ b/docs/Models/Operations/OnlyTransient.md
@@ -0,0 +1,11 @@
+# OnlyTransient
+
+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).
+
+
+## Values
+
+| Name | Value |
+| ------ | ------ |
+| `Zero` | 0 |
+| `One` | 1 |
\ No newline at end of file
diff --git a/docs/Models/Operations/Part.md b/docs/Models/Operations/Part.md
new file mode 100644
index 0000000..1f1dc34
--- /dev/null
+++ b/docs/Models/Operations/Part.md
@@ -0,0 +1,17 @@
+# Part
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
+| `id` | *?float* | :heavy_minus_sign: | N/A | 120353 |
+| `key` | *?string* | :heavy_minus_sign: | N/A | /library/parts/120353/1681803203/file.mp4 |
+| `duration` | *?float* | :heavy_minus_sign: | N/A | 7474422 |
+| `file` | *?string* | :heavy_minus_sign: | N/A | /movies/Ant-Man and the Wasp Quantumania (2023)/Ant-Man.and.the.Wasp.Quantumania.2023.1080p.mp4 |
+| `size` | *?float* | :heavy_minus_sign: | N/A | 3395307162 |
+| `container` | *?string* | :heavy_minus_sign: | N/A | mp4 |
+| `has64bitOffsets` | *?bool* | :heavy_minus_sign: | N/A | |
+| `hasThumbnail` | *?float* | :heavy_minus_sign: | N/A | 1 |
+| `optimizedForStreaming` | *?bool* | :heavy_minus_sign: | N/A | |
+| `videoProfile` | *?string* | :heavy_minus_sign: | N/A | high |
\ No newline at end of file
diff --git a/docs/Models/Operations/PathParamTaskName.md b/docs/Models/Operations/PathParamTaskName.md
new file mode 100644
index 0000000..650e15c
--- /dev/null
+++ b/docs/Models/Operations/PathParamTaskName.md
@@ -0,0 +1,23 @@
+# PathParamTaskName
+
+The name of the task to be started.
+
+
+## Values
+
+| Name | Value |
+| --------------------------- | --------------------------- |
+| `BackupDatabase` | BackupDatabase |
+| `BuildGracenoteCollections` | BuildGracenoteCollections |
+| `CheckForUpdates` | CheckForUpdates |
+| `CleanOldBundles` | CleanOldBundles |
+| `CleanOldCacheFiles` | CleanOldCacheFiles |
+| `DeepMediaAnalysis` | DeepMediaAnalysis |
+| `GenerateAutoTags` | GenerateAutoTags |
+| `GenerateChapterThumbs` | GenerateChapterThumbs |
+| `GenerateMediaIndexFiles` | GenerateMediaIndexFiles |
+| `OptimizeDatabase` | OptimizeDatabase |
+| `RefreshLibraries` | RefreshLibraries |
+| `RefreshLocalMedia` | RefreshLocalMedia |
+| `RefreshPeriodicMetadata` | RefreshPeriodicMetadata |
+| `UpgradeMediaAnalysis` | UpgradeMediaAnalysis |
\ No newline at end of file
diff --git a/docs/Models/Operations/PerformSearchErrors.md b/docs/Models/Operations/PerformSearchErrors.md
new file mode 100644
index 0000000..01ef4e0
--- /dev/null
+++ b/docs/Models/Operations/PerformSearchErrors.md
@@ -0,0 +1,10 @@
+# PerformSearchErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/PerformSearchRequest.md b/docs/Models/Operations/PerformSearchRequest.md
new file mode 100644
index 0000000..2678b21
--- /dev/null
+++ b/docs/Models/Operations/PerformSearchRequest.md
@@ -0,0 +1,10 @@
+# PerformSearchRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `query` | *string* | :heavy_check_mark: | The query term | arnold |
+| `sectionId` | *?float* | :heavy_minus_sign: | This gives context to the search, and can result in re-ordering of search result hubs | |
+| `limit` | *?float* | :heavy_minus_sign: | The number of items to return per hub | 5 |
\ No newline at end of file
diff --git a/docs/Models/Operations/PerformSearchResponse.md b/docs/Models/Operations/PerformSearchResponse.md
new file mode 100644
index 0000000..78d7cbe
--- /dev/null
+++ b/docs/Models/Operations/PerformSearchResponse.md
@@ -0,0 +1,11 @@
+# PerformSearchResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\PerformSearchResponseBody](../../Models/Operations/PerformSearchResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/PerformSearchResponseBody.md b/docs/Models/Operations/PerformSearchResponseBody.md
new file mode 100644
index 0000000..217e42d
--- /dev/null
+++ b/docs/Models/Operations/PerformSearchResponseBody.md
@@ -0,0 +1,10 @@
+# PerformSearchResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\PerformSearchErrors](../../Models/Operations/PerformSearchErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/PerformVoiceSearchErrors.md b/docs/Models/Operations/PerformVoiceSearchErrors.md
new file mode 100644
index 0000000..c1c9199
--- /dev/null
+++ b/docs/Models/Operations/PerformVoiceSearchErrors.md
@@ -0,0 +1,10 @@
+# PerformVoiceSearchErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/PerformVoiceSearchRequest.md b/docs/Models/Operations/PerformVoiceSearchRequest.md
new file mode 100644
index 0000000..592436d
--- /dev/null
+++ b/docs/Models/Operations/PerformVoiceSearchRequest.md
@@ -0,0 +1,10 @@
+# PerformVoiceSearchRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `query` | *string* | :heavy_check_mark: | The query term | dead+poop |
+| `sectionId` | *?float* | :heavy_minus_sign: | This gives context to the search, and can result in re-ordering of search result hubs | |
+| `limit` | *?float* | :heavy_minus_sign: | The number of items to return per hub | 5 |
\ No newline at end of file
diff --git a/docs/Models/Operations/PerformVoiceSearchResponse.md b/docs/Models/Operations/PerformVoiceSearchResponse.md
new file mode 100644
index 0000000..ae66b02
--- /dev/null
+++ b/docs/Models/Operations/PerformVoiceSearchResponse.md
@@ -0,0 +1,11 @@
+# PerformVoiceSearchResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\PerformVoiceSearchResponseBody](../../Models/Operations/PerformVoiceSearchResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/PerformVoiceSearchResponseBody.md b/docs/Models/Operations/PerformVoiceSearchResponseBody.md
new file mode 100644
index 0000000..0801821
--- /dev/null
+++ b/docs/Models/Operations/PerformVoiceSearchResponseBody.md
@@ -0,0 +1,10 @@
+# PerformVoiceSearchResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\PerformVoiceSearchErrors](../../Models/Operations/PerformVoiceSearchErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/PlaylistType.md b/docs/Models/Operations/PlaylistType.md
new file mode 100644
index 0000000..c09c1e5
--- /dev/null
+++ b/docs/Models/Operations/PlaylistType.md
@@ -0,0 +1,12 @@
+# PlaylistType
+
+limit to a type of playlist.
+
+
+## Values
+
+| Name | Value |
+| ------- | ------- |
+| `Audio` | audio |
+| `Video` | video |
+| `Photo` | photo |
\ No newline at end of file
diff --git a/docs/Models/Operations/Provider.md b/docs/Models/Operations/Provider.md
new file mode 100644
index 0000000..a20f121
--- /dev/null
+++ b/docs/Models/Operations/Provider.md
@@ -0,0 +1,10 @@
+# Provider
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `key` | *?string* | :heavy_minus_sign: | N/A | /system/search |
+| `title` | *?string* | :heavy_minus_sign: | N/A | Local Network |
+| `type` | *?string* | :heavy_minus_sign: | N/A | mixed |
\ No newline at end of file
diff --git a/docs/Models/Operations/QueryParamOnlyTransient.md b/docs/Models/Operations/QueryParamOnlyTransient.md
new file mode 100644
index 0000000..6ae6613
--- /dev/null
+++ b/docs/Models/Operations/QueryParamOnlyTransient.md
@@ -0,0 +1,11 @@
+# QueryParamOnlyTransient
+
+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).
+
+
+## Values
+
+| Name | Value |
+| ------ | ------ |
+| `Zero` | 0 |
+| `One` | 1 |
\ No newline at end of file
diff --git a/docs/Models/Operations/QueryParamSmart.md b/docs/Models/Operations/QueryParamSmart.md
new file mode 100644
index 0000000..00f49fb
--- /dev/null
+++ b/docs/Models/Operations/QueryParamSmart.md
@@ -0,0 +1,11 @@
+# QueryParamSmart
+
+type of playlists to return (default is all).
+
+
+## Values
+
+| Name | Value |
+| ------ | ------ |
+| `Zero` | 0 |
+| `One` | 1 |
\ No newline at end of file
diff --git a/docs/Models/Operations/QueryParamType.md b/docs/Models/Operations/QueryParamType.md
new file mode 100644
index 0000000..86cdced
--- /dev/null
+++ b/docs/Models/Operations/QueryParamType.md
@@ -0,0 +1,10 @@
+# QueryParamType
+
+`delegation` - This is the only supported `type` parameter.
+
+
+## Values
+
+| Name | Value |
+| ------------ | ------------ |
+| `Delegation` | delegation |
\ No newline at end of file
diff --git a/docs/Models/Operations/RefreshLibraryErrors.md b/docs/Models/Operations/RefreshLibraryErrors.md
new file mode 100644
index 0000000..d579ae0
--- /dev/null
+++ b/docs/Models/Operations/RefreshLibraryErrors.md
@@ -0,0 +1,10 @@
+# RefreshLibraryErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/RefreshLibraryRequest.md b/docs/Models/Operations/RefreshLibraryRequest.md
new file mode 100644
index 0000000..258e2c3
--- /dev/null
+++ b/docs/Models/Operations/RefreshLibraryRequest.md
@@ -0,0 +1,8 @@
+# RefreshLibraryRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- |
+| `sectionId` | *float* | :heavy_check_mark: | the Id of the library to refresh |
\ No newline at end of file
diff --git a/docs/Models/Operations/RefreshLibraryResponse.md b/docs/Models/Operations/RefreshLibraryResponse.md
new file mode 100644
index 0000000..b1d31fb
--- /dev/null
+++ b/docs/Models/Operations/RefreshLibraryResponse.md
@@ -0,0 +1,11 @@
+# RefreshLibraryResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\RefreshLibraryResponseBody](../../Models/Operations/RefreshLibraryResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/RefreshLibraryResponseBody.md b/docs/Models/Operations/RefreshLibraryResponseBody.md
new file mode 100644
index 0000000..fef5cd8
--- /dev/null
+++ b/docs/Models/Operations/RefreshLibraryResponseBody.md
@@ -0,0 +1,10 @@
+# RefreshLibraryResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\RefreshLibraryErrors](../../Models/Operations/RefreshLibraryErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/ResponseBody.md b/docs/Models/Operations/ResponseBody.md
new file mode 100644
index 0000000..1928746
--- /dev/null
+++ b/docs/Models/Operations/ResponseBody.md
@@ -0,0 +1,8 @@
+# ResponseBody
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| `mediaContainer` | [?\LukeHagar\Plex_API\Models\Operations\GetAvailableClientsMediaContainer](../../Models/Operations/GetAvailableClientsMediaContainer.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/Role.md b/docs/Models/Operations/Role.md
new file mode 100644
index 0000000..dafc0d7
--- /dev/null
+++ b/docs/Models/Operations/Role.md
@@ -0,0 +1,8 @@
+# Role
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `tag` | *?string* | :heavy_minus_sign: | N/A | Paul Rudd |
\ No newline at end of file
diff --git a/docs/Models/Operations/Scope.md b/docs/Models/Operations/Scope.md
new file mode 100644
index 0000000..ac7b0f1
--- /dev/null
+++ b/docs/Models/Operations/Scope.md
@@ -0,0 +1,10 @@
+# Scope
+
+`all` - This is the only supported `scope` parameter.
+
+
+## Values
+
+| Name | Value |
+| ----- | ----- |
+| `All` | all |
\ No newline at end of file
diff --git a/docs/Models/Operations/Server.md b/docs/Models/Operations/Server.md
new file mode 100644
index 0000000..88b6e79
--- /dev/null
+++ b/docs/Models/Operations/Server.md
@@ -0,0 +1,18 @@
+# Server
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- |
+| `name` | *?string* | :heavy_minus_sign: | N/A | iPad |
+| `host` | *?string* | :heavy_minus_sign: | N/A | 10.10.10.102 |
+| `address` | *?string* | :heavy_minus_sign: | N/A | 10.10.10.102 |
+| `port` | *?float* | :heavy_minus_sign: | N/A | 32500 |
+| `machineIdentifier` | *?string* | :heavy_minus_sign: | N/A | A2E901F8-E016-43A7-ADFB-EF8CA8A4AC05 |
+| `version` | *?string* | :heavy_minus_sign: | N/A | 8.17 |
+| `protocol` | *?string* | :heavy_minus_sign: | N/A | plex |
+| `product` | *?string* | :heavy_minus_sign: | N/A | Plex for iOS |
+| `deviceClass` | *?string* | :heavy_minus_sign: | N/A | tablet |
+| `protocolVersion` | *?float* | :heavy_minus_sign: | N/A | 2 |
+| `protocolCapabilities` | *?string* | :heavy_minus_sign: | N/A | playback,playqueues,timeline,provider-playback |
\ No newline at end of file
diff --git a/docs/Models/Operations/Skip.md b/docs/Models/Operations/Skip.md
new file mode 100644
index 0000000..bdc10b9
--- /dev/null
+++ b/docs/Models/Operations/Skip.md
@@ -0,0 +1,11 @@
+# Skip
+
+Indicate that the latest version should be marked as skipped. The entry for this version will have the `state` set to `skipped`.
+
+
+## Values
+
+| Name | Value |
+| ------ | ------ |
+| `Zero` | 0 |
+| `One` | 1 |
\ No newline at end of file
diff --git a/docs/Models/Operations/Smart.md b/docs/Models/Operations/Smart.md
new file mode 100644
index 0000000..9be1798
--- /dev/null
+++ b/docs/Models/Operations/Smart.md
@@ -0,0 +1,11 @@
+# Smart
+
+whether the playlist is smart or not
+
+
+## Values
+
+| Name | Value |
+| ------ | ------ |
+| `Zero` | 0 |
+| `One` | 1 |
\ No newline at end of file
diff --git a/docs/Models/Operations/StartAllTasksErrors.md b/docs/Models/Operations/StartAllTasksErrors.md
new file mode 100644
index 0000000..a3c132a
--- /dev/null
+++ b/docs/Models/Operations/StartAllTasksErrors.md
@@ -0,0 +1,10 @@
+# StartAllTasksErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/StartAllTasksResponse.md b/docs/Models/Operations/StartAllTasksResponse.md
new file mode 100644
index 0000000..ab718bb
--- /dev/null
+++ b/docs/Models/Operations/StartAllTasksResponse.md
@@ -0,0 +1,11 @@
+# StartAllTasksResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\StartAllTasksResponseBody](../../Models/Operations/StartAllTasksResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/StartAllTasksResponseBody.md b/docs/Models/Operations/StartAllTasksResponseBody.md
new file mode 100644
index 0000000..e5df765
--- /dev/null
+++ b/docs/Models/Operations/StartAllTasksResponseBody.md
@@ -0,0 +1,10 @@
+# StartAllTasksResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\StartAllTasksErrors](../../Models/Operations/StartAllTasksErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/StartTaskErrors.md b/docs/Models/Operations/StartTaskErrors.md
new file mode 100644
index 0000000..13d2ab5
--- /dev/null
+++ b/docs/Models/Operations/StartTaskErrors.md
@@ -0,0 +1,10 @@
+# StartTaskErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/StartTaskRequest.md b/docs/Models/Operations/StartTaskRequest.md
new file mode 100644
index 0000000..f766720
--- /dev/null
+++ b/docs/Models/Operations/StartTaskRequest.md
@@ -0,0 +1,8 @@
+# StartTaskRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `taskName` | [\LukeHagar\Plex_API\Models\Operations\TaskName](../../Models/Operations/TaskName.md) | :heavy_check_mark: | the name of the task to be started. |
\ No newline at end of file
diff --git a/docs/Models/Operations/StartTaskResponse.md b/docs/Models/Operations/StartTaskResponse.md
new file mode 100644
index 0000000..af2e27d
--- /dev/null
+++ b/docs/Models/Operations/StartTaskResponse.md
@@ -0,0 +1,11 @@
+# StartTaskResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\StartTaskResponseBody](../../Models/Operations/StartTaskResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/StartTaskResponseBody.md b/docs/Models/Operations/StartTaskResponseBody.md
new file mode 100644
index 0000000..d1357a3
--- /dev/null
+++ b/docs/Models/Operations/StartTaskResponseBody.md
@@ -0,0 +1,10 @@
+# StartTaskResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\StartTaskErrors](../../Models/Operations/StartTaskErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/StartUniversalTranscodeErrors.md b/docs/Models/Operations/StartUniversalTranscodeErrors.md
new file mode 100644
index 0000000..5f919ed
--- /dev/null
+++ b/docs/Models/Operations/StartUniversalTranscodeErrors.md
@@ -0,0 +1,10 @@
+# StartUniversalTranscodeErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/StartUniversalTranscodeRequest.md b/docs/Models/Operations/StartUniversalTranscodeRequest.md
new file mode 100644
index 0000000..bdf6e46
--- /dev/null
+++ b/docs/Models/Operations/StartUniversalTranscodeRequest.md
@@ -0,0 +1,23 @@
+# StartUniversalTranscodeRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- |
+| `hasMDE` | *float* | :heavy_check_mark: | Whether the media item has MDE |
+| `path` | *string* | :heavy_check_mark: | The path to the media item to transcode |
+| `mediaIndex` | *float* | :heavy_check_mark: | The index of the media item to transcode |
+| `partIndex` | *float* | :heavy_check_mark: | The index of the part to transcode |
+| `protocol` | *string* | :heavy_check_mark: | The protocol to use for the transcode session |
+| `fastSeek` | *?float* | :heavy_minus_sign: | Whether to use fast seek or not |
+| `directPlay` | *?float* | :heavy_minus_sign: | Whether to use direct play or not |
+| `directStream` | *?float* | :heavy_minus_sign: | Whether to use direct stream or not |
+| `subtitleSize` | *?float* | :heavy_minus_sign: | The size of the subtitles |
+| `subtites` | *?string* | :heavy_minus_sign: | The subtitles |
+| `audioBoost` | *?float* | :heavy_minus_sign: | The audio boost |
+| `location` | *?string* | :heavy_minus_sign: | The location of the transcode session |
+| `mediaBufferSize` | *?float* | :heavy_minus_sign: | The size of the media buffer |
+| `session` | *?string* | :heavy_minus_sign: | The session ID |
+| `addDebugOverlay` | *?float* | :heavy_minus_sign: | Whether to add a debug overlay or not |
+| `autoAdjustQuality` | *?float* | :heavy_minus_sign: | Whether to auto adjust quality or not |
\ No newline at end of file
diff --git a/docs/Models/Operations/StartUniversalTranscodeResponse.md b/docs/Models/Operations/StartUniversalTranscodeResponse.md
new file mode 100644
index 0000000..bea4c65
--- /dev/null
+++ b/docs/Models/Operations/StartUniversalTranscodeResponse.md
@@ -0,0 +1,11 @@
+# StartUniversalTranscodeResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\StartUniversalTranscodeResponseBody](../../Models/Operations/StartUniversalTranscodeResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/StartUniversalTranscodeResponseBody.md b/docs/Models/Operations/StartUniversalTranscodeResponseBody.md
new file mode 100644
index 0000000..0462aa1
--- /dev/null
+++ b/docs/Models/Operations/StartUniversalTranscodeResponseBody.md
@@ -0,0 +1,10 @@
+# StartUniversalTranscodeResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\StartUniversalTranscodeErrors](../../Models/Operations/StartUniversalTranscodeErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/State.md b/docs/Models/Operations/State.md
new file mode 100644
index 0000000..52d6ca4
--- /dev/null
+++ b/docs/Models/Operations/State.md
@@ -0,0 +1,12 @@
+# State
+
+The state of the media item
+
+
+## Values
+
+| Name | Value |
+| --------- | --------- |
+| `Playing` | playing |
+| `Paused` | paused |
+| `Stopped` | stopped |
\ No newline at end of file
diff --git a/docs/Models/Operations/StopAllTasksErrors.md b/docs/Models/Operations/StopAllTasksErrors.md
new file mode 100644
index 0000000..6c34244
--- /dev/null
+++ b/docs/Models/Operations/StopAllTasksErrors.md
@@ -0,0 +1,10 @@
+# StopAllTasksErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/StopAllTasksResponse.md b/docs/Models/Operations/StopAllTasksResponse.md
new file mode 100644
index 0000000..e51609b
--- /dev/null
+++ b/docs/Models/Operations/StopAllTasksResponse.md
@@ -0,0 +1,11 @@
+# StopAllTasksResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\StopAllTasksResponseBody](../../Models/Operations/StopAllTasksResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/StopAllTasksResponseBody.md b/docs/Models/Operations/StopAllTasksResponseBody.md
new file mode 100644
index 0000000..0a7d83a
--- /dev/null
+++ b/docs/Models/Operations/StopAllTasksResponseBody.md
@@ -0,0 +1,10 @@
+# StopAllTasksResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\StopAllTasksErrors](../../Models/Operations/StopAllTasksErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/StopTaskErrors.md b/docs/Models/Operations/StopTaskErrors.md
new file mode 100644
index 0000000..99533e7
--- /dev/null
+++ b/docs/Models/Operations/StopTaskErrors.md
@@ -0,0 +1,10 @@
+# StopTaskErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/StopTaskRequest.md b/docs/Models/Operations/StopTaskRequest.md
new file mode 100644
index 0000000..f21f6d4
--- /dev/null
+++ b/docs/Models/Operations/StopTaskRequest.md
@@ -0,0 +1,8 @@
+# StopTaskRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
+| `taskName` | [\LukeHagar\Plex_API\Models\Operations\PathParamTaskName](../../Models/Operations/PathParamTaskName.md) | :heavy_check_mark: | The name of the task to be started. |
\ No newline at end of file
diff --git a/docs/Models/Operations/StopTaskResponse.md b/docs/Models/Operations/StopTaskResponse.md
new file mode 100644
index 0000000..e082687
--- /dev/null
+++ b/docs/Models/Operations/StopTaskResponse.md
@@ -0,0 +1,11 @@
+# StopTaskResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\StopTaskResponseBody](../../Models/Operations/StopTaskResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/StopTaskResponseBody.md b/docs/Models/Operations/StopTaskResponseBody.md
new file mode 100644
index 0000000..742f53c
--- /dev/null
+++ b/docs/Models/Operations/StopTaskResponseBody.md
@@ -0,0 +1,10 @@
+# StopTaskResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\StopTaskErrors](../../Models/Operations/StopTaskErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/StopTranscodeSessionErrors.md b/docs/Models/Operations/StopTranscodeSessionErrors.md
new file mode 100644
index 0000000..a8438fc
--- /dev/null
+++ b/docs/Models/Operations/StopTranscodeSessionErrors.md
@@ -0,0 +1,10 @@
+# StopTranscodeSessionErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/StopTranscodeSessionRequest.md b/docs/Models/Operations/StopTranscodeSessionRequest.md
new file mode 100644
index 0000000..ec0ecf0
--- /dev/null
+++ b/docs/Models/Operations/StopTranscodeSessionRequest.md
@@ -0,0 +1,8 @@
+# StopTranscodeSessionRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- |
+| `sessionKey` | *string* | :heavy_check_mark: | the Key of the transcode session to stop | zz7llzqlx8w9vnrsbnwhbmep |
\ No newline at end of file
diff --git a/docs/Models/Operations/StopTranscodeSessionResponse.md b/docs/Models/Operations/StopTranscodeSessionResponse.md
new file mode 100644
index 0000000..3a177c3
--- /dev/null
+++ b/docs/Models/Operations/StopTranscodeSessionResponse.md
@@ -0,0 +1,11 @@
+# StopTranscodeSessionResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\StopTranscodeSessionResponseBody](../../Models/Operations/StopTranscodeSessionResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/StopTranscodeSessionResponseBody.md b/docs/Models/Operations/StopTranscodeSessionResponseBody.md
new file mode 100644
index 0000000..5dae970
--- /dev/null
+++ b/docs/Models/Operations/StopTranscodeSessionResponseBody.md
@@ -0,0 +1,10 @@
+# StopTranscodeSessionResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\StopTranscodeSessionErrors](../../Models/Operations/StopTranscodeSessionErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/Stream.md b/docs/Models/Operations/Stream.md
new file mode 100644
index 0000000..ecfb623
--- /dev/null
+++ b/docs/Models/Operations/Stream.md
@@ -0,0 +1,30 @@
+# Stream
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------- | ---------------------- | ---------------------- | ---------------------- | ---------------------- |
+| `id` | *?float* | :heavy_minus_sign: | N/A | 211234 |
+| `streamType` | *?float* | :heavy_minus_sign: | N/A | 1 |
+| `default` | *?bool* | :heavy_minus_sign: | N/A | |
+| `codec` | *?string* | :heavy_minus_sign: | N/A | hevc |
+| `index` | *?float* | :heavy_minus_sign: | N/A | 0 |
+| `bitrate` | *?float* | :heavy_minus_sign: | N/A | 918 |
+| `language` | *?string* | :heavy_minus_sign: | N/A | English |
+| `languageTag` | *?string* | :heavy_minus_sign: | N/A | en |
+| `languageCode` | *?string* | :heavy_minus_sign: | N/A | eng |
+| `bitDepth` | *?float* | :heavy_minus_sign: | N/A | 8 |
+| `chromaLocation` | *?string* | :heavy_minus_sign: | N/A | left |
+| `chromaSubsampling` | *?string* | :heavy_minus_sign: | N/A | 4:2:0 |
+| `codedHeight` | *?float* | :heavy_minus_sign: | N/A | 1080 |
+| `codedWidth` | *?float* | :heavy_minus_sign: | N/A | 1920 |
+| `colorRange` | *?string* | :heavy_minus_sign: | N/A | tv |
+| `frameRate` | *?float* | :heavy_minus_sign: | N/A | 25 |
+| `height` | *?float* | :heavy_minus_sign: | N/A | 1080 |
+| `level` | *?float* | :heavy_minus_sign: | N/A | 120 |
+| `profile` | *?string* | :heavy_minus_sign: | N/A | main |
+| `refFrames` | *?float* | :heavy_minus_sign: | N/A | 1 |
+| `width` | *?float* | :heavy_minus_sign: | N/A | 1920 |
+| `displayTitle` | *?string* | :heavy_minus_sign: | N/A | 1080p (HEVC Main) |
+| `extendedDisplayTitle` | *?string* | :heavy_minus_sign: | N/A | 1080p (HEVC Main) |
\ No newline at end of file
diff --git a/docs/Models/Operations/TaskName.md b/docs/Models/Operations/TaskName.md
new file mode 100644
index 0000000..bdefa9d
--- /dev/null
+++ b/docs/Models/Operations/TaskName.md
@@ -0,0 +1,23 @@
+# TaskName
+
+the name of the task to be started.
+
+
+## Values
+
+| Name | Value |
+| --------------------------- | --------------------------- |
+| `BackupDatabase` | BackupDatabase |
+| `BuildGracenoteCollections` | BuildGracenoteCollections |
+| `CheckForUpdates` | CheckForUpdates |
+| `CleanOldBundles` | CleanOldBundles |
+| `CleanOldCacheFiles` | CleanOldCacheFiles |
+| `DeepMediaAnalysis` | DeepMediaAnalysis |
+| `GenerateAutoTags` | GenerateAutoTags |
+| `GenerateChapterThumbs` | GenerateChapterThumbs |
+| `GenerateMediaIndexFiles` | GenerateMediaIndexFiles |
+| `OptimizeDatabase` | OptimizeDatabase |
+| `RefreshLibraries` | RefreshLibraries |
+| `RefreshLocalMedia` | RefreshLocalMedia |
+| `RefreshPeriodicMetadata` | RefreshPeriodicMetadata |
+| `UpgradeMediaAnalysis` | UpgradeMediaAnalysis |
\ No newline at end of file
diff --git a/docs/Models/Operations/Tonight.md b/docs/Models/Operations/Tonight.md
new file mode 100644
index 0000000..1404bfb
--- /dev/null
+++ b/docs/Models/Operations/Tonight.md
@@ -0,0 +1,11 @@
+# Tonight
+
+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
+
+
+## Values
+
+| Name | Value |
+| ------ | ------ |
+| `Zero` | 0 |
+| `One` | 1 |
\ No newline at end of file
diff --git a/docs/Models/Operations/TranscodeSession.md b/docs/Models/Operations/TranscodeSession.md
new file mode 100644
index 0000000..dd142f3
--- /dev/null
+++ b/docs/Models/Operations/TranscodeSession.md
@@ -0,0 +1,29 @@
+# TranscodeSession
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------ | ------------------------ | ------------------------ | ------------------------ | ------------------------ |
+| `key` | *?string* | :heavy_minus_sign: | N/A | zz7llzqlx8w9vnrsbnwhbmep |
+| `throttled` | *?bool* | :heavy_minus_sign: | N/A | |
+| `complete` | *?bool* | :heavy_minus_sign: | N/A | |
+| `progress` | *?float* | :heavy_minus_sign: | N/A | 0.4000000059604645 |
+| `size` | *?float* | :heavy_minus_sign: | N/A | -22 |
+| `speed` | *?float* | :heavy_minus_sign: | N/A | 22.399999618530273 |
+| `error` | *?bool* | :heavy_minus_sign: | N/A | |
+| `duration` | *?float* | :heavy_minus_sign: | N/A | 2561768 |
+| `context` | *?string* | :heavy_minus_sign: | N/A | streaming |
+| `sourceVideoCodec` | *?string* | :heavy_minus_sign: | N/A | h264 |
+| `sourceAudioCodec` | *?string* | :heavy_minus_sign: | N/A | ac3 |
+| `videoDecision` | *?string* | :heavy_minus_sign: | N/A | transcode |
+| `audioDecision` | *?string* | :heavy_minus_sign: | N/A | transcode |
+| `protocol` | *?string* | :heavy_minus_sign: | N/A | http |
+| `container` | *?string* | :heavy_minus_sign: | N/A | mkv |
+| `videoCodec` | *?string* | :heavy_minus_sign: | N/A | h264 |
+| `audioCodec` | *?string* | :heavy_minus_sign: | N/A | opus |
+| `audioChannels` | *?float* | :heavy_minus_sign: | N/A | 2 |
+| `transcodeHwRequested` | *?bool* | :heavy_minus_sign: | N/A | |
+| `timeStamp` | *?float* | :heavy_minus_sign: | N/A | 1.6818695357764285e+09 |
+| `maxOffsetAvailable` | *?float* | :heavy_minus_sign: | N/A | 861.778 |
+| `minOffsetAvailable` | *?float* | :heavy_minus_sign: | N/A | 0 |
\ No newline at end of file
diff --git a/docs/Models/Operations/Type.md b/docs/Models/Operations/Type.md
new file mode 100644
index 0000000..0276e44
--- /dev/null
+++ b/docs/Models/Operations/Type.md
@@ -0,0 +1,12 @@
+# Type
+
+type of playlist to create
+
+
+## Values
+
+| Name | Value |
+| ------- | ------- |
+| `Audio` | audio |
+| `Video` | video |
+| `Photo` | photo |
\ No newline at end of file
diff --git a/docs/Models/Operations/UpdatePlayProgressErrors.md b/docs/Models/Operations/UpdatePlayProgressErrors.md
new file mode 100644
index 0000000..e32d373
--- /dev/null
+++ b/docs/Models/Operations/UpdatePlayProgressErrors.md
@@ -0,0 +1,10 @@
+# UpdatePlayProgressErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/UpdatePlayProgressRequest.md b/docs/Models/Operations/UpdatePlayProgressRequest.md
new file mode 100644
index 0000000..102d03d
--- /dev/null
+++ b/docs/Models/Operations/UpdatePlayProgressRequest.md
@@ -0,0 +1,10 @@
+# UpdatePlayProgressRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- |
+| `key` | *string* | :heavy_check_mark: | the media key |
+| `time` | *float* | :heavy_check_mark: | The time, in milliseconds, used to set the media playback progress. |
+| `state` | *string* | :heavy_check_mark: | The playback state of the media item. |
\ No newline at end of file
diff --git a/docs/Models/Operations/UpdatePlayProgressResponse.md b/docs/Models/Operations/UpdatePlayProgressResponse.md
new file mode 100644
index 0000000..d9e0ff9
--- /dev/null
+++ b/docs/Models/Operations/UpdatePlayProgressResponse.md
@@ -0,0 +1,11 @@
+# UpdatePlayProgressResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\UpdatePlayProgressResponseBody](../../Models/Operations/UpdatePlayProgressResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/UpdatePlayProgressResponseBody.md b/docs/Models/Operations/UpdatePlayProgressResponseBody.md
new file mode 100644
index 0000000..0902e6e
--- /dev/null
+++ b/docs/Models/Operations/UpdatePlayProgressResponseBody.md
@@ -0,0 +1,10 @@
+# UpdatePlayProgressResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\UpdatePlayProgressErrors](../../Models/Operations/UpdatePlayProgressErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/UpdatePlaylistErrors.md b/docs/Models/Operations/UpdatePlaylistErrors.md
new file mode 100644
index 0000000..5411a47
--- /dev/null
+++ b/docs/Models/Operations/UpdatePlaylistErrors.md
@@ -0,0 +1,10 @@
+# UpdatePlaylistErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/UpdatePlaylistRequest.md b/docs/Models/Operations/UpdatePlaylistRequest.md
new file mode 100644
index 0000000..7d6a0b5
--- /dev/null
+++ b/docs/Models/Operations/UpdatePlaylistRequest.md
@@ -0,0 +1,8 @@
+# UpdatePlaylistRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------- | ---------------------- | ---------------------- | ---------------------- |
+| `playlistID` | *float* | :heavy_check_mark: | the ID of the playlist |
\ No newline at end of file
diff --git a/docs/Models/Operations/UpdatePlaylistResponse.md b/docs/Models/Operations/UpdatePlaylistResponse.md
new file mode 100644
index 0000000..63b463c
--- /dev/null
+++ b/docs/Models/Operations/UpdatePlaylistResponse.md
@@ -0,0 +1,11 @@
+# UpdatePlaylistResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\UpdatePlaylistResponseBody](../../Models/Operations/UpdatePlaylistResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/UpdatePlaylistResponseBody.md b/docs/Models/Operations/UpdatePlaylistResponseBody.md
new file mode 100644
index 0000000..54654f8
--- /dev/null
+++ b/docs/Models/Operations/UpdatePlaylistResponseBody.md
@@ -0,0 +1,10 @@
+# UpdatePlaylistResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\UpdatePlaylistErrors](../../Models/Operations/UpdatePlaylistErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/UploadPlaylistErrors.md b/docs/Models/Operations/UploadPlaylistErrors.md
new file mode 100644
index 0000000..dc50a50
--- /dev/null
+++ b/docs/Models/Operations/UploadPlaylistErrors.md
@@ -0,0 +1,10 @@
+# UploadPlaylistErrors
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `code` | *?float* | :heavy_minus_sign: | N/A | 1001 |
+| `message` | *?string* | :heavy_minus_sign: | N/A | User could not be authenticated |
+| `status` | *?float* | :heavy_minus_sign: | N/A | 401 |
\ No newline at end of file
diff --git a/docs/Models/Operations/UploadPlaylistRequest.md b/docs/Models/Operations/UploadPlaylistRequest.md
new file mode 100644
index 0000000..aab0a25
--- /dev/null
+++ b/docs/Models/Operations/UploadPlaylistRequest.md
@@ -0,0 +1,9 @@
+# UploadPlaylistRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `path` | *string* | :heavy_check_mark: | 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.
| /home/barkley/playlist.m3u |
+| `force` | [\LukeHagar\Plex_API\Models\Operations\Force](../../Models/Operations/Force.md) | :heavy_check_mark: | 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.
| |
\ No newline at end of file
diff --git a/docs/Models/Operations/UploadPlaylistResponse.md b/docs/Models/Operations/UploadPlaylistResponse.md
new file mode 100644
index 0000000..d70df4f
--- /dev/null
+++ b/docs/Models/Operations/UploadPlaylistResponse.md
@@ -0,0 +1,11 @@
+# UploadPlaylistResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `statusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [\Psr\Http\Message\ResponseInterface](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
+| `object` | [?\LukeHagar\Plex_API\Models\Operations\UploadPlaylistResponseBody](../../Models/Operations/UploadPlaylistResponseBody.md) | :heavy_minus_sign: | Unauthorized - Returned if the X-Plex-Token is missing from the header or query. |
\ No newline at end of file
diff --git a/docs/Models/Operations/UploadPlaylistResponseBody.md b/docs/Models/Operations/UploadPlaylistResponseBody.md
new file mode 100644
index 0000000..e92e5b4
--- /dev/null
+++ b/docs/Models/Operations/UploadPlaylistResponseBody.md
@@ -0,0 +1,10 @@
+# UploadPlaylistResponseBody
+
+Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
+| `errors` | array<[\LukeHagar\Plex_API\Models\Operations\UploadPlaylistErrors](../../Models/Operations/UploadPlaylistErrors.md)> | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/Models/Operations/Upscale.md b/docs/Models/Operations/Upscale.md
new file mode 100644
index 0000000..d87109c
--- /dev/null
+++ b/docs/Models/Operations/Upscale.md
@@ -0,0 +1,11 @@
+# Upscale
+
+allow images to be resized beyond native dimensions.
+
+
+## Values
+
+| Name | Value |
+| ------ | ------ |
+| `Zero` | 0 |
+| `One` | 1 |
\ No newline at end of file
diff --git a/docs/Models/Operations/Writer.md b/docs/Models/Operations/Writer.md
new file mode 100644
index 0000000..7734c9e
--- /dev/null
+++ b/docs/Models/Operations/Writer.md
@@ -0,0 +1,8 @@
+# Writer
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `tag` | *?string* | :heavy_minus_sign: | N/A | Jeff Loveness |
\ No newline at end of file
diff --git a/docs/sdks/activities/README.md b/docs/sdks/activities/README.md
new file mode 100644
index 0000000..7a0f688
--- /dev/null
+++ b/docs/sdks/activities/README.md
@@ -0,0 +1,101 @@
+# Activities
+
+
+## Overview
+
+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.
+
+
+### Available Operations
+
+* [getServerActivities](#getserveractivities) - Get Server Activities
+* [cancelServerActivities](#cancelserveractivities) - Cancel Server Activities
+
+## getServerActivities
+
+Get Server Activities
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+ $response = $sdk->activities->getServerActivities();
+
+ if ($response->twoHundredApplicationJsonObject !== null) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetServerActivitiesResponse](../../Models/Operations/GetServerActivitiesResponse.md)**
+
+
+## cancelServerActivities
+
+Cancel Server Activities
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->activities->cancelServerActivities('string');
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- |
+| `activityUUID` | *string* | :heavy_check_mark: | The UUID of the activity to cancel. |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\CancelServerActivitiesResponse](../../Models/Operations/CancelServerActivitiesResponse.md)**
+
diff --git a/docs/sdks/butler/README.md b/docs/sdks/butler/README.md
new file mode 100644
index 0000000..3e605e7
--- /dev/null
+++ b/docs/sdks/butler/README.md
@@ -0,0 +1,230 @@
+# Butler
+
+
+## Overview
+
+Butler is the task manager of the Plex Media Server Ecosystem.
+
+
+### Available Operations
+
+* [getButlerTasks](#getbutlertasks) - Get Butler tasks
+* [startAllTasks](#startalltasks) - Start all Butler tasks
+* [stopAllTasks](#stopalltasks) - Stop all Butler tasks
+* [startTask](#starttask) - Start a single Butler task
+* [stopTask](#stoptask) - Stop a single Butler task
+
+## getButlerTasks
+
+Returns a list of butler tasks
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+ $response = $sdk->butler->getButlerTasks();
+
+ if ($response->twoHundredApplicationJsonObject !== null) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetButlerTasksResponse](../../Models/Operations/GetButlerTasksResponse.md)**
+
+
+## startAllTasks
+
+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.
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+ $response = $sdk->butler->startAllTasks();
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\StartAllTasksResponse](../../Models/Operations/StartAllTasksResponse.md)**
+
+
+## stopAllTasks
+
+This endpoint will stop all currently running tasks and remove any scheduled tasks from the queue.
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+ $response = $sdk->butler->stopAllTasks();
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\StopAllTasksResponse](../../Models/Operations/StopAllTasksResponse.md)**
+
+
+## startTask
+
+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.
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->butler->startTask(Operations\TaskName::CleanOldBundles);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `taskName` | [\LukeHagar\Plex_API\Models\Operations\TaskName](../../Models/Operations/TaskName.md) | :heavy_check_mark: | the name of the task to be started. |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\StartTaskResponse](../../Models/Operations/StartTaskResponse.md)**
+
+
+## stopTask
+
+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.
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->butler->stopTask(Operations\PathParamTaskName::BackupDatabase);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
+| `taskName` | [\LukeHagar\Plex_API\Models\Operations\PathParamTaskName](../../Models/Operations/PathParamTaskName.md) | :heavy_check_mark: | The name of the task to be started. |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\StopTaskResponse](../../Models/Operations/StopTaskResponse.md)**
+
diff --git a/docs/sdks/hubs/README.md b/docs/sdks/hubs/README.md
new file mode 100644
index 0000000..6a89201
--- /dev/null
+++ b/docs/sdks/hubs/README.md
@@ -0,0 +1,108 @@
+# Hubs
+
+
+## Overview
+
+Hubs are a structured two-dimensional container for media, generally represented by multiple horizontal rows.
+
+
+### Available Operations
+
+* [getGlobalHubs](#getglobalhubs) - Get Global Hubs
+* [getLibraryHubs](#getlibraryhubs) - Get library specific hubs
+
+## getGlobalHubs
+
+Get Global Hubs filtered by the parameters provided.
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->hubs->getGlobalHubs(1262.49, Operations\OnlyTransient::One);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `count` | *float* | :heavy_minus_sign: | The number of items to return with each hub. |
+| `onlyTransient` | [\LukeHagar\Plex_API\Models\Operations\OnlyTransient](../../Models/Operations/OnlyTransient.md) | :heavy_minus_sign: | 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). |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetGlobalHubsResponse](../../Models/Operations/GetGlobalHubsResponse.md)**
+
+
+## getLibraryHubs
+
+This endpoint will return a list of library specific hubs
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->hubs->getLibraryHubs(6728.76, 9010.22, Operations\QueryParamOnlyTransient::Zero);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `sectionId` | *float* | :heavy_check_mark: | the Id of the library to query |
+| `count` | *float* | :heavy_minus_sign: | The number of items to return with each hub. |
+| `onlyTransient` | [\LukeHagar\Plex_API\Models\Operations\QueryParamOnlyTransient](../../Models/Operations/QueryParamOnlyTransient.md) | :heavy_minus_sign: | 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). |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetLibraryHubsResponse](../../Models/Operations/GetLibraryHubsResponse.md)**
+
diff --git a/docs/sdks/library/README.md b/docs/sdks/library/README.md
new file mode 100644
index 0000000..875be7d
--- /dev/null
+++ b/docs/sdks/library/README.md
@@ -0,0 +1,588 @@
+# Library
+
+
+## Overview
+
+API Calls interacting with Plex Media Server Libraries
+
+
+### Available Operations
+
+* [getFileHash](#getfilehash) - Get Hash Value
+* [getRecentlyAdded](#getrecentlyadded) - Get Recently Added
+* [getLibraries](#getlibraries) - Get All Libraries
+* [getLibrary](#getlibrary) - Get Library Details
+* [deleteLibrary](#deletelibrary) - Delete Library Section
+* [getLibraryItems](#getlibraryitems) - Get Library Items
+* [refreshLibrary](#refreshlibrary) - Refresh Library
+* [getLatestLibraryItems](#getlatestlibraryitems) - Get Latest Library Items
+* [getCommonLibraryItems](#getcommonlibraryitems) - Get Common Library Items
+* [getMetadata](#getmetadata) - Get Items Metadata
+* [getMetadataChildren](#getmetadatachildren) - Get Items Children
+* [getOnDeck](#getondeck) - Get On Deck
+
+## getFileHash
+
+This resource returns hash values for local files
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->library->getFileHash('file://C:\Image.png&type=13', 4462.17);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- |
+| `url` | *string* | :heavy_check_mark: | This is the path to the local file, must be prefixed by `file://` | file://C:\Image.png&type=13 |
+| `type` | *float* | :heavy_minus_sign: | Item type | |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetFileHashResponse](../../Models/Operations/GetFileHashResponse.md)**
+
+
+## getRecentlyAdded
+
+This endpoint will return the recently added content.
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+ $response = $sdk->library->getRecentlyAdded();
+
+ if ($response->twoHundredApplicationJsonObject !== null) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetRecentlyAddedResponse](../../Models/Operations/GetRecentlyAddedResponse.md)**
+
+
+## getLibraries
+
+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).
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+ $response = $sdk->library->getLibraries();
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetLibrariesResponse](../../Models/Operations/GetLibrariesResponse.md)**
+
+
+## getLibrary
+
+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.
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->library->getLibrary(1000, Operations\IncludeDetails::Zero);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `sectionId` | *float* | :heavy_check_mark: | the Id of the library to query | 1000 |
+| `includeDetails` | [\LukeHagar\Plex_API\Models\Operations\IncludeDetails](../../Models/Operations/IncludeDetails.md) | :heavy_minus_sign: | 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.
| |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetLibraryResponse](../../Models/Operations/GetLibraryResponse.md)**
+
+
+## deleteLibrary
+
+Delate a library using a specific section
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->library->deleteLibrary(1000);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ |
+| `sectionId` | *float* | :heavy_check_mark: | the Id of the library to query | 1000 |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\DeleteLibraryResponse](../../Models/Operations/DeleteLibraryResponse.md)**
+
+
+## getLibraryItems
+
+This endpoint will return a list of library items filtered by the filter and type provided
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->library->getLibraryItems(4510.92, 760.66, 'string');
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ |
+| `sectionId` | *float* | :heavy_check_mark: | the Id of the library to query |
+| `type` | *float* | :heavy_minus_sign: | item type |
+| `filter` | *string* | :heavy_minus_sign: | the filter parameter |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetLibraryItemsResponse](../../Models/Operations/GetLibraryItemsResponse.md)**
+
+
+## refreshLibrary
+
+This endpoint Refreshes the library.
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->library->refreshLibrary(934.16);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- |
+| `sectionId` | *float* | :heavy_check_mark: | the Id of the library to refresh |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\RefreshLibraryResponse](../../Models/Operations/RefreshLibraryResponse.md)**
+
+
+## getLatestLibraryItems
+
+This endpoint will return a list of the latest library items filtered by the filter and type provided
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->library->getLatestLibraryItems(7171.54, 8015.12, 'string');
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ |
+| `sectionId` | *float* | :heavy_check_mark: | the Id of the library to query |
+| `type` | *float* | :heavy_check_mark: | item type |
+| `filter` | *string* | :heavy_minus_sign: | the filter parameter |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetLatestLibraryItemsResponse](../../Models/Operations/GetLatestLibraryItemsResponse.md)**
+
+
+## getCommonLibraryItems
+
+Represents a "Common" item. It contains only the common attributes of the items selected by the provided filter
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->library->getCommonLibraryItems(2710.37, 2760.31, 'string');
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ |
+| `sectionId` | *float* | :heavy_check_mark: | the Id of the library to query |
+| `type` | *float* | :heavy_check_mark: | item type |
+| `filter` | *string* | :heavy_minus_sign: | the filter parameter |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetCommonLibraryItemsResponse](../../Models/Operations/GetCommonLibraryItemsResponse.md)**
+
+
+## getMetadata
+
+This endpoint will return the metadata of a library item specified with the ratingKey.
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->library->getMetadata(8382.31);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- |
+| `ratingKey` | *float* | :heavy_check_mark: | the id of the library item to return the children of. |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetMetadataResponse](../../Models/Operations/GetMetadataResponse.md)**
+
+
+## getMetadataChildren
+
+This endpoint will return the children of of a library item specified with the ratingKey.
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->library->getMetadataChildren(1539.14);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- |
+| `ratingKey` | *float* | :heavy_check_mark: | the id of the library item to return the children of. |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetMetadataChildrenResponse](../../Models/Operations/GetMetadataChildrenResponse.md)**
+
+
+## getOnDeck
+
+This endpoint will return the on deck content.
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+ $response = $sdk->library->getOnDeck();
+
+ if ($response->twoHundredApplicationJsonObject !== null) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetOnDeckResponse](../../Models/Operations/GetOnDeckResponse.md)**
+
diff --git a/docs/sdks/log/README.md b/docs/sdks/log/README.md
new file mode 100644
index 0000000..8dc6590
--- /dev/null
+++ b/docs/sdks/log/README.md
@@ -0,0 +1,138 @@
+# Log
+
+
+## Overview
+
+Submit logs to the Log Handler for Plex Media Server
+
+
+### Available Operations
+
+* [logLine](#logline) - Logging a single line message.
+* [logMultiLine](#logmultiline) - Logging a multi-line message
+* [enablePaperTrail](#enablepapertrail) - Enabling Papertrail
+
+## logLine
+
+This endpoint will write a single-line log message, including a level and source to the main Plex Media Server log.
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->log->logLine(Operations\Level::Three, 'string', 'string');
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
+| `level` | [\LukeHagar\Plex_API\Models\Operations\Level](../../Models/Operations/Level.md) | :heavy_check_mark: | An integer log level to write to the PMS log with.
0: Error
1: Warning
2: Info
3: Debug
4: Verbose
| |
+| `message` | *string* | :heavy_check_mark: | The text of the message to write to the log. | |
+| `source` | *string* | :heavy_check_mark: | a string indicating the source of the message. | |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\LogLineResponse](../../Models/Operations/LogLineResponse.md)**
+
+
+## logMultiLine
+
+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.
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+ $response = $sdk->log->logMultiLine();
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\LogMultiLineResponse](../../Models/Operations/LogMultiLineResponse.md)**
+
+
+## enablePaperTrail
+
+This endpoint will enable all Plex Media Serverlogs to be sent to the Papertrail networked logging site for a period of time.
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+ $response = $sdk->log->enablePaperTrail();
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\EnablePaperTrailResponse](../../Models/Operations/EnablePaperTrailResponse.md)**
+
diff --git a/docs/sdks/media/README.md b/docs/sdks/media/README.md
new file mode 100644
index 0000000..bc1147a
--- /dev/null
+++ b/docs/sdks/media/README.md
@@ -0,0 +1,154 @@
+# Media
+
+
+## Overview
+
+API Calls interacting with Plex Media Server Media
+
+
+### Available Operations
+
+* [markPlayed](#markplayed) - Mark Media Played
+* [markUnplayed](#markunplayed) - Mark Media Unplayed
+* [updatePlayProgress](#updateplayprogress) - Update Media Play Progress
+
+## markPlayed
+
+This will mark the provided media key as Played.
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->media->markPlayed(59398);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- |
+| `key` | *float* | :heavy_check_mark: | The media key to mark as played | 59398 |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\MarkPlayedResponse](../../Models/Operations/MarkPlayedResponse.md)**
+
+
+## markUnplayed
+
+This will mark the provided media key as Unplayed.
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->media->markUnplayed(59398);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- |
+| `key` | *float* | :heavy_check_mark: | The media key to mark as Unplayed | 59398 |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\MarkUnplayedResponse](../../Models/Operations/MarkUnplayedResponse.md)**
+
+
+## updatePlayProgress
+
+This API command can be used to update the play progress of a media item.
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->media->updatePlayProgress('string', 6900.91, 'string');
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- |
+| `key` | *string* | :heavy_check_mark: | the media key |
+| `time` | *float* | :heavy_check_mark: | The time, in milliseconds, used to set the media playback progress. |
+| `state` | *string* | :heavy_check_mark: | The playback state of the media item. |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\UpdatePlayProgressResponse](../../Models/Operations/UpdatePlayProgressResponse.md)**
+
diff --git a/docs/sdks/playlists/README.md b/docs/sdks/playlists/README.md
new file mode 100644
index 0000000..15017d5
--- /dev/null
+++ b/docs/sdks/playlists/README.md
@@ -0,0 +1,461 @@
+# Playlists
+
+
+## Overview
+
+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.
+
+
+### Available Operations
+
+* [createPlaylist](#createplaylist) - Create a Playlist
+* [getPlaylists](#getplaylists) - Get All Playlists
+* [getPlaylist](#getplaylist) - Retrieve Playlist
+* [deletePlaylist](#deleteplaylist) - Deletes a Playlist
+* [updatePlaylist](#updateplaylist) - Update a Playlist
+* [getPlaylistContents](#getplaylistcontents) - Retrieve Playlist Contents
+* [clearPlaylistContents](#clearplaylistcontents) - Delete Playlist Contents
+* [addPlaylistContents](#addplaylistcontents) - Adding to a Playlist
+* [uploadPlaylist](#uploadplaylist) - Upload Playlist
+
+## createPlaylist
+
+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.
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+ $request = new Operations\CreatePlaylistRequest();
+ $request->title = 'string';
+ $request->type = Operations\Type::Photo;
+ $request->smart = Operations\Smart::One;
+ $request->uri = 'https://inborn-brochure.biz';
+ $request->playQueueID = 3686.33;;
+
+ $response = $sdk->playlists->createPlaylist($request);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
+| `$request` | [\LukeHagar\Plex_API\Models\Operations\CreatePlaylistRequest](../../Models/Operations/CreatePlaylistRequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\CreatePlaylistResponse](../../Models/Operations/CreatePlaylistResponse.md)**
+
+
+## getPlaylists
+
+Get All Playlists given the specified filters.
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->playlists->getPlaylists(Operations\PlaylistType::Audio, Operations\QueryParamSmart::Zero);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
+| `playlistType` | [\LukeHagar\Plex_API\Models\Operations\PlaylistType](../../Models/Operations/PlaylistType.md) | :heavy_minus_sign: | limit to a type of playlist. |
+| `smart` | [\LukeHagar\Plex_API\Models\Operations\QueryParamSmart](../../Models/Operations/QueryParamSmart.md) | :heavy_minus_sign: | type of playlists to return (default is all). |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetPlaylistsResponse](../../Models/Operations/GetPlaylistsResponse.md)**
+
+
+## getPlaylist
+
+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.
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->playlists->getPlaylist(4109.48);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------- | ---------------------- | ---------------------- | ---------------------- |
+| `playlistID` | *float* | :heavy_check_mark: | the ID of the playlist |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetPlaylistResponse](../../Models/Operations/GetPlaylistResponse.md)**
+
+
+## deletePlaylist
+
+This endpoint will delete a playlist
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->playlists->deletePlaylist(216.22);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------- | ---------------------- | ---------------------- | ---------------------- |
+| `playlistID` | *float* | :heavy_check_mark: | the ID of the playlist |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\DeletePlaylistResponse](../../Models/Operations/DeletePlaylistResponse.md)**
+
+
+## updatePlaylist
+
+From PMS version 1.9.1 clients can also edit playlist metadata using this endpoint as they would via `PUT /library/metadata/{playlistID}`
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->playlists->updatePlaylist(3915);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------- | ---------------------- | ---------------------- | ---------------------- |
+| `playlistID` | *float* | :heavy_check_mark: | the ID of the playlist |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\UpdatePlaylistResponse](../../Models/Operations/UpdatePlaylistResponse.md)**
+
+
+## getPlaylistContents
+
+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.
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->playlists->getPlaylistContents(5004.46, 9403.59);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| --------------------------------------- | --------------------------------------- | --------------------------------------- | --------------------------------------- |
+| `playlistID` | *float* | :heavy_check_mark: | the ID of the playlist |
+| `type` | *float* | :heavy_check_mark: | the metadata type of the item to return |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetPlaylistContentsResponse](../../Models/Operations/GetPlaylistContentsResponse.md)**
+
+
+## clearPlaylistContents
+
+Clears a playlist, only works with dumb playlists. Returns the playlist.
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->playlists->clearPlaylistContents(1893.18);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------- | ---------------------- | ---------------------- | ---------------------- |
+| `playlistID` | *float* | :heavy_check_mark: | the ID of the playlist |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\ClearPlaylistContentsResponse](../../Models/Operations/ClearPlaylistContentsResponse.md)**
+
+
+## addPlaylistContents
+
+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.
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->playlists->addPlaylistContents(8502.01, 'library://..', 123);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- |
+| `playlistID` | *float* | :heavy_check_mark: | the ID of the playlist | |
+| `uri` | *string* | :heavy_check_mark: | the content URI for the playlist | library://.. |
+| `playQueueID` | *float* | :heavy_check_mark: | the play queue to add to a playlist | 123 |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\AddPlaylistContentsResponse](../../Models/Operations/AddPlaylistContentsResponse.md)**
+
+
+## uploadPlaylist
+
+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.
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->playlists->uploadPlaylist('/home/barkley/playlist.m3u', Operations\Force::Zero);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `path` | *string* | :heavy_check_mark: | 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.
| /home/barkley/playlist.m3u |
+| `force` | [\LukeHagar\Plex_API\Models\Operations\Force](../../Models/Operations/Force.md) | :heavy_check_mark: | 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.
| |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\UploadPlaylistResponse](../../Models/Operations/UploadPlaylistResponse.md)**
+
diff --git a/docs/sdks/plexapi/README.md b/docs/sdks/plexapi/README.md
new file mode 100644
index 0000000..8ee580c
--- /dev/null
+++ b/docs/sdks/plexapi/README.md
@@ -0,0 +1,9 @@
+# PlexAPI SDK
+
+
+## Overview
+
+An Open API Spec for interacting with Plex.tv and Plex Servers
+
+### Available Operations
+
diff --git a/docs/sdks/search/README.md b/docs/sdks/search/README.md
new file mode 100644
index 0000000..492b9c9
--- /dev/null
+++ b/docs/sdks/search/README.md
@@ -0,0 +1,171 @@
+# Search
+
+
+## Overview
+
+API Calls that perform search operations with Plex Media Server
+
+
+### Available Operations
+
+* [performSearch](#performsearch) - Perform a search
+* [performVoiceSearch](#performvoicesearch) - Perform a voice search
+* [getSearchResults](#getsearchresults) - Get Search Results
+
+## performSearch
+
+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).
+ - ``: 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.
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->search->performSearch('dylan', 1516.53, 5);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `query` | *string* | :heavy_check_mark: | The query term | arnold |
+| `sectionId` | *float* | :heavy_minus_sign: | This gives context to the search, and can result in re-ordering of search result hubs | |
+| `limit` | *float* | :heavy_minus_sign: | The number of items to return per hub | 5 |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\PerformSearchResponse](../../Models/Operations/PerformSearchResponse.md)**
+
+
+## performVoiceSearch
+
+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](https://en.wikipedia.org/wiki/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.
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->search->performVoiceSearch('dead+poop', 4094.8, 5);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `query` | *string* | :heavy_check_mark: | The query term | dead+poop |
+| `sectionId` | *float* | :heavy_minus_sign: | This gives context to the search, and can result in re-ordering of search result hubs | |
+| `limit` | *float* | :heavy_minus_sign: | The number of items to return per hub | 5 |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\PerformVoiceSearchResponse](../../Models/Operations/PerformVoiceSearchResponse.md)**
+
+
+## getSearchResults
+
+This will search the database for the string provided.
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->search->getSearchResults('110');
+
+ if ($response->twoHundredApplicationJsonObject !== null) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ |
+| `query` | *string* | :heavy_check_mark: | The search query string to use | 110 |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetSearchResultsResponse](../../Models/Operations/GetSearchResultsResponse.md)**
+
diff --git a/docs/sdks/security/README.md b/docs/sdks/security/README.md
new file mode 100644
index 0000000..dd357d3
--- /dev/null
+++ b/docs/sdks/security/README.md
@@ -0,0 +1,108 @@
+# Security
+
+
+## Overview
+
+API Calls against Security for Plex Media Server
+
+
+### Available Operations
+
+* [getTransientToken](#gettransienttoken) - Get a Transient Token.
+* [getSourceConnectionInformation](#getsourceconnectioninformation) - Get Source Connection Information
+
+## getTransientToken
+
+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.
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->security->getTransientToken(Operations\QueryParamType::Delegation, Operations\Scope::All);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
+| `type` | [\LukeHagar\Plex_API\Models\Operations\QueryParamType](../../Models/Operations/QueryParamType.md) | :heavy_check_mark: | `delegation` - This is the only supported `type` parameter. |
+| `scope` | [\LukeHagar\Plex_API\Models\Operations\Scope](../../Models/Operations/Scope.md) | :heavy_check_mark: | `all` - This is the only supported `scope` parameter. |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetTransientTokenResponse](../../Models/Operations/GetTransientTokenResponse.md)**
+
+
+## getSourceConnectionInformation
+
+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.
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->security->getSourceConnectionInformation('server://client-identifier');
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- |
+| `source` | *string* | :heavy_check_mark: | The source identifier with an included prefix. | server://client-identifier |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetSourceConnectionInformationResponse](../../Models/Operations/GetSourceConnectionInformationResponse.md)**
+
diff --git a/docs/sdks/server/README.md b/docs/sdks/server/README.md
new file mode 100644
index 0000000..538f547
--- /dev/null
+++ b/docs/sdks/server/README.md
@@ -0,0 +1,331 @@
+# Server
+
+
+## Overview
+
+Operations against the Plex Media Server System.
+
+
+### Available Operations
+
+* [getServerCapabilities](#getservercapabilities) - Server Capabilities
+* [getServerPreferences](#getserverpreferences) - Get Server Preferences
+* [getAvailableClients](#getavailableclients) - Get Available Clients
+* [getDevices](#getdevices) - Get Devices
+* [getServerIdentity](#getserveridentity) - Get Server Identity
+* [getMyPlexAccount](#getmyplexaccount) - Get MyPlex Account
+* [getResizedPhoto](#getresizedphoto) - Get a Resized Photo
+* [getServerList](#getserverlist) - Get Server List
+
+## getServerCapabilities
+
+Server Capabilities
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+ $response = $sdk->server->getServerCapabilities();
+
+ if ($response->twoHundredApplicationJsonObject !== null) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetServerCapabilitiesResponse](../../Models/Operations/GetServerCapabilitiesResponse.md)**
+
+
+## getServerPreferences
+
+Get Server Preferences
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+ $response = $sdk->server->getServerPreferences();
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetServerPreferencesResponse](../../Models/Operations/GetServerPreferencesResponse.md)**
+
+
+## getAvailableClients
+
+Get Available Clients
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+ $response = $sdk->server->getAvailableClients();
+
+ if ($response->responseBodies !== null) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetAvailableClientsResponse](../../Models/Operations/GetAvailableClientsResponse.md)**
+
+
+## getDevices
+
+Get Devices
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+ $response = $sdk->server->getDevices();
+
+ if ($response->twoHundredApplicationJsonObject !== null) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetDevicesResponse](../../Models/Operations/GetDevicesResponse.md)**
+
+
+## getServerIdentity
+
+Get Server Identity
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+ $response = $sdk->server->getServerIdentity();
+
+ if ($response->twoHundredApplicationJsonObject !== null) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetServerIdentityResponse](../../Models/Operations/GetServerIdentityResponse.md)**
+
+
+## getMyPlexAccount
+
+Returns MyPlex Account Information
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+ $response = $sdk->server->getMyPlexAccount();
+
+ if ($response->twoHundredApplicationJsonObject !== null) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetMyPlexAccountResponse](../../Models/Operations/GetMyPlexAccountResponse.md)**
+
+
+## getResizedPhoto
+
+Plex's Photo transcoder is used throughout the service to serve images at specified sizes.
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+ $request = new Operations\GetResizedPhotoRequest();
+ $request->width = 110;
+ $request->height = 165;
+ $request->opacity = 643869;
+ $request->blur = 4000;
+ $request->minSize = Operations\MinSize::Zero;
+ $request->upscale = Operations\Upscale::Zero;
+ $request->url = '/library/metadata/49564/thumb/1654258204';;
+
+ $response = $sdk->server->getResizedPhoto($request);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
+| `$request` | [\LukeHagar\Plex_API\Models\Operations\GetResizedPhotoRequest](../../Models/Operations/GetResizedPhotoRequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetResizedPhotoResponse](../../Models/Operations/GetResizedPhotoResponse.md)**
+
+
+## getServerList
+
+Get Server List
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+ $response = $sdk->server->getServerList();
+
+ if ($response->twoHundredApplicationJsonObject !== null) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetServerListResponse](../../Models/Operations/GetServerListResponse.md)**
+
diff --git a/docs/sdks/sessions/README.md b/docs/sdks/sessions/README.md
new file mode 100644
index 0000000..3d47136
--- /dev/null
+++ b/docs/sdks/sessions/README.md
@@ -0,0 +1,171 @@
+# Sessions
+
+
+## Overview
+
+API Calls that perform search operations with Plex Media Server Sessions
+
+
+### Available Operations
+
+* [getSessions](#getsessions) - Get Active Sessions
+* [getSessionHistory](#getsessionhistory) - Get Session History
+* [getTranscodeSessions](#gettranscodesessions) - Get Transcode Sessions
+* [stopTranscodeSession](#stoptranscodesession) - Stop a Transcode Session
+
+## getSessions
+
+This will retrieve the "Now Playing" Information of the PMS.
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+ $response = $sdk->sessions->getSessions();
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetSessionsResponse](../../Models/Operations/GetSessionsResponse.md)**
+
+
+## getSessionHistory
+
+This will Retrieve a listing of all history views.
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+ $response = $sdk->sessions->getSessionHistory();
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetSessionHistoryResponse](../../Models/Operations/GetSessionHistoryResponse.md)**
+
+
+## getTranscodeSessions
+
+Get Transcode Sessions
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+ $response = $sdk->sessions->getTranscodeSessions();
+
+ if ($response->twoHundredApplicationJsonObject !== null) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetTranscodeSessionsResponse](../../Models/Operations/GetTranscodeSessionsResponse.md)**
+
+
+## stopTranscodeSession
+
+Stop a Transcode Session
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->sessions->stopTranscodeSession('zz7llzqlx8w9vnrsbnwhbmep');
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- |
+| `sessionKey` | *string* | :heavy_check_mark: | the Key of the transcode session to stop | zz7llzqlx8w9vnrsbnwhbmep |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\StopTranscodeSessionResponse](../../Models/Operations/StopTranscodeSessionResponse.md)**
+
diff --git a/docs/sdks/updater/README.md b/docs/sdks/updater/README.md
new file mode 100644
index 0000000..591cd06
--- /dev/null
+++ b/docs/sdks/updater/README.md
@@ -0,0 +1,145 @@
+# Updater
+
+
+## Overview
+
+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.
+
+
+### Available Operations
+
+* [getUpdateStatus](#getupdatestatus) - Querying status of updates
+* [checkForUpdates](#checkforupdates) - Checking for updates
+* [applyUpdates](#applyupdates) - Apply Updates
+
+## getUpdateStatus
+
+Querying status of updates
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+ $response = $sdk->updater->getUpdateStatus();
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetUpdateStatusResponse](../../Models/Operations/GetUpdateStatusResponse.md)**
+
+
+## checkForUpdates
+
+Checking for updates
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->updater->checkForUpdates(Operations\Download::One);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `download` | [\LukeHagar\Plex_API\Models\Operations\Download](../../Models/Operations/Download.md) | :heavy_minus_sign: | Indicate that you want to start download any updates found. |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\CheckForUpdatesResponse](../../Models/Operations/CheckForUpdatesResponse.md)**
+
+
+## applyUpdates
+
+Note that these two parameters are effectively mutually exclusive. The `tonight` parameter takes precedence and `skip` will be ignored if `tonight` is also passed
+
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+
+
+ $response = $sdk->updater->applyUpdates(Operations\Tonight::One, Operations\Skip::Zero);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `tonight` | [\LukeHagar\Plex_API\Models\Operations\Tonight](../../Models/Operations/Tonight.md) | :heavy_minus_sign: | 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 |
+| `skip` | [\LukeHagar\Plex_API\Models\Operations\Skip](../../Models/Operations/Skip.md) | :heavy_minus_sign: | Indicate that the latest version should be marked as skipped. The entry for this version will have the `state` set to `skipped`. |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\ApplyUpdatesResponse](../../Models/Operations/ApplyUpdatesResponse.md)**
+
diff --git a/docs/sdks/video/README.md b/docs/sdks/video/README.md
new file mode 100644
index 0000000..758097a
--- /dev/null
+++ b/docs/sdks/video/README.md
@@ -0,0 +1,130 @@
+# Video
+
+
+## Overview
+
+API Calls that perform operations with Plex Media Server Videos
+
+
+### Available Operations
+
+* [startUniversalTranscode](#startuniversaltranscode) - Start Universal Transcode
+* [getTimeline](#gettimeline) - Get the timeline for a media item
+
+## startUniversalTranscode
+
+Begin a Universal Transcode Session
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+ $request = new Operations\StartUniversalTranscodeRequest();
+ $request->hasMDE = 8924.99;
+ $request->path = '/etc/mail';
+ $request->mediaIndex = 9962.95;
+ $request->partIndex = 1232.82;
+ $request->protocol = 'string';
+ $request->fastSeek = 1630.75;
+ $request->directPlay = 4531.53;
+ $request->directStream = 4877.48;
+ $request->subtitleSize = 3383.01;
+ $request->subtites = 'string';
+ $request->audioBoost = 7970.18;
+ $request->location = 'string';
+ $request->mediaBufferSize = 2664.33;
+ $request->session = 'string';
+ $request->addDebugOverlay = 4930.91;
+ $request->autoAdjustQuality = 2087.17;;
+
+ $response = $sdk->video->startUniversalTranscode($request);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
+| `$request` | [\LukeHagar\Plex_API\Models\Operations\StartUniversalTranscodeRequest](../../Models/Operations/StartUniversalTranscodeRequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\StartUniversalTranscodeResponse](../../Models/Operations/StartUniversalTranscodeResponse.md)**
+
+
+## getTimeline
+
+Get the timeline for a media item
+
+### Example Usage
+
+```php
+accessToken = '';
+
+$sdk = Plex_API\PlexAPI::builder()->setSecurity($security)->build();
+
+try {
+ $request = new Operations\GetTimelineRequest();
+ $request->ratingKey = 716.56;
+ $request->key = '';
+ $request->state = Operations\State::Paused;
+ $request->hasMDE = 7574.33;
+ $request->time = 3327.51;
+ $request->duration = 7585.39;
+ $request->context = 'string';
+ $request->playQueueItemID = 1406.21;
+ $request->playBackTime = 2699.34;
+ $request->row = 3536.42;;
+
+ $response = $sdk->video->getTimeline($request);
+
+ if ($response->statusCode === 200) {
+ // handle response
+ }
+} catch (Exception $e) {
+ // handle exception
+}
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
+| `$request` | [\LukeHagar\Plex_API\Models\Operations\GetTimelineRequest](../../Models/Operations/GetTimelineRequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[?\LukeHagar\Plex_API\Models\Operations\GetTimelineResponse](../../Models/Operations/GetTimelineResponse.md)**
+
diff --git a/files.gen b/files.gen
new file mode 100644
index 0000000..9093a5f
--- /dev/null
+++ b/files.gen
@@ -0,0 +1,623 @@
+src/SDKConfiguration.php
+src/Server.php
+src/Media.php
+src/Activities.php
+src/Butler.php
+src/Hubs.php
+src/Search.php
+src/Library.php
+src/Log.php
+src/Playlists.php
+src/Security.php
+src/Sessions.php
+src/Updater.php
+src/Video.php
+src/PlexAPI.php
+src/ServerProtocol.php
+src/PlexAPIBuilder.php
+composer.json
+phpstan.neon
+src/Utils/EnumHandler.php
+src/Utils/FormMetadata.php
+src/Utils/Headers.php
+src/Utils/JSON.php
+src/Utils/MixedJSONHandler.php
+src/Utils/MultipartMetadata.php
+src/Utils/ParamsMetadata.php
+src/Utils/PathParameters.php
+src/Utils/QueryParameters.php
+src/Utils/RequestBodies.php
+src/Utils/RequestMetadata.php
+src/Utils/Security.php
+src/Utils/SecurityClient.php
+src/Utils/SecurityMetadata.php
+src/Utils/SpeakeasyMetadata.php
+src/Utils/Utils.php
+src/Models/Operations/Errors.php
+src/Models/Operations/GetServerCapabilitiesServerResponseBody.php
+src/Models/Operations/Directory.php
+src/Models/Operations/MediaContainer.php
+src/Models/Operations/GetServerCapabilitiesResponseBody.php
+src/Models/Operations/GetServerCapabilitiesResponse.php
+src/Models/Operations/GetServerPreferencesErrors.php
+src/Models/Operations/GetServerPreferencesResponseBody.php
+src/Models/Operations/GetServerPreferencesResponse.php
+src/Models/Operations/GetAvailableClientsErrors.php
+src/Models/Operations/GetAvailableClientsResponseBody.php
+src/Models/Operations/Server.php
+src/Models/Operations/GetAvailableClientsMediaContainer.php
+src/Models/Operations/ResponseBody.php
+src/Models/Operations/GetAvailableClientsResponse.php
+src/Models/Operations/GetDevicesErrors.php
+src/Models/Operations/GetDevicesServerResponseBody.php
+src/Models/Operations/Device.php
+src/Models/Operations/GetDevicesMediaContainer.php
+src/Models/Operations/GetDevicesResponseBody.php
+src/Models/Operations/GetDevicesResponse.php
+src/Models/Operations/GetServerIdentityErrors.php
+src/Models/Operations/GetServerIdentityServerResponseBody.php
+src/Models/Operations/GetServerIdentityMediaContainer.php
+src/Models/Operations/GetServerIdentityResponseBody.php
+src/Models/Operations/GetServerIdentityResponse.php
+src/Models/Operations/GetMyPlexAccountErrors.php
+src/Models/Operations/GetMyPlexAccountServerResponseBody.php
+src/Models/Operations/MyPlex.php
+src/Models/Operations/GetMyPlexAccountResponseBody.php
+src/Models/Operations/GetMyPlexAccountResponse.php
+src/Models/Operations/MinSize.php
+src/Models/Operations/Upscale.php
+src/Models/Operations/GetResizedPhotoRequest.php
+src/Models/Operations/GetResizedPhotoErrors.php
+src/Models/Operations/GetResizedPhotoResponseBody.php
+src/Models/Operations/GetResizedPhotoResponse.php
+src/Models/Operations/GetServerListErrors.php
+src/Models/Operations/GetServerListServerResponseBody.php
+src/Models/Operations/GetServerListServer.php
+src/Models/Operations/GetServerListMediaContainer.php
+src/Models/Operations/GetServerListResponseBody.php
+src/Models/Operations/GetServerListResponse.php
+src/Models/Operations/MarkPlayedRequest.php
+src/Models/Operations/MarkPlayedErrors.php
+src/Models/Operations/MarkPlayedResponseBody.php
+src/Models/Operations/MarkPlayedResponse.php
+src/Models/Operations/MarkUnplayedRequest.php
+src/Models/Operations/MarkUnplayedErrors.php
+src/Models/Operations/MarkUnplayedResponseBody.php
+src/Models/Operations/MarkUnplayedResponse.php
+src/Models/Operations/UpdatePlayProgressRequest.php
+src/Models/Operations/UpdatePlayProgressErrors.php
+src/Models/Operations/UpdatePlayProgressResponseBody.php
+src/Models/Operations/UpdatePlayProgressResponse.php
+src/Models/Operations/GetServerActivitiesErrors.php
+src/Models/Operations/GetServerActivitiesActivitiesResponseBody.php
+src/Models/Operations/Context.php
+src/Models/Operations/Activity.php
+src/Models/Operations/GetServerActivitiesMediaContainer.php
+src/Models/Operations/GetServerActivitiesResponseBody.php
+src/Models/Operations/GetServerActivitiesResponse.php
+src/Models/Operations/CancelServerActivitiesRequest.php
+src/Models/Operations/CancelServerActivitiesErrors.php
+src/Models/Operations/CancelServerActivitiesResponseBody.php
+src/Models/Operations/CancelServerActivitiesResponse.php
+src/Models/Operations/GetButlerTasksErrors.php
+src/Models/Operations/GetButlerTasksButlerResponseBody.php
+src/Models/Operations/ButlerTask.php
+src/Models/Operations/ButlerTasks.php
+src/Models/Operations/GetButlerTasksResponseBody.php
+src/Models/Operations/GetButlerTasksResponse.php
+src/Models/Operations/StartAllTasksErrors.php
+src/Models/Operations/StartAllTasksResponseBody.php
+src/Models/Operations/StartAllTasksResponse.php
+src/Models/Operations/StopAllTasksErrors.php
+src/Models/Operations/StopAllTasksResponseBody.php
+src/Models/Operations/StopAllTasksResponse.php
+src/Models/Operations/TaskName.php
+src/Models/Operations/StartTaskRequest.php
+src/Models/Operations/StartTaskErrors.php
+src/Models/Operations/StartTaskResponseBody.php
+src/Models/Operations/StartTaskResponse.php
+src/Models/Operations/PathParamTaskName.php
+src/Models/Operations/StopTaskRequest.php
+src/Models/Operations/StopTaskErrors.php
+src/Models/Operations/StopTaskResponseBody.php
+src/Models/Operations/StopTaskResponse.php
+src/Models/Operations/OnlyTransient.php
+src/Models/Operations/GetGlobalHubsRequest.php
+src/Models/Operations/GetGlobalHubsErrors.php
+src/Models/Operations/GetGlobalHubsResponseBody.php
+src/Models/Operations/GetGlobalHubsResponse.php
+src/Models/Operations/QueryParamOnlyTransient.php
+src/Models/Operations/GetLibraryHubsRequest.php
+src/Models/Operations/GetLibraryHubsErrors.php
+src/Models/Operations/GetLibraryHubsResponseBody.php
+src/Models/Operations/GetLibraryHubsResponse.php
+src/Models/Operations/PerformSearchRequest.php
+src/Models/Operations/PerformSearchErrors.php
+src/Models/Operations/PerformSearchResponseBody.php
+src/Models/Operations/PerformSearchResponse.php
+src/Models/Operations/PerformVoiceSearchRequest.php
+src/Models/Operations/PerformVoiceSearchErrors.php
+src/Models/Operations/PerformVoiceSearchResponseBody.php
+src/Models/Operations/PerformVoiceSearchResponse.php
+src/Models/Operations/GetSearchResultsRequest.php
+src/Models/Operations/GetSearchResultsErrors.php
+src/Models/Operations/GetSearchResultsSearchResponseBody.php
+src/Models/Operations/GetSearchResultsPart.php
+src/Models/Operations/GetSearchResultsMedia.php
+src/Models/Operations/GetSearchResultsGenre.php
+src/Models/Operations/GetSearchResultsDirector.php
+src/Models/Operations/GetSearchResultsWriter.php
+src/Models/Operations/GetSearchResultsCountry.php
+src/Models/Operations/GetSearchResultsRole.php
+src/Models/Operations/GetSearchResultsMetadata.php
+src/Models/Operations/Provider.php
+src/Models/Operations/GetSearchResultsMediaContainer.php
+src/Models/Operations/GetSearchResultsResponseBody.php
+src/Models/Operations/GetSearchResultsResponse.php
+src/Models/Operations/GetFileHashRequest.php
+src/Models/Operations/GetFileHashErrors.php
+src/Models/Operations/GetFileHashResponseBody.php
+src/Models/Operations/GetFileHashResponse.php
+src/Models/Operations/GetRecentlyAddedErrors.php
+src/Models/Operations/GetRecentlyAddedLibraryResponseBody.php
+src/Models/Operations/Part.php
+src/Models/Operations/Media.php
+src/Models/Operations/Genre.php
+src/Models/Operations/Director.php
+src/Models/Operations/Writer.php
+src/Models/Operations/Country.php
+src/Models/Operations/Role.php
+src/Models/Operations/Metadata.php
+src/Models/Operations/GetRecentlyAddedMediaContainer.php
+src/Models/Operations/GetRecentlyAddedResponseBody.php
+src/Models/Operations/GetRecentlyAddedResponse.php
+src/Models/Operations/GetLibrariesErrors.php
+src/Models/Operations/GetLibrariesResponseBody.php
+src/Models/Operations/GetLibrariesResponse.php
+src/Models/Operations/IncludeDetails.php
+src/Models/Operations/GetLibraryRequest.php
+src/Models/Operations/GetLibraryErrors.php
+src/Models/Operations/GetLibraryResponseBody.php
+src/Models/Operations/GetLibraryResponse.php
+src/Models/Operations/DeleteLibraryRequest.php
+src/Models/Operations/DeleteLibraryErrors.php
+src/Models/Operations/DeleteLibraryResponseBody.php
+src/Models/Operations/DeleteLibraryResponse.php
+src/Models/Operations/GetLibraryItemsRequest.php
+src/Models/Operations/GetLibraryItemsErrors.php
+src/Models/Operations/GetLibraryItemsResponseBody.php
+src/Models/Operations/GetLibraryItemsResponse.php
+src/Models/Operations/RefreshLibraryRequest.php
+src/Models/Operations/RefreshLibraryErrors.php
+src/Models/Operations/RefreshLibraryResponseBody.php
+src/Models/Operations/RefreshLibraryResponse.php
+src/Models/Operations/GetLatestLibraryItemsRequest.php
+src/Models/Operations/GetLatestLibraryItemsErrors.php
+src/Models/Operations/GetLatestLibraryItemsResponseBody.php
+src/Models/Operations/GetLatestLibraryItemsResponse.php
+src/Models/Operations/GetCommonLibraryItemsRequest.php
+src/Models/Operations/GetCommonLibraryItemsErrors.php
+src/Models/Operations/GetCommonLibraryItemsResponseBody.php
+src/Models/Operations/GetCommonLibraryItemsResponse.php
+src/Models/Operations/GetMetadataRequest.php
+src/Models/Operations/GetMetadataErrors.php
+src/Models/Operations/GetMetadataResponseBody.php
+src/Models/Operations/GetMetadataResponse.php
+src/Models/Operations/GetMetadataChildrenRequest.php
+src/Models/Operations/GetMetadataChildrenErrors.php
+src/Models/Operations/GetMetadataChildrenResponseBody.php
+src/Models/Operations/GetMetadataChildrenResponse.php
+src/Models/Operations/GetOnDeckErrors.php
+src/Models/Operations/GetOnDeckLibraryResponseBody.php
+src/Models/Operations/Stream.php
+src/Models/Operations/GetOnDeckPart.php
+src/Models/Operations/GetOnDeckMedia.php
+src/Models/Operations/Guids.php
+src/Models/Operations/GetOnDeckMetadata.php
+src/Models/Operations/GetOnDeckMediaContainer.php
+src/Models/Operations/GetOnDeckResponseBody.php
+src/Models/Operations/GetOnDeckResponse.php
+src/Models/Operations/Level.php
+src/Models/Operations/LogLineRequest.php
+src/Models/Operations/LogLineErrors.php
+src/Models/Operations/LogLineResponseBody.php
+src/Models/Operations/LogLineResponse.php
+src/Models/Operations/LogMultiLineErrors.php
+src/Models/Operations/LogMultiLineResponseBody.php
+src/Models/Operations/LogMultiLineResponse.php
+src/Models/Operations/EnablePaperTrailErrors.php
+src/Models/Operations/EnablePaperTrailResponseBody.php
+src/Models/Operations/EnablePaperTrailResponse.php
+src/Models/Operations/Type.php
+src/Models/Operations/Smart.php
+src/Models/Operations/CreatePlaylistRequest.php
+src/Models/Operations/CreatePlaylistErrors.php
+src/Models/Operations/CreatePlaylistResponseBody.php
+src/Models/Operations/CreatePlaylistResponse.php
+src/Models/Operations/PlaylistType.php
+src/Models/Operations/QueryParamSmart.php
+src/Models/Operations/GetPlaylistsRequest.php
+src/Models/Operations/GetPlaylistsErrors.php
+src/Models/Operations/GetPlaylistsResponseBody.php
+src/Models/Operations/GetPlaylistsResponse.php
+src/Models/Operations/GetPlaylistRequest.php
+src/Models/Operations/GetPlaylistErrors.php
+src/Models/Operations/GetPlaylistResponseBody.php
+src/Models/Operations/GetPlaylistResponse.php
+src/Models/Operations/DeletePlaylistRequest.php
+src/Models/Operations/DeletePlaylistErrors.php
+src/Models/Operations/DeletePlaylistResponseBody.php
+src/Models/Operations/DeletePlaylistResponse.php
+src/Models/Operations/UpdatePlaylistRequest.php
+src/Models/Operations/UpdatePlaylistErrors.php
+src/Models/Operations/UpdatePlaylistResponseBody.php
+src/Models/Operations/UpdatePlaylistResponse.php
+src/Models/Operations/GetPlaylistContentsRequest.php
+src/Models/Operations/GetPlaylistContentsErrors.php
+src/Models/Operations/GetPlaylistContentsResponseBody.php
+src/Models/Operations/GetPlaylistContentsResponse.php
+src/Models/Operations/ClearPlaylistContentsRequest.php
+src/Models/Operations/ClearPlaylistContentsErrors.php
+src/Models/Operations/ClearPlaylistContentsResponseBody.php
+src/Models/Operations/ClearPlaylistContentsResponse.php
+src/Models/Operations/AddPlaylistContentsRequest.php
+src/Models/Operations/AddPlaylistContentsErrors.php
+src/Models/Operations/AddPlaylistContentsResponseBody.php
+src/Models/Operations/AddPlaylistContentsResponse.php
+src/Models/Operations/Force.php
+src/Models/Operations/UploadPlaylistRequest.php
+src/Models/Operations/UploadPlaylistErrors.php
+src/Models/Operations/UploadPlaylistResponseBody.php
+src/Models/Operations/UploadPlaylistResponse.php
+src/Models/Operations/QueryParamType.php
+src/Models/Operations/Scope.php
+src/Models/Operations/GetTransientTokenRequest.php
+src/Models/Operations/GetTransientTokenErrors.php
+src/Models/Operations/GetTransientTokenResponseBody.php
+src/Models/Operations/GetTransientTokenResponse.php
+src/Models/Operations/GetSourceConnectionInformationRequest.php
+src/Models/Operations/GetSourceConnectionInformationErrors.php
+src/Models/Operations/GetSourceConnectionInformationResponseBody.php
+src/Models/Operations/GetSourceConnectionInformationResponse.php
+src/Models/Operations/GetSessionsErrors.php
+src/Models/Operations/GetSessionsResponseBody.php
+src/Models/Operations/GetSessionsResponse.php
+src/Models/Operations/GetSessionHistoryErrors.php
+src/Models/Operations/GetSessionHistoryResponseBody.php
+src/Models/Operations/GetSessionHistoryResponse.php
+src/Models/Operations/GetTranscodeSessionsErrors.php
+src/Models/Operations/GetTranscodeSessionsSessionsResponseBody.php
+src/Models/Operations/TranscodeSession.php
+src/Models/Operations/GetTranscodeSessionsMediaContainer.php
+src/Models/Operations/GetTranscodeSessionsResponseBody.php
+src/Models/Operations/GetTranscodeSessionsResponse.php
+src/Models/Operations/StopTranscodeSessionRequest.php
+src/Models/Operations/StopTranscodeSessionErrors.php
+src/Models/Operations/StopTranscodeSessionResponseBody.php
+src/Models/Operations/StopTranscodeSessionResponse.php
+src/Models/Operations/GetUpdateStatusErrors.php
+src/Models/Operations/GetUpdateStatusResponseBody.php
+src/Models/Operations/GetUpdateStatusResponse.php
+src/Models/Operations/Download.php
+src/Models/Operations/CheckForUpdatesRequest.php
+src/Models/Operations/CheckForUpdatesErrors.php
+src/Models/Operations/CheckForUpdatesResponseBody.php
+src/Models/Operations/CheckForUpdatesResponse.php
+src/Models/Operations/Tonight.php
+src/Models/Operations/Skip.php
+src/Models/Operations/ApplyUpdatesRequest.php
+src/Models/Operations/ApplyUpdatesErrors.php
+src/Models/Operations/ApplyUpdatesResponseBody.php
+src/Models/Operations/ApplyUpdatesResponse.php
+src/Models/Operations/StartUniversalTranscodeRequest.php
+src/Models/Operations/StartUniversalTranscodeErrors.php
+src/Models/Operations/StartUniversalTranscodeResponseBody.php
+src/Models/Operations/StartUniversalTranscodeResponse.php
+src/Models/Operations/State.php
+src/Models/Operations/GetTimelineRequest.php
+src/Models/Operations/GetTimelineErrors.php
+src/Models/Operations/GetTimelineResponseBody.php
+src/Models/Operations/GetTimelineResponse.php
+src/Models/Components/Security.php
+docs/Models/Operations/Errors.md
+docs/Models/Operations/GetServerCapabilitiesServerResponseBody.md
+docs/Models/Operations/Directory.md
+docs/Models/Operations/MediaContainer.md
+docs/Models/Operations/GetServerCapabilitiesResponseBody.md
+docs/Models/Operations/GetServerCapabilitiesResponse.md
+docs/Models/Operations/GetServerPreferencesErrors.md
+docs/Models/Operations/GetServerPreferencesResponseBody.md
+docs/Models/Operations/GetServerPreferencesResponse.md
+docs/Models/Operations/GetAvailableClientsErrors.md
+docs/Models/Operations/GetAvailableClientsResponseBody.md
+docs/Models/Operations/Server.md
+docs/Models/Operations/GetAvailableClientsMediaContainer.md
+docs/Models/Operations/ResponseBody.md
+docs/Models/Operations/GetAvailableClientsResponse.md
+docs/Models/Operations/GetDevicesErrors.md
+docs/Models/Operations/GetDevicesServerResponseBody.md
+docs/Models/Operations/Device.md
+docs/Models/Operations/GetDevicesMediaContainer.md
+docs/Models/Operations/GetDevicesResponseBody.md
+docs/Models/Operations/GetDevicesResponse.md
+docs/Models/Operations/GetServerIdentityErrors.md
+docs/Models/Operations/GetServerIdentityServerResponseBody.md
+docs/Models/Operations/GetServerIdentityMediaContainer.md
+docs/Models/Operations/GetServerIdentityResponseBody.md
+docs/Models/Operations/GetServerIdentityResponse.md
+docs/Models/Operations/GetMyPlexAccountErrors.md
+docs/Models/Operations/GetMyPlexAccountServerResponseBody.md
+docs/Models/Operations/MyPlex.md
+docs/Models/Operations/GetMyPlexAccountResponseBody.md
+docs/Models/Operations/GetMyPlexAccountResponse.md
+docs/Models/Operations/MinSize.md
+docs/Models/Operations/Upscale.md
+docs/Models/Operations/GetResizedPhotoRequest.md
+docs/Models/Operations/GetResizedPhotoErrors.md
+docs/Models/Operations/GetResizedPhotoResponseBody.md
+docs/Models/Operations/GetResizedPhotoResponse.md
+docs/Models/Operations/GetServerListErrors.md
+docs/Models/Operations/GetServerListServerResponseBody.md
+docs/Models/Operations/GetServerListServer.md
+docs/Models/Operations/GetServerListMediaContainer.md
+docs/Models/Operations/GetServerListResponseBody.md
+docs/Models/Operations/GetServerListResponse.md
+docs/Models/Operations/MarkPlayedRequest.md
+docs/Models/Operations/MarkPlayedErrors.md
+docs/Models/Operations/MarkPlayedResponseBody.md
+docs/Models/Operations/MarkPlayedResponse.md
+docs/Models/Operations/MarkUnplayedRequest.md
+docs/Models/Operations/MarkUnplayedErrors.md
+docs/Models/Operations/MarkUnplayedResponseBody.md
+docs/Models/Operations/MarkUnplayedResponse.md
+docs/Models/Operations/UpdatePlayProgressRequest.md
+docs/Models/Operations/UpdatePlayProgressErrors.md
+docs/Models/Operations/UpdatePlayProgressResponseBody.md
+docs/Models/Operations/UpdatePlayProgressResponse.md
+docs/Models/Operations/GetServerActivitiesErrors.md
+docs/Models/Operations/GetServerActivitiesActivitiesResponseBody.md
+docs/Models/Operations/Context.md
+docs/Models/Operations/Activity.md
+docs/Models/Operations/GetServerActivitiesMediaContainer.md
+docs/Models/Operations/GetServerActivitiesResponseBody.md
+docs/Models/Operations/GetServerActivitiesResponse.md
+docs/Models/Operations/CancelServerActivitiesRequest.md
+docs/Models/Operations/CancelServerActivitiesErrors.md
+docs/Models/Operations/CancelServerActivitiesResponseBody.md
+docs/Models/Operations/CancelServerActivitiesResponse.md
+docs/Models/Operations/GetButlerTasksErrors.md
+docs/Models/Operations/GetButlerTasksButlerResponseBody.md
+docs/Models/Operations/ButlerTask.md
+docs/Models/Operations/ButlerTasks.md
+docs/Models/Operations/GetButlerTasksResponseBody.md
+docs/Models/Operations/GetButlerTasksResponse.md
+docs/Models/Operations/StartAllTasksErrors.md
+docs/Models/Operations/StartAllTasksResponseBody.md
+docs/Models/Operations/StartAllTasksResponse.md
+docs/Models/Operations/StopAllTasksErrors.md
+docs/Models/Operations/StopAllTasksResponseBody.md
+docs/Models/Operations/StopAllTasksResponse.md
+docs/Models/Operations/TaskName.md
+docs/Models/Operations/StartTaskRequest.md
+docs/Models/Operations/StartTaskErrors.md
+docs/Models/Operations/StartTaskResponseBody.md
+docs/Models/Operations/StartTaskResponse.md
+docs/Models/Operations/PathParamTaskName.md
+docs/Models/Operations/StopTaskRequest.md
+docs/Models/Operations/StopTaskErrors.md
+docs/Models/Operations/StopTaskResponseBody.md
+docs/Models/Operations/StopTaskResponse.md
+docs/Models/Operations/OnlyTransient.md
+docs/Models/Operations/GetGlobalHubsRequest.md
+docs/Models/Operations/GetGlobalHubsErrors.md
+docs/Models/Operations/GetGlobalHubsResponseBody.md
+docs/Models/Operations/GetGlobalHubsResponse.md
+docs/Models/Operations/QueryParamOnlyTransient.md
+docs/Models/Operations/GetLibraryHubsRequest.md
+docs/Models/Operations/GetLibraryHubsErrors.md
+docs/Models/Operations/GetLibraryHubsResponseBody.md
+docs/Models/Operations/GetLibraryHubsResponse.md
+docs/Models/Operations/PerformSearchRequest.md
+docs/Models/Operations/PerformSearchErrors.md
+docs/Models/Operations/PerformSearchResponseBody.md
+docs/Models/Operations/PerformSearchResponse.md
+docs/Models/Operations/PerformVoiceSearchRequest.md
+docs/Models/Operations/PerformVoiceSearchErrors.md
+docs/Models/Operations/PerformVoiceSearchResponseBody.md
+docs/Models/Operations/PerformVoiceSearchResponse.md
+docs/Models/Operations/GetSearchResultsRequest.md
+docs/Models/Operations/GetSearchResultsErrors.md
+docs/Models/Operations/GetSearchResultsSearchResponseBody.md
+docs/Models/Operations/GetSearchResultsPart.md
+docs/Models/Operations/GetSearchResultsMedia.md
+docs/Models/Operations/GetSearchResultsGenre.md
+docs/Models/Operations/GetSearchResultsDirector.md
+docs/Models/Operations/GetSearchResultsWriter.md
+docs/Models/Operations/GetSearchResultsCountry.md
+docs/Models/Operations/GetSearchResultsRole.md
+docs/Models/Operations/GetSearchResultsMetadata.md
+docs/Models/Operations/Provider.md
+docs/Models/Operations/GetSearchResultsMediaContainer.md
+docs/Models/Operations/GetSearchResultsResponseBody.md
+docs/Models/Operations/GetSearchResultsResponse.md
+docs/Models/Operations/GetFileHashRequest.md
+docs/Models/Operations/GetFileHashErrors.md
+docs/Models/Operations/GetFileHashResponseBody.md
+docs/Models/Operations/GetFileHashResponse.md
+docs/Models/Operations/GetRecentlyAddedErrors.md
+docs/Models/Operations/GetRecentlyAddedLibraryResponseBody.md
+docs/Models/Operations/Part.md
+docs/Models/Operations/Media.md
+docs/Models/Operations/Genre.md
+docs/Models/Operations/Director.md
+docs/Models/Operations/Writer.md
+docs/Models/Operations/Country.md
+docs/Models/Operations/Role.md
+docs/Models/Operations/Metadata.md
+docs/Models/Operations/GetRecentlyAddedMediaContainer.md
+docs/Models/Operations/GetRecentlyAddedResponseBody.md
+docs/Models/Operations/GetRecentlyAddedResponse.md
+docs/Models/Operations/GetLibrariesErrors.md
+docs/Models/Operations/GetLibrariesResponseBody.md
+docs/Models/Operations/GetLibrariesResponse.md
+docs/Models/Operations/IncludeDetails.md
+docs/Models/Operations/GetLibraryRequest.md
+docs/Models/Operations/GetLibraryErrors.md
+docs/Models/Operations/GetLibraryResponseBody.md
+docs/Models/Operations/GetLibraryResponse.md
+docs/Models/Operations/DeleteLibraryRequest.md
+docs/Models/Operations/DeleteLibraryErrors.md
+docs/Models/Operations/DeleteLibraryResponseBody.md
+docs/Models/Operations/DeleteLibraryResponse.md
+docs/Models/Operations/GetLibraryItemsRequest.md
+docs/Models/Operations/GetLibraryItemsErrors.md
+docs/Models/Operations/GetLibraryItemsResponseBody.md
+docs/Models/Operations/GetLibraryItemsResponse.md
+docs/Models/Operations/RefreshLibraryRequest.md
+docs/Models/Operations/RefreshLibraryErrors.md
+docs/Models/Operations/RefreshLibraryResponseBody.md
+docs/Models/Operations/RefreshLibraryResponse.md
+docs/Models/Operations/GetLatestLibraryItemsRequest.md
+docs/Models/Operations/GetLatestLibraryItemsErrors.md
+docs/Models/Operations/GetLatestLibraryItemsResponseBody.md
+docs/Models/Operations/GetLatestLibraryItemsResponse.md
+docs/Models/Operations/GetCommonLibraryItemsRequest.md
+docs/Models/Operations/GetCommonLibraryItemsErrors.md
+docs/Models/Operations/GetCommonLibraryItemsResponseBody.md
+docs/Models/Operations/GetCommonLibraryItemsResponse.md
+docs/Models/Operations/GetMetadataRequest.md
+docs/Models/Operations/GetMetadataErrors.md
+docs/Models/Operations/GetMetadataResponseBody.md
+docs/Models/Operations/GetMetadataResponse.md
+docs/Models/Operations/GetMetadataChildrenRequest.md
+docs/Models/Operations/GetMetadataChildrenErrors.md
+docs/Models/Operations/GetMetadataChildrenResponseBody.md
+docs/Models/Operations/GetMetadataChildrenResponse.md
+docs/Models/Operations/GetOnDeckErrors.md
+docs/Models/Operations/GetOnDeckLibraryResponseBody.md
+docs/Models/Operations/Stream.md
+docs/Models/Operations/GetOnDeckPart.md
+docs/Models/Operations/GetOnDeckMedia.md
+docs/Models/Operations/Guids.md
+docs/Models/Operations/GetOnDeckMetadata.md
+docs/Models/Operations/GetOnDeckMediaContainer.md
+docs/Models/Operations/GetOnDeckResponseBody.md
+docs/Models/Operations/GetOnDeckResponse.md
+docs/Models/Operations/Level.md
+docs/Models/Operations/LogLineRequest.md
+docs/Models/Operations/LogLineErrors.md
+docs/Models/Operations/LogLineResponseBody.md
+docs/Models/Operations/LogLineResponse.md
+docs/Models/Operations/LogMultiLineErrors.md
+docs/Models/Operations/LogMultiLineResponseBody.md
+docs/Models/Operations/LogMultiLineResponse.md
+docs/Models/Operations/EnablePaperTrailErrors.md
+docs/Models/Operations/EnablePaperTrailResponseBody.md
+docs/Models/Operations/EnablePaperTrailResponse.md
+docs/Models/Operations/Type.md
+docs/Models/Operations/Smart.md
+docs/Models/Operations/CreatePlaylistRequest.md
+docs/Models/Operations/CreatePlaylistErrors.md
+docs/Models/Operations/CreatePlaylistResponseBody.md
+docs/Models/Operations/CreatePlaylistResponse.md
+docs/Models/Operations/PlaylistType.md
+docs/Models/Operations/QueryParamSmart.md
+docs/Models/Operations/GetPlaylistsRequest.md
+docs/Models/Operations/GetPlaylistsErrors.md
+docs/Models/Operations/GetPlaylistsResponseBody.md
+docs/Models/Operations/GetPlaylistsResponse.md
+docs/Models/Operations/GetPlaylistRequest.md
+docs/Models/Operations/GetPlaylistErrors.md
+docs/Models/Operations/GetPlaylistResponseBody.md
+docs/Models/Operations/GetPlaylistResponse.md
+docs/Models/Operations/DeletePlaylistRequest.md
+docs/Models/Operations/DeletePlaylistErrors.md
+docs/Models/Operations/DeletePlaylistResponseBody.md
+docs/Models/Operations/DeletePlaylistResponse.md
+docs/Models/Operations/UpdatePlaylistRequest.md
+docs/Models/Operations/UpdatePlaylistErrors.md
+docs/Models/Operations/UpdatePlaylistResponseBody.md
+docs/Models/Operations/UpdatePlaylistResponse.md
+docs/Models/Operations/GetPlaylistContentsRequest.md
+docs/Models/Operations/GetPlaylistContentsErrors.md
+docs/Models/Operations/GetPlaylistContentsResponseBody.md
+docs/Models/Operations/GetPlaylistContentsResponse.md
+docs/Models/Operations/ClearPlaylistContentsRequest.md
+docs/Models/Operations/ClearPlaylistContentsErrors.md
+docs/Models/Operations/ClearPlaylistContentsResponseBody.md
+docs/Models/Operations/ClearPlaylistContentsResponse.md
+docs/Models/Operations/AddPlaylistContentsRequest.md
+docs/Models/Operations/AddPlaylistContentsErrors.md
+docs/Models/Operations/AddPlaylistContentsResponseBody.md
+docs/Models/Operations/AddPlaylistContentsResponse.md
+docs/Models/Operations/Force.md
+docs/Models/Operations/UploadPlaylistRequest.md
+docs/Models/Operations/UploadPlaylistErrors.md
+docs/Models/Operations/UploadPlaylistResponseBody.md
+docs/Models/Operations/UploadPlaylistResponse.md
+docs/Models/Operations/QueryParamType.md
+docs/Models/Operations/Scope.md
+docs/Models/Operations/GetTransientTokenRequest.md
+docs/Models/Operations/GetTransientTokenErrors.md
+docs/Models/Operations/GetTransientTokenResponseBody.md
+docs/Models/Operations/GetTransientTokenResponse.md
+docs/Models/Operations/GetSourceConnectionInformationRequest.md
+docs/Models/Operations/GetSourceConnectionInformationErrors.md
+docs/Models/Operations/GetSourceConnectionInformationResponseBody.md
+docs/Models/Operations/GetSourceConnectionInformationResponse.md
+docs/Models/Operations/GetSessionsErrors.md
+docs/Models/Operations/GetSessionsResponseBody.md
+docs/Models/Operations/GetSessionsResponse.md
+docs/Models/Operations/GetSessionHistoryErrors.md
+docs/Models/Operations/GetSessionHistoryResponseBody.md
+docs/Models/Operations/GetSessionHistoryResponse.md
+docs/Models/Operations/GetTranscodeSessionsErrors.md
+docs/Models/Operations/GetTranscodeSessionsSessionsResponseBody.md
+docs/Models/Operations/TranscodeSession.md
+docs/Models/Operations/GetTranscodeSessionsMediaContainer.md
+docs/Models/Operations/GetTranscodeSessionsResponseBody.md
+docs/Models/Operations/GetTranscodeSessionsResponse.md
+docs/Models/Operations/StopTranscodeSessionRequest.md
+docs/Models/Operations/StopTranscodeSessionErrors.md
+docs/Models/Operations/StopTranscodeSessionResponseBody.md
+docs/Models/Operations/StopTranscodeSessionResponse.md
+docs/Models/Operations/GetUpdateStatusErrors.md
+docs/Models/Operations/GetUpdateStatusResponseBody.md
+docs/Models/Operations/GetUpdateStatusResponse.md
+docs/Models/Operations/Download.md
+docs/Models/Operations/CheckForUpdatesRequest.md
+docs/Models/Operations/CheckForUpdatesErrors.md
+docs/Models/Operations/CheckForUpdatesResponseBody.md
+docs/Models/Operations/CheckForUpdatesResponse.md
+docs/Models/Operations/Tonight.md
+docs/Models/Operations/Skip.md
+docs/Models/Operations/ApplyUpdatesRequest.md
+docs/Models/Operations/ApplyUpdatesErrors.md
+docs/Models/Operations/ApplyUpdatesResponseBody.md
+docs/Models/Operations/ApplyUpdatesResponse.md
+docs/Models/Operations/StartUniversalTranscodeRequest.md
+docs/Models/Operations/StartUniversalTranscodeErrors.md
+docs/Models/Operations/StartUniversalTranscodeResponseBody.md
+docs/Models/Operations/StartUniversalTranscodeResponse.md
+docs/Models/Operations/State.md
+docs/Models/Operations/GetTimelineRequest.md
+docs/Models/Operations/GetTimelineErrors.md
+docs/Models/Operations/GetTimelineResponseBody.md
+docs/Models/Operations/GetTimelineResponse.md
+docs/Models/Components/Security.md
+docs/sdks/plexapi/README.md
+docs/sdks/server/README.md
+docs/sdks/media/README.md
+docs/sdks/activities/README.md
+docs/sdks/butler/README.md
+docs/sdks/hubs/README.md
+docs/sdks/search/README.md
+docs/sdks/library/README.md
+docs/sdks/log/README.md
+docs/sdks/playlists/README.md
+docs/sdks/security/README.md
+docs/sdks/sessions/README.md
+docs/sdks/updater/README.md
+docs/sdks/video/README.md
+USAGE.md
+.gitattributes
\ No newline at end of file
diff --git a/gen.yaml b/gen.yaml
index bbf85fc..192cfcf 100644
--- a/gen.yaml
+++ b/gen.yaml
@@ -1,16 +1,28 @@
configVersion: 1.0.0
+management:
+ docChecksum: 550154cf1b4d0c237436fb18c418b5db
+ docVersion: 0.0.3
+ speakeasyVersion: 1.129.1
+ generationVersion: 2.223.3
generation:
comments: {}
sdkClassName: Plex-API
- repoURL: https://github.com/speakeasy-sdks/Personal-sample-sdk-9.git
+ repoURL: https://github.com/LukeHagar/plexphp.git
maintainOpenAPIOrder: true
usageSnippets:
optionalPropertyRendering: withExample
- useClassNamesForArrayFields: true
fixes:
nameResolutionDec2023: false
+ useClassNamesForArrayFields: true
+features:
+ php:
+ core: 3.2.1
+ flattening: 2.81.1
+ globalSecurity: 2.81.2
+ globalServerURLs: 2.82.1
+ nameOverrides: 2.81.1
php:
- version: 0.0.1
+ version: 0.1.0
imports:
option: openapi
paths:
@@ -20,7 +32,9 @@ php:
shared: Models/Components
webhooks: Models/Webhooks
inputModelSuffix: input
+ installationURL: https://github.com/LukeHagar/plexphp
maxMethodParams: 4
namespace: LukeHagar\Plex_API
outputModelSuffix: output
packageName: lukehagar/plex-api
+ repoSubDirectory: .
diff --git a/phpstan.neon b/phpstan.neon
new file mode 100644
index 0000000..244f87c
--- /dev/null
+++ b/phpstan.neon
@@ -0,0 +1,5 @@
+parameters:
+ reportUnmatchedIgnoredErrors: false
+ ignoreErrors:
+ - '#.*?class ReflectionProperty constructor expects object\|string.*?#'
+ - '#^Strict comparison using === between .*? will always evaluate to false\.$#'
\ No newline at end of file
diff --git a/src/Activities.php b/src/Activities.php
new file mode 100644
index 0000000..b8bef82
--- /dev/null
+++ b/src/Activities.php
@@ -0,0 +1,114 @@
+sdkConfiguration = $sdkConfig;
+ }
+
+ /**
+ * Get Server Activities
+ *
+ * Get Server Activities
+ *
+ * @return \LukeHagar\Plex_API\Models\Operations\GetServerActivitiesResponse
+ */
+ public function getServerActivities(
+ ): \LukeHagar\Plex_API\Models\Operations\GetServerActivitiesResponse
+ {
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/activities');
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetServerActivitiesResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->twoHundredApplicationJsonObject = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetServerActivitiesResponseBody', 'json');
+ }
+ }
+ else if ($httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->fourHundredAndOneApplicationJsonObject = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetServerActivitiesActivitiesResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Cancel Server Activities
+ *
+ * Cancel Server Activities
+ *
+ * @param string $activityUUID
+ * @return \LukeHagar\Plex_API\Models\Operations\CancelServerActivitiesResponse
+ */
+ public function cancelServerActivities(
+ string $activityUUID,
+ ): \LukeHagar\Plex_API\Models\Operations\CancelServerActivitiesResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\CancelServerActivitiesRequest();
+ $request->activityUUID = $activityUUID;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/activities/{activityUUID}', \LukeHagar\Plex_API\Models\Operations\CancelServerActivitiesRequest::class, $request);
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('DELETE', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\CancelServerActivitiesResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\CancelServerActivitiesResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+}
\ No newline at end of file
diff --git a/src/Butler.php b/src/Butler.php
new file mode 100644
index 0000000..99cd6ca
--- /dev/null
+++ b/src/Butler.php
@@ -0,0 +1,251 @@
+sdkConfiguration = $sdkConfig;
+ }
+
+ /**
+ * Get Butler tasks
+ *
+ * Returns a list of butler tasks
+ *
+ * @return \LukeHagar\Plex_API\Models\Operations\GetButlerTasksResponse
+ */
+ public function getButlerTasks(
+ ): \LukeHagar\Plex_API\Models\Operations\GetButlerTasksResponse
+ {
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/butler');
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetButlerTasksResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->twoHundredApplicationJsonObject = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetButlerTasksResponseBody', 'json');
+ }
+ }
+ else if ($httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->fourHundredAndOneApplicationJsonObject = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetButlerTasksButlerResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * 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.
+ *
+ *
+ * @return \LukeHagar\Plex_API\Models\Operations\StartAllTasksResponse
+ */
+ public function startAllTasks(
+ ): \LukeHagar\Plex_API\Models\Operations\StartAllTasksResponse
+ {
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/butler');
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('POST', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\StartAllTasksResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\StartAllTasksResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Stop all Butler tasks
+ *
+ * This endpoint will stop all currently running tasks and remove any scheduled tasks from the queue.
+ *
+ *
+ * @return \LukeHagar\Plex_API\Models\Operations\StopAllTasksResponse
+ */
+ public function stopAllTasks(
+ ): \LukeHagar\Plex_API\Models\Operations\StopAllTasksResponse
+ {
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/butler');
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('DELETE', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\StopAllTasksResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\StopAllTasksResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * 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.
+ *
+ *
+ * @param \LukeHagar\Plex_API\Models\Operations\TaskName $taskName
+ * @return \LukeHagar\Plex_API\Models\Operations\StartTaskResponse
+ */
+ public function startTask(
+ \LukeHagar\Plex_API\Models\Operations\TaskName $taskName,
+ ): \LukeHagar\Plex_API\Models\Operations\StartTaskResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\StartTaskRequest();
+ $request->taskName = $taskName;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/butler/{taskName}', \LukeHagar\Plex_API\Models\Operations\StartTaskRequest::class, $request);
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('POST', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\StartTaskResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 202 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\StartTaskResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * 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.
+ *
+ *
+ * @param \LukeHagar\Plex_API\Models\Operations\PathParamTaskName $taskName
+ * @return \LukeHagar\Plex_API\Models\Operations\StopTaskResponse
+ */
+ public function stopTask(
+ \LukeHagar\Plex_API\Models\Operations\PathParamTaskName $taskName,
+ ): \LukeHagar\Plex_API\Models\Operations\StopTaskResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\StopTaskRequest();
+ $request->taskName = $taskName;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/butler/{taskName}', \LukeHagar\Plex_API\Models\Operations\StopTaskRequest::class, $request);
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('DELETE', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\StopTaskResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400 or $httpResponse->getStatusCode() === 404) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\StopTaskResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+}
\ No newline at end of file
diff --git a/src/Hubs.php b/src/Hubs.php
new file mode 100644
index 0000000..0ee2d00
--- /dev/null
+++ b/src/Hubs.php
@@ -0,0 +1,125 @@
+sdkConfiguration = $sdkConfig;
+ }
+
+ /**
+ * Get Global Hubs
+ *
+ * Get Global Hubs filtered by the parameters provided.
+ *
+ * @param ?float $count
+ * @param ?\LukeHagar\Plex_API\Models\Operations\OnlyTransient $onlyTransient
+ * @return \LukeHagar\Plex_API\Models\Operations\GetGlobalHubsResponse
+ */
+ public function getGlobalHubs(
+ ?float $count = null,
+ ?\LukeHagar\Plex_API\Models\Operations\OnlyTransient $onlyTransient = null,
+ ): \LukeHagar\Plex_API\Models\Operations\GetGlobalHubsResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\GetGlobalHubsRequest();
+ $request->count = $count;
+ $request->onlyTransient = $onlyTransient;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/hubs');
+
+ $options = ['http_errors' => false];
+ $options = array_merge_recursive($options, Utils\Utils::getQueryParams(\LukeHagar\Plex_API\Models\Operations\GetGlobalHubsRequest::class, $request, null));
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetGlobalHubsResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetGlobalHubsResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Get library specific hubs
+ *
+ * This endpoint will return a list of library specific hubs
+ *
+ *
+ * @param float $sectionId
+ * @param ?float $count
+ * @param ?\LukeHagar\Plex_API\Models\Operations\QueryParamOnlyTransient $onlyTransient
+ * @return \LukeHagar\Plex_API\Models\Operations\GetLibraryHubsResponse
+ */
+ public function getLibraryHubs(
+ float $sectionId,
+ ?float $count = null,
+ ?\LukeHagar\Plex_API\Models\Operations\QueryParamOnlyTransient $onlyTransient = null,
+ ): \LukeHagar\Plex_API\Models\Operations\GetLibraryHubsResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\GetLibraryHubsRequest();
+ $request->sectionId = $sectionId;
+ $request->count = $count;
+ $request->onlyTransient = $onlyTransient;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/hubs/sections/{sectionId}', \LukeHagar\Plex_API\Models\Operations\GetLibraryHubsRequest::class, $request);
+
+ $options = ['http_errors' => false];
+ $options = array_merge_recursive($options, Utils\Utils::getQueryParams(\LukeHagar\Plex_API\Models\Operations\GetLibraryHubsRequest::class, $request, null));
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetLibraryHubsResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetLibraryHubsResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+}
\ No newline at end of file
diff --git a/src/Library.php b/src/Library.php
new file mode 100644
index 0000000..eaa94d5
--- /dev/null
+++ b/src/Library.php
@@ -0,0 +1,622 @@
+sdkConfiguration = $sdkConfig;
+ }
+
+ /**
+ * Get Hash Value
+ *
+ * This resource returns hash values for local files
+ *
+ * @param string $url
+ * @param ?float $type
+ * @return \LukeHagar\Plex_API\Models\Operations\GetFileHashResponse
+ */
+ public function getFileHash(
+ string $url,
+ ?float $type = null,
+ ): \LukeHagar\Plex_API\Models\Operations\GetFileHashResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\GetFileHashRequest();
+ $request->url = $url;
+ $request->type = $type;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/library/hashes');
+
+ $options = ['http_errors' => false];
+ $options = array_merge_recursive($options, Utils\Utils::getQueryParams(\LukeHagar\Plex_API\Models\Operations\GetFileHashRequest::class, $request, null));
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetFileHashResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetFileHashResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Get Recently Added
+ *
+ * This endpoint will return the recently added content.
+ *
+ *
+ * @return \LukeHagar\Plex_API\Models\Operations\GetRecentlyAddedResponse
+ */
+ public function getRecentlyAdded(
+ ): \LukeHagar\Plex_API\Models\Operations\GetRecentlyAddedResponse
+ {
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/library/recentlyAdded');
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetRecentlyAddedResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->twoHundredApplicationJsonObject = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetRecentlyAddedResponseBody', 'json');
+ }
+ }
+ else if ($httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->fourHundredAndOneApplicationJsonObject = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetRecentlyAddedLibraryResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * 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).
+ *
+ *
+ * @return \LukeHagar\Plex_API\Models\Operations\GetLibrariesResponse
+ */
+ public function getLibraries(
+ ): \LukeHagar\Plex_API\Models\Operations\GetLibrariesResponse
+ {
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/library/sections');
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetLibrariesResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetLibrariesResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * 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.
+ *
+ *
+ * @param float $sectionId
+ * @param ?\LukeHagar\Plex_API\Models\Operations\IncludeDetails $includeDetails
+ * @return \LukeHagar\Plex_API\Models\Operations\GetLibraryResponse
+ */
+ public function getLibrary(
+ float $sectionId,
+ ?\LukeHagar\Plex_API\Models\Operations\IncludeDetails $includeDetails = null,
+ ): \LukeHagar\Plex_API\Models\Operations\GetLibraryResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\GetLibraryRequest();
+ $request->sectionId = $sectionId;
+ $request->includeDetails = $includeDetails;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/library/sections/{sectionId}', \LukeHagar\Plex_API\Models\Operations\GetLibraryRequest::class, $request);
+
+ $options = ['http_errors' => false];
+ $options = array_merge_recursive($options, Utils\Utils::getQueryParams(\LukeHagar\Plex_API\Models\Operations\GetLibraryRequest::class, $request, null));
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetLibraryResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetLibraryResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Delete Library Section
+ *
+ * Delate a library using a specific section
+ *
+ * @param float $sectionId
+ * @return \LukeHagar\Plex_API\Models\Operations\DeleteLibraryResponse
+ */
+ public function deleteLibrary(
+ float $sectionId,
+ ): \LukeHagar\Plex_API\Models\Operations\DeleteLibraryResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\DeleteLibraryRequest();
+ $request->sectionId = $sectionId;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/library/sections/{sectionId}', \LukeHagar\Plex_API\Models\Operations\DeleteLibraryRequest::class, $request);
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('DELETE', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\DeleteLibraryResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\DeleteLibraryResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Get Library Items
+ *
+ * This endpoint will return a list of library items filtered by the filter and type provided
+ *
+ *
+ * @param float $sectionId
+ * @param ?float $type
+ * @param ?string $filter
+ * @return \LukeHagar\Plex_API\Models\Operations\GetLibraryItemsResponse
+ */
+ public function getLibraryItems(
+ float $sectionId,
+ ?float $type = null,
+ ?string $filter = null,
+ ): \LukeHagar\Plex_API\Models\Operations\GetLibraryItemsResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\GetLibraryItemsRequest();
+ $request->sectionId = $sectionId;
+ $request->type = $type;
+ $request->filter = $filter;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/library/sections/{sectionId}/all', \LukeHagar\Plex_API\Models\Operations\GetLibraryItemsRequest::class, $request);
+
+ $options = ['http_errors' => false];
+ $options = array_merge_recursive($options, Utils\Utils::getQueryParams(\LukeHagar\Plex_API\Models\Operations\GetLibraryItemsRequest::class, $request, null));
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetLibraryItemsResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetLibraryItemsResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Refresh Library
+ *
+ * This endpoint Refreshes the library.
+ *
+ *
+ * @param float $sectionId
+ * @return \LukeHagar\Plex_API\Models\Operations\RefreshLibraryResponse
+ */
+ public function refreshLibrary(
+ float $sectionId,
+ ): \LukeHagar\Plex_API\Models\Operations\RefreshLibraryResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\RefreshLibraryRequest();
+ $request->sectionId = $sectionId;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/library/sections/{sectionId}/refresh', \LukeHagar\Plex_API\Models\Operations\RefreshLibraryRequest::class, $request);
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\RefreshLibraryResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\RefreshLibraryResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Get Latest Library Items
+ *
+ * This endpoint will return a list of the latest library items filtered by the filter and type provided
+ *
+ *
+ * @param float $sectionId
+ * @param float $type
+ * @param ?string $filter
+ * @return \LukeHagar\Plex_API\Models\Operations\GetLatestLibraryItemsResponse
+ */
+ public function getLatestLibraryItems(
+ float $sectionId,
+ float $type,
+ ?string $filter = null,
+ ): \LukeHagar\Plex_API\Models\Operations\GetLatestLibraryItemsResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\GetLatestLibraryItemsRequest();
+ $request->sectionId = $sectionId;
+ $request->type = $type;
+ $request->filter = $filter;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/library/sections/{sectionId}/latest', \LukeHagar\Plex_API\Models\Operations\GetLatestLibraryItemsRequest::class, $request);
+
+ $options = ['http_errors' => false];
+ $options = array_merge_recursive($options, Utils\Utils::getQueryParams(\LukeHagar\Plex_API\Models\Operations\GetLatestLibraryItemsRequest::class, $request, null));
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetLatestLibraryItemsResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetLatestLibraryItemsResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Get Common Library Items
+ *
+ * Represents a "Common" item. It contains only the common attributes of the items selected by the provided filter
+ *
+ *
+ * @param float $sectionId
+ * @param float $type
+ * @param ?string $filter
+ * @return \LukeHagar\Plex_API\Models\Operations\GetCommonLibraryItemsResponse
+ */
+ public function getCommonLibraryItems(
+ float $sectionId,
+ float $type,
+ ?string $filter = null,
+ ): \LukeHagar\Plex_API\Models\Operations\GetCommonLibraryItemsResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\GetCommonLibraryItemsRequest();
+ $request->sectionId = $sectionId;
+ $request->type = $type;
+ $request->filter = $filter;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/library/sections/{sectionId}/common', \LukeHagar\Plex_API\Models\Operations\GetCommonLibraryItemsRequest::class, $request);
+
+ $options = ['http_errors' => false];
+ $options = array_merge_recursive($options, Utils\Utils::getQueryParams(\LukeHagar\Plex_API\Models\Operations\GetCommonLibraryItemsRequest::class, $request, null));
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetCommonLibraryItemsResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400 or $httpResponse->getStatusCode() === 404) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetCommonLibraryItemsResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Get Items Metadata
+ *
+ * This endpoint will return the metadata of a library item specified with the ratingKey.
+ *
+ *
+ * @param float $ratingKey
+ * @return \LukeHagar\Plex_API\Models\Operations\GetMetadataResponse
+ */
+ public function getMetadata(
+ float $ratingKey,
+ ): \LukeHagar\Plex_API\Models\Operations\GetMetadataResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\GetMetadataRequest();
+ $request->ratingKey = $ratingKey;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/library/metadata/{ratingKey}', \LukeHagar\Plex_API\Models\Operations\GetMetadataRequest::class, $request);
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetMetadataResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetMetadataResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Get Items Children
+ *
+ * This endpoint will return the children of of a library item specified with the ratingKey.
+ *
+ *
+ * @param float $ratingKey
+ * @return \LukeHagar\Plex_API\Models\Operations\GetMetadataChildrenResponse
+ */
+ public function getMetadataChildren(
+ float $ratingKey,
+ ): \LukeHagar\Plex_API\Models\Operations\GetMetadataChildrenResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\GetMetadataChildrenRequest();
+ $request->ratingKey = $ratingKey;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/library/metadata/{ratingKey}/children', \LukeHagar\Plex_API\Models\Operations\GetMetadataChildrenRequest::class, $request);
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetMetadataChildrenResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetMetadataChildrenResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Get On Deck
+ *
+ * This endpoint will return the on deck content.
+ *
+ *
+ * @return \LukeHagar\Plex_API\Models\Operations\GetOnDeckResponse
+ */
+ public function getOnDeck(
+ ): \LukeHagar\Plex_API\Models\Operations\GetOnDeckResponse
+ {
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/library/onDeck');
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetOnDeckResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->twoHundredApplicationJsonObject = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetOnDeckResponseBody', 'json');
+ }
+ }
+ else if ($httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->fourHundredAndOneApplicationJsonObject = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetOnDeckLibraryResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+}
\ No newline at end of file
diff --git a/src/Log.php b/src/Log.php
new file mode 100644
index 0000000..1c387f8
--- /dev/null
+++ b/src/Log.php
@@ -0,0 +1,158 @@
+sdkConfiguration = $sdkConfig;
+ }
+
+ /**
+ * 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.
+ *
+ *
+ * @param \LukeHagar\Plex_API\Models\Operations\Level $level
+ * @param string $message
+ * @param string $source
+ * @return \LukeHagar\Plex_API\Models\Operations\LogLineResponse
+ */
+ public function logLine(
+ \LukeHagar\Plex_API\Models\Operations\Level $level,
+ string $message,
+ string $source,
+ ): \LukeHagar\Plex_API\Models\Operations\LogLineResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\LogLineRequest();
+ $request->level = $level;
+ $request->message = $message;
+ $request->source = $source;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/log');
+
+ $options = ['http_errors' => false];
+ $options = array_merge_recursive($options, Utils\Utils::getQueryParams(\LukeHagar\Plex_API\Models\Operations\LogLineRequest::class, $request, null));
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\LogLineResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\LogLineResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * 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.
+ *
+ *
+ * @return \LukeHagar\Plex_API\Models\Operations\LogMultiLineResponse
+ */
+ public function logMultiLine(
+ ): \LukeHagar\Plex_API\Models\Operations\LogMultiLineResponse
+ {
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/log');
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('POST', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\LogMultiLineResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\LogMultiLineResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Enabling Papertrail
+ *
+ * This endpoint will enable all Plex Media Serverlogs to be sent to the Papertrail networked logging site for a period of time.
+ *
+ *
+ * @return \LukeHagar\Plex_API\Models\Operations\EnablePaperTrailResponse
+ */
+ public function enablePaperTrail(
+ ): \LukeHagar\Plex_API\Models\Operations\EnablePaperTrailResponse
+ {
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/log/networked');
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\EnablePaperTrailResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400 or $httpResponse->getStatusCode() === 403) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\EnablePaperTrailResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+}
\ No newline at end of file
diff --git a/src/Media.php b/src/Media.php
new file mode 100644
index 0000000..3206474
--- /dev/null
+++ b/src/Media.php
@@ -0,0 +1,168 @@
+sdkConfiguration = $sdkConfig;
+ }
+
+ /**
+ * Mark Media Played
+ *
+ * This will mark the provided media key as Played.
+ *
+ * @param float $key
+ * @return \LukeHagar\Plex_API\Models\Operations\MarkPlayedResponse
+ */
+ public function markPlayed(
+ float $key,
+ ): \LukeHagar\Plex_API\Models\Operations\MarkPlayedResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\MarkPlayedRequest();
+ $request->key = $key;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/:/scrobble');
+
+ $options = ['http_errors' => false];
+ $options = array_merge_recursive($options, Utils\Utils::getQueryParams(\LukeHagar\Plex_API\Models\Operations\MarkPlayedRequest::class, $request, null));
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\MarkPlayedResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\MarkPlayedResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Mark Media Unplayed
+ *
+ * This will mark the provided media key as Unplayed.
+ *
+ * @param float $key
+ * @return \LukeHagar\Plex_API\Models\Operations\MarkUnplayedResponse
+ */
+ public function markUnplayed(
+ float $key,
+ ): \LukeHagar\Plex_API\Models\Operations\MarkUnplayedResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\MarkUnplayedRequest();
+ $request->key = $key;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/:/unscrobble');
+
+ $options = ['http_errors' => false];
+ $options = array_merge_recursive($options, Utils\Utils::getQueryParams(\LukeHagar\Plex_API\Models\Operations\MarkUnplayedRequest::class, $request, null));
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\MarkUnplayedResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\MarkUnplayedResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Update Media Play Progress
+ *
+ * This API command can be used to update the play progress of a media item.
+ *
+ *
+ * @param string $key
+ * @param float $time
+ * @param string $state
+ * @return \LukeHagar\Plex_API\Models\Operations\UpdatePlayProgressResponse
+ */
+ public function updatePlayProgress(
+ string $key,
+ float $time,
+ string $state,
+ ): \LukeHagar\Plex_API\Models\Operations\UpdatePlayProgressResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\UpdatePlayProgressRequest();
+ $request->key = $key;
+ $request->time = $time;
+ $request->state = $state;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/:/progress');
+
+ $options = ['http_errors' => false];
+ $options = array_merge_recursive($options, Utils\Utils::getQueryParams(\LukeHagar\Plex_API\Models\Operations\UpdatePlayProgressRequest::class, $request, null));
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('POST', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\UpdatePlayProgressResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\UpdatePlayProgressResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+}
\ No newline at end of file
diff --git a/src/Models/Components/Security.php b/src/Models/Components/Security.php
new file mode 100644
index 0000000..95e90f0
--- /dev/null
+++ b/src/Models/Components/Security.php
@@ -0,0 +1,21 @@
+accessToken = "";
+ }
+}
diff --git a/src/Models/Operations/Activity.php b/src/Models/Operations/Activity.php
new file mode 100644
index 0000000..63ee6c5
--- /dev/null
+++ b/src/Models/Operations/Activity.php
@@ -0,0 +1,65 @@
+uuid = null;
+ $this->type = null;
+ $this->cancellable = null;
+ $this->userID = null;
+ $this->title = null;
+ $this->subtitle = null;
+ $this->progress = null;
+ $this->context = null;
+ }
+}
diff --git a/src/Models/Operations/AddPlaylistContentsErrors.php b/src/Models/Operations/AddPlaylistContentsErrors.php
new file mode 100644
index 0000000..c407049
--- /dev/null
+++ b/src/Models/Operations/AddPlaylistContentsErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/AddPlaylistContentsRequest.php b/src/Models/Operations/AddPlaylistContentsRequest.php
new file mode 100644
index 0000000..89d2455
--- /dev/null
+++ b/src/Models/Operations/AddPlaylistContentsRequest.php
@@ -0,0 +1,44 @@
+playlistID = 0;
+ $this->uri = "";
+ $this->playQueueID = 0;
+ }
+}
diff --git a/src/Models/Operations/AddPlaylistContentsResponse.php b/src/Models/Operations/AddPlaylistContentsResponse.php
new file mode 100644
index 0000000..1e63765
--- /dev/null
+++ b/src/Models/Operations/AddPlaylistContentsResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/AddPlaylistContentsResponseBody.php b/src/Models/Operations/AddPlaylistContentsResponseBody.php
new file mode 100644
index 0000000..548f861
--- /dev/null
+++ b/src/Models/Operations/AddPlaylistContentsResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/ApplyUpdatesErrors.php b/src/Models/Operations/ApplyUpdatesErrors.php
new file mode 100644
index 0000000..1735b4a
--- /dev/null
+++ b/src/Models/Operations/ApplyUpdatesErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/ApplyUpdatesRequest.php b/src/Models/Operations/ApplyUpdatesRequest.php
new file mode 100644
index 0000000..81f029e
--- /dev/null
+++ b/src/Models/Operations/ApplyUpdatesRequest.php
@@ -0,0 +1,35 @@
+ entry for this version will have the `state` set to `skipped`.
+ *
+ * @var ?\LukeHagar\Plex_API\Models\Operations\Skip $skip
+ */
+ #[SpeakeasyMetadata('queryParam:style=form,explode=true,name=skip')]
+ public ?Skip $skip = null;
+
+ public function __construct()
+ {
+ $this->tonight = null;
+ $this->skip = null;
+ }
+}
diff --git a/src/Models/Operations/ApplyUpdatesResponse.php b/src/Models/Operations/ApplyUpdatesResponse.php
new file mode 100644
index 0000000..5a8db6d
--- /dev/null
+++ b/src/Models/Operations/ApplyUpdatesResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/ApplyUpdatesResponseBody.php b/src/Models/Operations/ApplyUpdatesResponseBody.php
new file mode 100644
index 0000000..699133f
--- /dev/null
+++ b/src/Models/Operations/ApplyUpdatesResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/ButlerTask.php b/src/Models/Operations/ButlerTask.php
new file mode 100644
index 0000000..ec2576d
--- /dev/null
+++ b/src/Models/Operations/ButlerTask.php
@@ -0,0 +1,53 @@
+name = null;
+ $this->interval = null;
+ $this->scheduleRandomized = null;
+ $this->enabled = null;
+ $this->title = null;
+ $this->description = null;
+ }
+}
diff --git a/src/Models/Operations/ButlerTasks.php b/src/Models/Operations/ButlerTasks.php
new file mode 100644
index 0000000..f2e04b9
--- /dev/null
+++ b/src/Models/Operations/ButlerTasks.php
@@ -0,0 +1,28 @@
+ $butlerTask
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('ButlerTask')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $butlerTask = null;
+
+ public function __construct()
+ {
+ $this->butlerTask = null;
+ }
+}
diff --git a/src/Models/Operations/CancelServerActivitiesErrors.php b/src/Models/Operations/CancelServerActivitiesErrors.php
new file mode 100644
index 0000000..381547c
--- /dev/null
+++ b/src/Models/Operations/CancelServerActivitiesErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/CancelServerActivitiesRequest.php b/src/Models/Operations/CancelServerActivitiesRequest.php
new file mode 100644
index 0000000..46bac7f
--- /dev/null
+++ b/src/Models/Operations/CancelServerActivitiesRequest.php
@@ -0,0 +1,26 @@
+activityUUID = "";
+ }
+}
diff --git a/src/Models/Operations/CancelServerActivitiesResponse.php b/src/Models/Operations/CancelServerActivitiesResponse.php
new file mode 100644
index 0000000..51dd783
--- /dev/null
+++ b/src/Models/Operations/CancelServerActivitiesResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/CancelServerActivitiesResponseBody.php b/src/Models/Operations/CancelServerActivitiesResponseBody.php
new file mode 100644
index 0000000..9810ab7
--- /dev/null
+++ b/src/Models/Operations/CancelServerActivitiesResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/CheckForUpdatesErrors.php b/src/Models/Operations/CheckForUpdatesErrors.php
new file mode 100644
index 0000000..eacc05d
--- /dev/null
+++ b/src/Models/Operations/CheckForUpdatesErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/CheckForUpdatesRequest.php b/src/Models/Operations/CheckForUpdatesRequest.php
new file mode 100644
index 0000000..3012eaa
--- /dev/null
+++ b/src/Models/Operations/CheckForUpdatesRequest.php
@@ -0,0 +1,26 @@
+download = null;
+ }
+}
diff --git a/src/Models/Operations/CheckForUpdatesResponse.php b/src/Models/Operations/CheckForUpdatesResponse.php
new file mode 100644
index 0000000..a47ba95
--- /dev/null
+++ b/src/Models/Operations/CheckForUpdatesResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/CheckForUpdatesResponseBody.php b/src/Models/Operations/CheckForUpdatesResponseBody.php
new file mode 100644
index 0000000..c8559d0
--- /dev/null
+++ b/src/Models/Operations/CheckForUpdatesResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/ClearPlaylistContentsErrors.php b/src/Models/Operations/ClearPlaylistContentsErrors.php
new file mode 100644
index 0000000..1b2fa3a
--- /dev/null
+++ b/src/Models/Operations/ClearPlaylistContentsErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/ClearPlaylistContentsRequest.php b/src/Models/Operations/ClearPlaylistContentsRequest.php
new file mode 100644
index 0000000..386edd9
--- /dev/null
+++ b/src/Models/Operations/ClearPlaylistContentsRequest.php
@@ -0,0 +1,26 @@
+playlistID = 0;
+ }
+}
diff --git a/src/Models/Operations/ClearPlaylistContentsResponse.php b/src/Models/Operations/ClearPlaylistContentsResponse.php
new file mode 100644
index 0000000..0832708
--- /dev/null
+++ b/src/Models/Operations/ClearPlaylistContentsResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/ClearPlaylistContentsResponseBody.php b/src/Models/Operations/ClearPlaylistContentsResponseBody.php
new file mode 100644
index 0000000..d7d6dc0
--- /dev/null
+++ b/src/Models/Operations/ClearPlaylistContentsResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/Context.php b/src/Models/Operations/Context.php
new file mode 100644
index 0000000..3e4762b
--- /dev/null
+++ b/src/Models/Operations/Context.php
@@ -0,0 +1,23 @@
+librarySectionID = null;
+ }
+}
diff --git a/src/Models/Operations/Country.php b/src/Models/Operations/Country.php
new file mode 100644
index 0000000..b27ab60
--- /dev/null
+++ b/src/Models/Operations/Country.php
@@ -0,0 +1,23 @@
+tag = null;
+ }
+}
diff --git a/src/Models/Operations/CreatePlaylistErrors.php b/src/Models/Operations/CreatePlaylistErrors.php
new file mode 100644
index 0000000..ffdb445
--- /dev/null
+++ b/src/Models/Operations/CreatePlaylistErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/CreatePlaylistRequest.php b/src/Models/Operations/CreatePlaylistRequest.php
new file mode 100644
index 0000000..99b2a91
--- /dev/null
+++ b/src/Models/Operations/CreatePlaylistRequest.php
@@ -0,0 +1,62 @@
+title = "";
+ $this->type = \LukeHagar\Plex_API\Models\Operations\Type::Audio;
+ $this->smart = \LukeHagar\Plex_API\Models\Operations\Smart::Zero;
+ $this->uri = null;
+ $this->playQueueID = null;
+ }
+}
diff --git a/src/Models/Operations/CreatePlaylistResponse.php b/src/Models/Operations/CreatePlaylistResponse.php
new file mode 100644
index 0000000..140762d
--- /dev/null
+++ b/src/Models/Operations/CreatePlaylistResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/CreatePlaylistResponseBody.php b/src/Models/Operations/CreatePlaylistResponseBody.php
new file mode 100644
index 0000000..3a70bef
--- /dev/null
+++ b/src/Models/Operations/CreatePlaylistResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/DeleteLibraryErrors.php b/src/Models/Operations/DeleteLibraryErrors.php
new file mode 100644
index 0000000..534a48b
--- /dev/null
+++ b/src/Models/Operations/DeleteLibraryErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/DeleteLibraryRequest.php b/src/Models/Operations/DeleteLibraryRequest.php
new file mode 100644
index 0000000..193495c
--- /dev/null
+++ b/src/Models/Operations/DeleteLibraryRequest.php
@@ -0,0 +1,26 @@
+sectionId = 0;
+ }
+}
diff --git a/src/Models/Operations/DeleteLibraryResponse.php b/src/Models/Operations/DeleteLibraryResponse.php
new file mode 100644
index 0000000..f1253d3
--- /dev/null
+++ b/src/Models/Operations/DeleteLibraryResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/DeleteLibraryResponseBody.php b/src/Models/Operations/DeleteLibraryResponseBody.php
new file mode 100644
index 0000000..deaf157
--- /dev/null
+++ b/src/Models/Operations/DeleteLibraryResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/DeletePlaylistErrors.php b/src/Models/Operations/DeletePlaylistErrors.php
new file mode 100644
index 0000000..e28bebf
--- /dev/null
+++ b/src/Models/Operations/DeletePlaylistErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/DeletePlaylistRequest.php b/src/Models/Operations/DeletePlaylistRequest.php
new file mode 100644
index 0000000..d86b631
--- /dev/null
+++ b/src/Models/Operations/DeletePlaylistRequest.php
@@ -0,0 +1,26 @@
+playlistID = 0;
+ }
+}
diff --git a/src/Models/Operations/DeletePlaylistResponse.php b/src/Models/Operations/DeletePlaylistResponse.php
new file mode 100644
index 0000000..115e77f
--- /dev/null
+++ b/src/Models/Operations/DeletePlaylistResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/DeletePlaylistResponseBody.php b/src/Models/Operations/DeletePlaylistResponseBody.php
new file mode 100644
index 0000000..f6638b0
--- /dev/null
+++ b/src/Models/Operations/DeletePlaylistResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/Device.php b/src/Models/Operations/Device.php
new file mode 100644
index 0000000..9af902e
--- /dev/null
+++ b/src/Models/Operations/Device.php
@@ -0,0 +1,47 @@
+id = null;
+ $this->name = null;
+ $this->platform = null;
+ $this->clientIdentifier = null;
+ $this->createdAt = null;
+ }
+}
diff --git a/src/Models/Operations/Director.php b/src/Models/Operations/Director.php
new file mode 100644
index 0000000..341adab
--- /dev/null
+++ b/src/Models/Operations/Director.php
@@ -0,0 +1,23 @@
+tag = null;
+ }
+}
diff --git a/src/Models/Operations/Directory.php b/src/Models/Operations/Directory.php
new file mode 100644
index 0000000..9e2d374
--- /dev/null
+++ b/src/Models/Operations/Directory.php
@@ -0,0 +1,35 @@
+count = null;
+ $this->key = null;
+ $this->title = null;
+ }
+}
diff --git a/src/Models/Operations/Download.php b/src/Models/Operations/Download.php
new file mode 100644
index 0000000..f127999
--- /dev/null
+++ b/src/Models/Operations/Download.php
@@ -0,0 +1,17 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/EnablePaperTrailResponse.php b/src/Models/Operations/EnablePaperTrailResponse.php
new file mode 100644
index 0000000..69395fe
--- /dev/null
+++ b/src/Models/Operations/EnablePaperTrailResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/EnablePaperTrailResponseBody.php b/src/Models/Operations/EnablePaperTrailResponseBody.php
new file mode 100644
index 0000000..79b1eb0
--- /dev/null
+++ b/src/Models/Operations/EnablePaperTrailResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/Errors.php b/src/Models/Operations/Errors.php
new file mode 100644
index 0000000..0aa780a
--- /dev/null
+++ b/src/Models/Operations/Errors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/Force.php b/src/Models/Operations/Force.php
new file mode 100644
index 0000000..21e8be5
--- /dev/null
+++ b/src/Models/Operations/Force.php
@@ -0,0 +1,22 @@
+tag = null;
+ }
+}
diff --git a/src/Models/Operations/GetAvailableClientsErrors.php b/src/Models/Operations/GetAvailableClientsErrors.php
new file mode 100644
index 0000000..5048e70
--- /dev/null
+++ b/src/Models/Operations/GetAvailableClientsErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetAvailableClientsMediaContainer.php b/src/Models/Operations/GetAvailableClientsMediaContainer.php
new file mode 100644
index 0000000..1d8fee8
--- /dev/null
+++ b/src/Models/Operations/GetAvailableClientsMediaContainer.php
@@ -0,0 +1,34 @@
+ $server
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('Server')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $server = null;
+
+ public function __construct()
+ {
+ $this->size = null;
+ $this->server = null;
+ }
+}
diff --git a/src/Models/Operations/GetAvailableClientsResponse.php b/src/Models/Operations/GetAvailableClientsResponse.php
new file mode 100644
index 0000000..456c288
--- /dev/null
+++ b/src/Models/Operations/GetAvailableClientsResponse.php
@@ -0,0 +1,62 @@
+ $responseBodies
+ */
+
+ public ?array $responseBodies = null;
+
+ /**
+ * Unauthorized - Returned if the X-Plex-Token is missing from the header or query.
+ *
+ * @var ?\LukeHagar\Plex_API\Models\Operations\GetAvailableClientsResponseBody $object
+ */
+
+ public ?GetAvailableClientsResponseBody $object = null;
+
+ public function __construct()
+ {
+ $this->contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->responseBodies = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/GetAvailableClientsResponseBody.php b/src/Models/Operations/GetAvailableClientsResponseBody.php
new file mode 100644
index 0000000..456301b
--- /dev/null
+++ b/src/Models/Operations/GetAvailableClientsResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetButlerTasksButlerResponseBody.php b/src/Models/Operations/GetButlerTasksButlerResponseBody.php
new file mode 100644
index 0000000..16ff13d
--- /dev/null
+++ b/src/Models/Operations/GetButlerTasksButlerResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetButlerTasksErrors.php b/src/Models/Operations/GetButlerTasksErrors.php
new file mode 100644
index 0000000..e565558
--- /dev/null
+++ b/src/Models/Operations/GetButlerTasksErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetButlerTasksResponse.php b/src/Models/Operations/GetButlerTasksResponse.php
new file mode 100644
index 0000000..1ba4338
--- /dev/null
+++ b/src/Models/Operations/GetButlerTasksResponse.php
@@ -0,0 +1,62 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->twoHundredApplicationJsonObject = null;
+ $this->fourHundredAndOneApplicationJsonObject = null;
+ }
+}
diff --git a/src/Models/Operations/GetButlerTasksResponseBody.php b/src/Models/Operations/GetButlerTasksResponseBody.php
new file mode 100644
index 0000000..158542f
--- /dev/null
+++ b/src/Models/Operations/GetButlerTasksResponseBody.php
@@ -0,0 +1,29 @@
+butlerTasks = null;
+ }
+}
diff --git a/src/Models/Operations/GetCommonLibraryItemsErrors.php b/src/Models/Operations/GetCommonLibraryItemsErrors.php
new file mode 100644
index 0000000..bec8494
--- /dev/null
+++ b/src/Models/Operations/GetCommonLibraryItemsErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetCommonLibraryItemsRequest.php b/src/Models/Operations/GetCommonLibraryItemsRequest.php
new file mode 100644
index 0000000..bbcaaed
--- /dev/null
+++ b/src/Models/Operations/GetCommonLibraryItemsRequest.php
@@ -0,0 +1,44 @@
+sectionId = 0;
+ $this->type = 0;
+ $this->filter = null;
+ }
+}
diff --git a/src/Models/Operations/GetCommonLibraryItemsResponse.php b/src/Models/Operations/GetCommonLibraryItemsResponse.php
new file mode 100644
index 0000000..4708431
--- /dev/null
+++ b/src/Models/Operations/GetCommonLibraryItemsResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/GetCommonLibraryItemsResponseBody.php b/src/Models/Operations/GetCommonLibraryItemsResponseBody.php
new file mode 100644
index 0000000..030581f
--- /dev/null
+++ b/src/Models/Operations/GetCommonLibraryItemsResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetDevicesErrors.php b/src/Models/Operations/GetDevicesErrors.php
new file mode 100644
index 0000000..ec3418b
--- /dev/null
+++ b/src/Models/Operations/GetDevicesErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetDevicesMediaContainer.php b/src/Models/Operations/GetDevicesMediaContainer.php
new file mode 100644
index 0000000..7c99af5
--- /dev/null
+++ b/src/Models/Operations/GetDevicesMediaContainer.php
@@ -0,0 +1,40 @@
+ $device
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('Device')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $device = null;
+
+ public function __construct()
+ {
+ $this->size = null;
+ $this->identifier = null;
+ $this->device = null;
+ }
+}
diff --git a/src/Models/Operations/GetDevicesResponse.php b/src/Models/Operations/GetDevicesResponse.php
new file mode 100644
index 0000000..4c94269
--- /dev/null
+++ b/src/Models/Operations/GetDevicesResponse.php
@@ -0,0 +1,62 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->twoHundredApplicationJsonObject = null;
+ $this->fourHundredAndOneApplicationJsonObject = null;
+ }
+}
diff --git a/src/Models/Operations/GetDevicesResponseBody.php b/src/Models/Operations/GetDevicesResponseBody.php
new file mode 100644
index 0000000..8859360
--- /dev/null
+++ b/src/Models/Operations/GetDevicesResponseBody.php
@@ -0,0 +1,29 @@
+mediaContainer = null;
+ }
+}
diff --git a/src/Models/Operations/GetDevicesServerResponseBody.php b/src/Models/Operations/GetDevicesServerResponseBody.php
new file mode 100644
index 0000000..4f563b9
--- /dev/null
+++ b/src/Models/Operations/GetDevicesServerResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetFileHashErrors.php b/src/Models/Operations/GetFileHashErrors.php
new file mode 100644
index 0000000..08a4f4d
--- /dev/null
+++ b/src/Models/Operations/GetFileHashErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetFileHashRequest.php b/src/Models/Operations/GetFileHashRequest.php
new file mode 100644
index 0000000..f2bd376
--- /dev/null
+++ b/src/Models/Operations/GetFileHashRequest.php
@@ -0,0 +1,35 @@
+url = "";
+ $this->type = null;
+ }
+}
diff --git a/src/Models/Operations/GetFileHashResponse.php b/src/Models/Operations/GetFileHashResponse.php
new file mode 100644
index 0000000..46cdc1c
--- /dev/null
+++ b/src/Models/Operations/GetFileHashResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/GetFileHashResponseBody.php b/src/Models/Operations/GetFileHashResponseBody.php
new file mode 100644
index 0000000..a3f5ea4
--- /dev/null
+++ b/src/Models/Operations/GetFileHashResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetGlobalHubsErrors.php b/src/Models/Operations/GetGlobalHubsErrors.php
new file mode 100644
index 0000000..3f7280d
--- /dev/null
+++ b/src/Models/Operations/GetGlobalHubsErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetGlobalHubsRequest.php b/src/Models/Operations/GetGlobalHubsRequest.php
new file mode 100644
index 0000000..9562462
--- /dev/null
+++ b/src/Models/Operations/GetGlobalHubsRequest.php
@@ -0,0 +1,35 @@
+count = null;
+ $this->onlyTransient = null;
+ }
+}
diff --git a/src/Models/Operations/GetGlobalHubsResponse.php b/src/Models/Operations/GetGlobalHubsResponse.php
new file mode 100644
index 0000000..1695212
--- /dev/null
+++ b/src/Models/Operations/GetGlobalHubsResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/GetGlobalHubsResponseBody.php b/src/Models/Operations/GetGlobalHubsResponseBody.php
new file mode 100644
index 0000000..3469430
--- /dev/null
+++ b/src/Models/Operations/GetGlobalHubsResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetLatestLibraryItemsErrors.php b/src/Models/Operations/GetLatestLibraryItemsErrors.php
new file mode 100644
index 0000000..7aa4af4
--- /dev/null
+++ b/src/Models/Operations/GetLatestLibraryItemsErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetLatestLibraryItemsRequest.php b/src/Models/Operations/GetLatestLibraryItemsRequest.php
new file mode 100644
index 0000000..41227c7
--- /dev/null
+++ b/src/Models/Operations/GetLatestLibraryItemsRequest.php
@@ -0,0 +1,44 @@
+sectionId = 0;
+ $this->type = 0;
+ $this->filter = null;
+ }
+}
diff --git a/src/Models/Operations/GetLatestLibraryItemsResponse.php b/src/Models/Operations/GetLatestLibraryItemsResponse.php
new file mode 100644
index 0000000..79c18d5
--- /dev/null
+++ b/src/Models/Operations/GetLatestLibraryItemsResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/GetLatestLibraryItemsResponseBody.php b/src/Models/Operations/GetLatestLibraryItemsResponseBody.php
new file mode 100644
index 0000000..029cc59
--- /dev/null
+++ b/src/Models/Operations/GetLatestLibraryItemsResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetLibrariesErrors.php b/src/Models/Operations/GetLibrariesErrors.php
new file mode 100644
index 0000000..7cfe121
--- /dev/null
+++ b/src/Models/Operations/GetLibrariesErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetLibrariesResponse.php b/src/Models/Operations/GetLibrariesResponse.php
new file mode 100644
index 0000000..7027b17
--- /dev/null
+++ b/src/Models/Operations/GetLibrariesResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/GetLibrariesResponseBody.php b/src/Models/Operations/GetLibrariesResponseBody.php
new file mode 100644
index 0000000..b1ddafd
--- /dev/null
+++ b/src/Models/Operations/GetLibrariesResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetLibraryErrors.php b/src/Models/Operations/GetLibraryErrors.php
new file mode 100644
index 0000000..7f8c57f
--- /dev/null
+++ b/src/Models/Operations/GetLibraryErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetLibraryHubsErrors.php b/src/Models/Operations/GetLibraryHubsErrors.php
new file mode 100644
index 0000000..39c9c89
--- /dev/null
+++ b/src/Models/Operations/GetLibraryHubsErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetLibraryHubsRequest.php b/src/Models/Operations/GetLibraryHubsRequest.php
new file mode 100644
index 0000000..73b505c
--- /dev/null
+++ b/src/Models/Operations/GetLibraryHubsRequest.php
@@ -0,0 +1,44 @@
+sectionId = 0;
+ $this->count = null;
+ $this->onlyTransient = null;
+ }
+}
diff --git a/src/Models/Operations/GetLibraryHubsResponse.php b/src/Models/Operations/GetLibraryHubsResponse.php
new file mode 100644
index 0000000..9679806
--- /dev/null
+++ b/src/Models/Operations/GetLibraryHubsResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/GetLibraryHubsResponseBody.php b/src/Models/Operations/GetLibraryHubsResponseBody.php
new file mode 100644
index 0000000..724b75c
--- /dev/null
+++ b/src/Models/Operations/GetLibraryHubsResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetLibraryItemsErrors.php b/src/Models/Operations/GetLibraryItemsErrors.php
new file mode 100644
index 0000000..779dcbf
--- /dev/null
+++ b/src/Models/Operations/GetLibraryItemsErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetLibraryItemsRequest.php b/src/Models/Operations/GetLibraryItemsRequest.php
new file mode 100644
index 0000000..b27f8a7
--- /dev/null
+++ b/src/Models/Operations/GetLibraryItemsRequest.php
@@ -0,0 +1,44 @@
+sectionId = 0;
+ $this->type = null;
+ $this->filter = null;
+ }
+}
diff --git a/src/Models/Operations/GetLibraryItemsResponse.php b/src/Models/Operations/GetLibraryItemsResponse.php
new file mode 100644
index 0000000..5384027
--- /dev/null
+++ b/src/Models/Operations/GetLibraryItemsResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/GetLibraryItemsResponseBody.php b/src/Models/Operations/GetLibraryItemsResponseBody.php
new file mode 100644
index 0000000..5a41047
--- /dev/null
+++ b/src/Models/Operations/GetLibraryItemsResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetLibraryRequest.php b/src/Models/Operations/GetLibraryRequest.php
new file mode 100644
index 0000000..f0f6920
--- /dev/null
+++ b/src/Models/Operations/GetLibraryRequest.php
@@ -0,0 +1,38 @@
+sectionId = 0;
+ $this->includeDetails = null;
+ }
+}
diff --git a/src/Models/Operations/GetLibraryResponse.php b/src/Models/Operations/GetLibraryResponse.php
new file mode 100644
index 0000000..54e3c9b
--- /dev/null
+++ b/src/Models/Operations/GetLibraryResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/GetLibraryResponseBody.php b/src/Models/Operations/GetLibraryResponseBody.php
new file mode 100644
index 0000000..8fdc66e
--- /dev/null
+++ b/src/Models/Operations/GetLibraryResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetMetadataChildrenErrors.php b/src/Models/Operations/GetMetadataChildrenErrors.php
new file mode 100644
index 0000000..aa64f5d
--- /dev/null
+++ b/src/Models/Operations/GetMetadataChildrenErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetMetadataChildrenRequest.php b/src/Models/Operations/GetMetadataChildrenRequest.php
new file mode 100644
index 0000000..997ce26
--- /dev/null
+++ b/src/Models/Operations/GetMetadataChildrenRequest.php
@@ -0,0 +1,26 @@
+ratingKey = 0;
+ }
+}
diff --git a/src/Models/Operations/GetMetadataChildrenResponse.php b/src/Models/Operations/GetMetadataChildrenResponse.php
new file mode 100644
index 0000000..b8f07d5
--- /dev/null
+++ b/src/Models/Operations/GetMetadataChildrenResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/GetMetadataChildrenResponseBody.php b/src/Models/Operations/GetMetadataChildrenResponseBody.php
new file mode 100644
index 0000000..f1cc24e
--- /dev/null
+++ b/src/Models/Operations/GetMetadataChildrenResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetMetadataErrors.php b/src/Models/Operations/GetMetadataErrors.php
new file mode 100644
index 0000000..769879d
--- /dev/null
+++ b/src/Models/Operations/GetMetadataErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetMetadataRequest.php b/src/Models/Operations/GetMetadataRequest.php
new file mode 100644
index 0000000..2aca358
--- /dev/null
+++ b/src/Models/Operations/GetMetadataRequest.php
@@ -0,0 +1,26 @@
+ratingKey = 0;
+ }
+}
diff --git a/src/Models/Operations/GetMetadataResponse.php b/src/Models/Operations/GetMetadataResponse.php
new file mode 100644
index 0000000..2bcc623
--- /dev/null
+++ b/src/Models/Operations/GetMetadataResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/GetMetadataResponseBody.php b/src/Models/Operations/GetMetadataResponseBody.php
new file mode 100644
index 0000000..65fdc61
--- /dev/null
+++ b/src/Models/Operations/GetMetadataResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetMyPlexAccountErrors.php b/src/Models/Operations/GetMyPlexAccountErrors.php
new file mode 100644
index 0000000..ab13484
--- /dev/null
+++ b/src/Models/Operations/GetMyPlexAccountErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetMyPlexAccountResponse.php b/src/Models/Operations/GetMyPlexAccountResponse.php
new file mode 100644
index 0000000..9ae8c14
--- /dev/null
+++ b/src/Models/Operations/GetMyPlexAccountResponse.php
@@ -0,0 +1,62 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->twoHundredApplicationJsonObject = null;
+ $this->fourHundredAndOneApplicationJsonObject = null;
+ }
+}
diff --git a/src/Models/Operations/GetMyPlexAccountResponseBody.php b/src/Models/Operations/GetMyPlexAccountResponseBody.php
new file mode 100644
index 0000000..6dfc907
--- /dev/null
+++ b/src/Models/Operations/GetMyPlexAccountResponseBody.php
@@ -0,0 +1,29 @@
+myPlex = null;
+ }
+}
diff --git a/src/Models/Operations/GetMyPlexAccountServerResponseBody.php b/src/Models/Operations/GetMyPlexAccountServerResponseBody.php
new file mode 100644
index 0000000..87f85c4
--- /dev/null
+++ b/src/Models/Operations/GetMyPlexAccountServerResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetOnDeckErrors.php b/src/Models/Operations/GetOnDeckErrors.php
new file mode 100644
index 0000000..9221690
--- /dev/null
+++ b/src/Models/Operations/GetOnDeckErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetOnDeckLibraryResponseBody.php b/src/Models/Operations/GetOnDeckLibraryResponseBody.php
new file mode 100644
index 0000000..6b80214
--- /dev/null
+++ b/src/Models/Operations/GetOnDeckLibraryResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetOnDeckMedia.php b/src/Models/Operations/GetOnDeckMedia.php
new file mode 100644
index 0000000..e881159
--- /dev/null
+++ b/src/Models/Operations/GetOnDeckMedia.php
@@ -0,0 +1,112 @@
+ $part
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('Part')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $part = null;
+
+ public function __construct()
+ {
+ $this->id = null;
+ $this->duration = null;
+ $this->bitrate = null;
+ $this->width = null;
+ $this->height = null;
+ $this->aspectRatio = null;
+ $this->audioChannels = null;
+ $this->audioCodec = null;
+ $this->videoCodec = null;
+ $this->videoResolution = null;
+ $this->container = null;
+ $this->videoFrameRate = null;
+ $this->audioProfile = null;
+ $this->videoProfile = null;
+ $this->part = null;
+ }
+}
diff --git a/src/Models/Operations/GetOnDeckMediaContainer.php b/src/Models/Operations/GetOnDeckMediaContainer.php
new file mode 100644
index 0000000..851ea96
--- /dev/null
+++ b/src/Models/Operations/GetOnDeckMediaContainer.php
@@ -0,0 +1,64 @@
+ $metadata
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('Metadata')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $metadata = null;
+
+ public function __construct()
+ {
+ $this->size = null;
+ $this->allowSync = null;
+ $this->identifier = null;
+ $this->mediaTagPrefix = null;
+ $this->mediaTagVersion = null;
+ $this->mixedParents = null;
+ $this->metadata = null;
+ }
+}
diff --git a/src/Models/Operations/GetOnDeckMetadata.php b/src/Models/Operations/GetOnDeckMetadata.php
new file mode 100644
index 0000000..7396d46
--- /dev/null
+++ b/src/Models/Operations/GetOnDeckMetadata.php
@@ -0,0 +1,243 @@
+")]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?\DateTime $originallyAvailableAt = null;
+
+ #[\JMS\Serializer\Annotation\SerializedName('addedAt')]
+ #[\JMS\Serializer\Annotation\Type('float')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?float $addedAt = null;
+
+ #[\JMS\Serializer\Annotation\SerializedName('updatedAt')]
+ #[\JMS\Serializer\Annotation\Type('float')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?float $updatedAt = null;
+
+ /**
+ * $media
+ *
+ * @var ?array<\LukeHagar\Plex_API\Models\Operations\GetOnDeckMedia> $media
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('Media')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $media = null;
+
+ /**
+ * $guids
+ *
+ * @var ?array<\LukeHagar\Plex_API\Models\Operations\Guids> $guids
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('Guid')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $guids = null;
+
+ public function __construct()
+ {
+ $this->allowSync = null;
+ $this->librarySectionID = null;
+ $this->librarySectionTitle = null;
+ $this->librarySectionUUID = null;
+ $this->ratingKey = null;
+ $this->key = null;
+ $this->parentRatingKey = null;
+ $this->grandparentRatingKey = null;
+ $this->guid = null;
+ $this->parentGuid = null;
+ $this->grandparentGuid = null;
+ $this->type = null;
+ $this->title = null;
+ $this->grandparentKey = null;
+ $this->parentKey = null;
+ $this->librarySectionKey = null;
+ $this->grandparentTitle = null;
+ $this->parentTitle = null;
+ $this->contentRating = null;
+ $this->summary = null;
+ $this->index = null;
+ $this->parentIndex = null;
+ $this->lastViewedAt = null;
+ $this->year = null;
+ $this->thumb = null;
+ $this->art = null;
+ $this->parentThumb = null;
+ $this->grandparentThumb = null;
+ $this->grandparentArt = null;
+ $this->grandparentTheme = null;
+ $this->duration = null;
+ $this->originallyAvailableAt = null;
+ $this->addedAt = null;
+ $this->updatedAt = null;
+ $this->media = null;
+ $this->guids = null;
+ }
+}
diff --git a/src/Models/Operations/GetOnDeckPart.php b/src/Models/Operations/GetOnDeckPart.php
new file mode 100644
index 0000000..893a7be
--- /dev/null
+++ b/src/Models/Operations/GetOnDeckPart.php
@@ -0,0 +1,76 @@
+ $stream
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('Stream')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $stream = null;
+
+ public function __construct()
+ {
+ $this->id = null;
+ $this->key = null;
+ $this->duration = null;
+ $this->file = null;
+ $this->size = null;
+ $this->audioProfile = null;
+ $this->container = null;
+ $this->videoProfile = null;
+ $this->stream = null;
+ }
+}
diff --git a/src/Models/Operations/GetOnDeckResponse.php b/src/Models/Operations/GetOnDeckResponse.php
new file mode 100644
index 0000000..c9a22cc
--- /dev/null
+++ b/src/Models/Operations/GetOnDeckResponse.php
@@ -0,0 +1,62 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->twoHundredApplicationJsonObject = null;
+ $this->fourHundredAndOneApplicationJsonObject = null;
+ }
+}
diff --git a/src/Models/Operations/GetOnDeckResponseBody.php b/src/Models/Operations/GetOnDeckResponseBody.php
new file mode 100644
index 0000000..da7fd88
--- /dev/null
+++ b/src/Models/Operations/GetOnDeckResponseBody.php
@@ -0,0 +1,29 @@
+mediaContainer = null;
+ }
+}
diff --git a/src/Models/Operations/GetPlaylistContentsErrors.php b/src/Models/Operations/GetPlaylistContentsErrors.php
new file mode 100644
index 0000000..7e93a10
--- /dev/null
+++ b/src/Models/Operations/GetPlaylistContentsErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetPlaylistContentsRequest.php b/src/Models/Operations/GetPlaylistContentsRequest.php
new file mode 100644
index 0000000..7f49589
--- /dev/null
+++ b/src/Models/Operations/GetPlaylistContentsRequest.php
@@ -0,0 +1,35 @@
+playlistID = 0;
+ $this->type = 0;
+ }
+}
diff --git a/src/Models/Operations/GetPlaylistContentsResponse.php b/src/Models/Operations/GetPlaylistContentsResponse.php
new file mode 100644
index 0000000..465d3de
--- /dev/null
+++ b/src/Models/Operations/GetPlaylistContentsResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/GetPlaylistContentsResponseBody.php b/src/Models/Operations/GetPlaylistContentsResponseBody.php
new file mode 100644
index 0000000..47d3fde
--- /dev/null
+++ b/src/Models/Operations/GetPlaylistContentsResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetPlaylistErrors.php b/src/Models/Operations/GetPlaylistErrors.php
new file mode 100644
index 0000000..5f4a844
--- /dev/null
+++ b/src/Models/Operations/GetPlaylistErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetPlaylistRequest.php b/src/Models/Operations/GetPlaylistRequest.php
new file mode 100644
index 0000000..e22de18
--- /dev/null
+++ b/src/Models/Operations/GetPlaylistRequest.php
@@ -0,0 +1,26 @@
+playlistID = 0;
+ }
+}
diff --git a/src/Models/Operations/GetPlaylistResponse.php b/src/Models/Operations/GetPlaylistResponse.php
new file mode 100644
index 0000000..c3b36d9
--- /dev/null
+++ b/src/Models/Operations/GetPlaylistResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/GetPlaylistResponseBody.php b/src/Models/Operations/GetPlaylistResponseBody.php
new file mode 100644
index 0000000..0fcf6d1
--- /dev/null
+++ b/src/Models/Operations/GetPlaylistResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetPlaylistsErrors.php b/src/Models/Operations/GetPlaylistsErrors.php
new file mode 100644
index 0000000..a99b33a
--- /dev/null
+++ b/src/Models/Operations/GetPlaylistsErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetPlaylistsRequest.php b/src/Models/Operations/GetPlaylistsRequest.php
new file mode 100644
index 0000000..505a3c1
--- /dev/null
+++ b/src/Models/Operations/GetPlaylistsRequest.php
@@ -0,0 +1,35 @@
+playlistType = null;
+ $this->smart = null;
+ }
+}
diff --git a/src/Models/Operations/GetPlaylistsResponse.php b/src/Models/Operations/GetPlaylistsResponse.php
new file mode 100644
index 0000000..4c837bb
--- /dev/null
+++ b/src/Models/Operations/GetPlaylistsResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/GetPlaylistsResponseBody.php b/src/Models/Operations/GetPlaylistsResponseBody.php
new file mode 100644
index 0000000..99ebc39
--- /dev/null
+++ b/src/Models/Operations/GetPlaylistsResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetRecentlyAddedErrors.php b/src/Models/Operations/GetRecentlyAddedErrors.php
new file mode 100644
index 0000000..e1d0fc4
--- /dev/null
+++ b/src/Models/Operations/GetRecentlyAddedErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetRecentlyAddedLibraryResponseBody.php b/src/Models/Operations/GetRecentlyAddedLibraryResponseBody.php
new file mode 100644
index 0000000..faf56ea
--- /dev/null
+++ b/src/Models/Operations/GetRecentlyAddedLibraryResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetRecentlyAddedMediaContainer.php b/src/Models/Operations/GetRecentlyAddedMediaContainer.php
new file mode 100644
index 0000000..becc86b
--- /dev/null
+++ b/src/Models/Operations/GetRecentlyAddedMediaContainer.php
@@ -0,0 +1,64 @@
+ $metadata
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('Metadata')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $metadata = null;
+
+ public function __construct()
+ {
+ $this->size = null;
+ $this->allowSync = null;
+ $this->identifier = null;
+ $this->mediaTagPrefix = null;
+ $this->mediaTagVersion = null;
+ $this->mixedParents = null;
+ $this->metadata = null;
+ }
+}
diff --git a/src/Models/Operations/GetRecentlyAddedResponse.php b/src/Models/Operations/GetRecentlyAddedResponse.php
new file mode 100644
index 0000000..7c9af86
--- /dev/null
+++ b/src/Models/Operations/GetRecentlyAddedResponse.php
@@ -0,0 +1,62 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->twoHundredApplicationJsonObject = null;
+ $this->fourHundredAndOneApplicationJsonObject = null;
+ }
+}
diff --git a/src/Models/Operations/GetRecentlyAddedResponseBody.php b/src/Models/Operations/GetRecentlyAddedResponseBody.php
new file mode 100644
index 0000000..01fff29
--- /dev/null
+++ b/src/Models/Operations/GetRecentlyAddedResponseBody.php
@@ -0,0 +1,29 @@
+mediaContainer = null;
+ }
+}
diff --git a/src/Models/Operations/GetResizedPhotoErrors.php b/src/Models/Operations/GetResizedPhotoErrors.php
new file mode 100644
index 0000000..942b844
--- /dev/null
+++ b/src/Models/Operations/GetResizedPhotoErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetResizedPhotoRequest.php b/src/Models/Operations/GetResizedPhotoRequest.php
new file mode 100644
index 0000000..ec0f7d3
--- /dev/null
+++ b/src/Models/Operations/GetResizedPhotoRequest.php
@@ -0,0 +1,80 @@
+width = 0;
+ $this->height = 0;
+ $this->opacity = 0;
+ $this->blur = 0;
+ $this->minSize = \LukeHagar\Plex_API\Models\Operations\MinSize::Zero;
+ $this->upscale = \LukeHagar\Plex_API\Models\Operations\Upscale::Zero;
+ $this->url = "";
+ }
+}
diff --git a/src/Models/Operations/GetResizedPhotoResponse.php b/src/Models/Operations/GetResizedPhotoResponse.php
new file mode 100644
index 0000000..577fb4e
--- /dev/null
+++ b/src/Models/Operations/GetResizedPhotoResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/GetResizedPhotoResponseBody.php b/src/Models/Operations/GetResizedPhotoResponseBody.php
new file mode 100644
index 0000000..0d5c8b6
--- /dev/null
+++ b/src/Models/Operations/GetResizedPhotoResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetSearchResultsCountry.php b/src/Models/Operations/GetSearchResultsCountry.php
new file mode 100644
index 0000000..11c4acd
--- /dev/null
+++ b/src/Models/Operations/GetSearchResultsCountry.php
@@ -0,0 +1,23 @@
+tag = null;
+ }
+}
diff --git a/src/Models/Operations/GetSearchResultsDirector.php b/src/Models/Operations/GetSearchResultsDirector.php
new file mode 100644
index 0000000..8b6c362
--- /dev/null
+++ b/src/Models/Operations/GetSearchResultsDirector.php
@@ -0,0 +1,23 @@
+tag = null;
+ }
+}
diff --git a/src/Models/Operations/GetSearchResultsErrors.php b/src/Models/Operations/GetSearchResultsErrors.php
new file mode 100644
index 0000000..91643c8
--- /dev/null
+++ b/src/Models/Operations/GetSearchResultsErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetSearchResultsGenre.php b/src/Models/Operations/GetSearchResultsGenre.php
new file mode 100644
index 0000000..ac874ac
--- /dev/null
+++ b/src/Models/Operations/GetSearchResultsGenre.php
@@ -0,0 +1,23 @@
+tag = null;
+ }
+}
diff --git a/src/Models/Operations/GetSearchResultsMedia.php b/src/Models/Operations/GetSearchResultsMedia.php
new file mode 100644
index 0000000..fda9357
--- /dev/null
+++ b/src/Models/Operations/GetSearchResultsMedia.php
@@ -0,0 +1,112 @@
+ $part
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('Part')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $part = null;
+
+ public function __construct()
+ {
+ $this->id = null;
+ $this->duration = null;
+ $this->bitrate = null;
+ $this->width = null;
+ $this->height = null;
+ $this->aspectRatio = null;
+ $this->audioChannels = null;
+ $this->audioCodec = null;
+ $this->videoCodec = null;
+ $this->videoResolution = null;
+ $this->container = null;
+ $this->videoFrameRate = null;
+ $this->audioProfile = null;
+ $this->videoProfile = null;
+ $this->part = null;
+ }
+}
diff --git a/src/Models/Operations/GetSearchResultsMediaContainer.php b/src/Models/Operations/GetSearchResultsMediaContainer.php
new file mode 100644
index 0000000..b72b6b0
--- /dev/null
+++ b/src/Models/Operations/GetSearchResultsMediaContainer.php
@@ -0,0 +1,63 @@
+ $metadata
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('Metadata')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $metadata = null;
+
+ /**
+ * $provider
+ *
+ * @var ?array<\LukeHagar\Plex_API\Models\Operations\Provider> $provider
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('Provider')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $provider = null;
+
+ public function __construct()
+ {
+ $this->size = null;
+ $this->identifier = null;
+ $this->mediaTagPrefix = null;
+ $this->mediaTagVersion = null;
+ $this->metadata = null;
+ $this->provider = null;
+ }
+}
diff --git a/src/Models/Operations/GetSearchResultsMetadata.php b/src/Models/Operations/GetSearchResultsMetadata.php
new file mode 100644
index 0000000..804f515
--- /dev/null
+++ b/src/Models/Operations/GetSearchResultsMetadata.php
@@ -0,0 +1,251 @@
+")]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?\DateTime $originallyAvailableAt = null;
+
+ #[\JMS\Serializer\Annotation\SerializedName('addedAt')]
+ #[\JMS\Serializer\Annotation\Type('float')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?float $addedAt = null;
+
+ #[\JMS\Serializer\Annotation\SerializedName('updatedAt')]
+ #[\JMS\Serializer\Annotation\Type('float')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?float $updatedAt = null;
+
+ #[\JMS\Serializer\Annotation\SerializedName('audienceRatingImage')]
+ #[\JMS\Serializer\Annotation\Type('string')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?string $audienceRatingImage = null;
+
+ #[\JMS\Serializer\Annotation\SerializedName('chapterSource')]
+ #[\JMS\Serializer\Annotation\Type('string')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?string $chapterSource = null;
+
+ #[\JMS\Serializer\Annotation\SerializedName('primaryExtraKey')]
+ #[\JMS\Serializer\Annotation\Type('string')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?string $primaryExtraKey = null;
+
+ #[\JMS\Serializer\Annotation\SerializedName('ratingImage')]
+ #[\JMS\Serializer\Annotation\Type('string')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?string $ratingImage = null;
+
+ /**
+ * $media
+ *
+ * @var ?array<\LukeHagar\Plex_API\Models\Operations\GetSearchResultsMedia> $media
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('Media')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $media = null;
+
+ /**
+ * $genre
+ *
+ * @var ?array<\LukeHagar\Plex_API\Models\Operations\GetSearchResultsGenre> $genre
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('Genre')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $genre = null;
+
+ /**
+ * $director
+ *
+ * @var ?array<\LukeHagar\Plex_API\Models\Operations\GetSearchResultsDirector> $director
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('Director')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $director = null;
+
+ /**
+ * $writer
+ *
+ * @var ?array<\LukeHagar\Plex_API\Models\Operations\GetSearchResultsWriter> $writer
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('Writer')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $writer = null;
+
+ /**
+ * $country
+ *
+ * @var ?array<\LukeHagar\Plex_API\Models\Operations\GetSearchResultsCountry> $country
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('Country')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $country = null;
+
+ /**
+ * $role
+ *
+ * @var ?array<\LukeHagar\Plex_API\Models\Operations\GetSearchResultsRole> $role
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('Role')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $role = null;
+
+ public function __construct()
+ {
+ $this->allowSync = null;
+ $this->librarySectionID = null;
+ $this->librarySectionTitle = null;
+ $this->librarySectionUUID = null;
+ $this->personal = null;
+ $this->sourceTitle = null;
+ $this->ratingKey = null;
+ $this->key = null;
+ $this->guid = null;
+ $this->studio = null;
+ $this->type = null;
+ $this->title = null;
+ $this->contentRating = null;
+ $this->summary = null;
+ $this->rating = null;
+ $this->audienceRating = null;
+ $this->year = null;
+ $this->tagline = null;
+ $this->thumb = null;
+ $this->art = null;
+ $this->duration = null;
+ $this->originallyAvailableAt = null;
+ $this->addedAt = null;
+ $this->updatedAt = null;
+ $this->audienceRatingImage = null;
+ $this->chapterSource = null;
+ $this->primaryExtraKey = null;
+ $this->ratingImage = null;
+ $this->media = null;
+ $this->genre = null;
+ $this->director = null;
+ $this->writer = null;
+ $this->country = null;
+ $this->role = null;
+ }
+}
diff --git a/src/Models/Operations/GetSearchResultsPart.php b/src/Models/Operations/GetSearchResultsPart.php
new file mode 100644
index 0000000..7e86f19
--- /dev/null
+++ b/src/Models/Operations/GetSearchResultsPart.php
@@ -0,0 +1,65 @@
+id = null;
+ $this->key = null;
+ $this->duration = null;
+ $this->file = null;
+ $this->size = null;
+ $this->audioProfile = null;
+ $this->container = null;
+ $this->videoProfile = null;
+ }
+}
diff --git a/src/Models/Operations/GetSearchResultsRequest.php b/src/Models/Operations/GetSearchResultsRequest.php
new file mode 100644
index 0000000..861bf92
--- /dev/null
+++ b/src/Models/Operations/GetSearchResultsRequest.php
@@ -0,0 +1,26 @@
+query = "";
+ }
+}
diff --git a/src/Models/Operations/GetSearchResultsResponse.php b/src/Models/Operations/GetSearchResultsResponse.php
new file mode 100644
index 0000000..06f6847
--- /dev/null
+++ b/src/Models/Operations/GetSearchResultsResponse.php
@@ -0,0 +1,62 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->twoHundredApplicationJsonObject = null;
+ $this->fourHundredAndOneApplicationJsonObject = null;
+ }
+}
diff --git a/src/Models/Operations/GetSearchResultsResponseBody.php b/src/Models/Operations/GetSearchResultsResponseBody.php
new file mode 100644
index 0000000..ba648ee
--- /dev/null
+++ b/src/Models/Operations/GetSearchResultsResponseBody.php
@@ -0,0 +1,29 @@
+mediaContainer = null;
+ }
+}
diff --git a/src/Models/Operations/GetSearchResultsRole.php b/src/Models/Operations/GetSearchResultsRole.php
new file mode 100644
index 0000000..9d9818c
--- /dev/null
+++ b/src/Models/Operations/GetSearchResultsRole.php
@@ -0,0 +1,23 @@
+tag = null;
+ }
+}
diff --git a/src/Models/Operations/GetSearchResultsSearchResponseBody.php b/src/Models/Operations/GetSearchResultsSearchResponseBody.php
new file mode 100644
index 0000000..6820fac
--- /dev/null
+++ b/src/Models/Operations/GetSearchResultsSearchResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetSearchResultsWriter.php b/src/Models/Operations/GetSearchResultsWriter.php
new file mode 100644
index 0000000..2628aa2
--- /dev/null
+++ b/src/Models/Operations/GetSearchResultsWriter.php
@@ -0,0 +1,23 @@
+tag = null;
+ }
+}
diff --git a/src/Models/Operations/GetServerActivitiesActivitiesResponseBody.php b/src/Models/Operations/GetServerActivitiesActivitiesResponseBody.php
new file mode 100644
index 0000000..7962ecd
--- /dev/null
+++ b/src/Models/Operations/GetServerActivitiesActivitiesResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetServerActivitiesErrors.php b/src/Models/Operations/GetServerActivitiesErrors.php
new file mode 100644
index 0000000..ab76b85
--- /dev/null
+++ b/src/Models/Operations/GetServerActivitiesErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetServerActivitiesMediaContainer.php b/src/Models/Operations/GetServerActivitiesMediaContainer.php
new file mode 100644
index 0000000..d5f55e3
--- /dev/null
+++ b/src/Models/Operations/GetServerActivitiesMediaContainer.php
@@ -0,0 +1,34 @@
+ $activity
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('Activity')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $activity = null;
+
+ public function __construct()
+ {
+ $this->size = null;
+ $this->activity = null;
+ }
+}
diff --git a/src/Models/Operations/GetServerActivitiesResponse.php b/src/Models/Operations/GetServerActivitiesResponse.php
new file mode 100644
index 0000000..5dba689
--- /dev/null
+++ b/src/Models/Operations/GetServerActivitiesResponse.php
@@ -0,0 +1,62 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->twoHundredApplicationJsonObject = null;
+ $this->fourHundredAndOneApplicationJsonObject = null;
+ }
+}
diff --git a/src/Models/Operations/GetServerActivitiesResponseBody.php b/src/Models/Operations/GetServerActivitiesResponseBody.php
new file mode 100644
index 0000000..28ae02d
--- /dev/null
+++ b/src/Models/Operations/GetServerActivitiesResponseBody.php
@@ -0,0 +1,29 @@
+mediaContainer = null;
+ }
+}
diff --git a/src/Models/Operations/GetServerCapabilitiesResponse.php b/src/Models/Operations/GetServerCapabilitiesResponse.php
new file mode 100644
index 0000000..7a5ec6f
--- /dev/null
+++ b/src/Models/Operations/GetServerCapabilitiesResponse.php
@@ -0,0 +1,62 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->twoHundredApplicationJsonObject = null;
+ $this->fourHundredAndOneApplicationJsonObject = null;
+ }
+}
diff --git a/src/Models/Operations/GetServerCapabilitiesResponseBody.php b/src/Models/Operations/GetServerCapabilitiesResponseBody.php
new file mode 100644
index 0000000..00306ad
--- /dev/null
+++ b/src/Models/Operations/GetServerCapabilitiesResponseBody.php
@@ -0,0 +1,29 @@
+mediaContainer = null;
+ }
+}
diff --git a/src/Models/Operations/GetServerCapabilitiesServerResponseBody.php b/src/Models/Operations/GetServerCapabilitiesServerResponseBody.php
new file mode 100644
index 0000000..ae3d93e
--- /dev/null
+++ b/src/Models/Operations/GetServerCapabilitiesServerResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetServerIdentityErrors.php b/src/Models/Operations/GetServerIdentityErrors.php
new file mode 100644
index 0000000..194d5b4
--- /dev/null
+++ b/src/Models/Operations/GetServerIdentityErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetServerIdentityMediaContainer.php b/src/Models/Operations/GetServerIdentityMediaContainer.php
new file mode 100644
index 0000000..0bddd28
--- /dev/null
+++ b/src/Models/Operations/GetServerIdentityMediaContainer.php
@@ -0,0 +1,41 @@
+size = null;
+ $this->claimed = null;
+ $this->machineIdentifier = null;
+ $this->version = null;
+ }
+}
diff --git a/src/Models/Operations/GetServerIdentityResponse.php b/src/Models/Operations/GetServerIdentityResponse.php
new file mode 100644
index 0000000..fba94e1
--- /dev/null
+++ b/src/Models/Operations/GetServerIdentityResponse.php
@@ -0,0 +1,62 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->twoHundredApplicationJsonObject = null;
+ $this->fourHundredAndOneApplicationJsonObject = null;
+ }
+}
diff --git a/src/Models/Operations/GetServerIdentityResponseBody.php b/src/Models/Operations/GetServerIdentityResponseBody.php
new file mode 100644
index 0000000..1b3fc07
--- /dev/null
+++ b/src/Models/Operations/GetServerIdentityResponseBody.php
@@ -0,0 +1,29 @@
+mediaContainer = null;
+ }
+}
diff --git a/src/Models/Operations/GetServerIdentityServerResponseBody.php b/src/Models/Operations/GetServerIdentityServerResponseBody.php
new file mode 100644
index 0000000..b89a074
--- /dev/null
+++ b/src/Models/Operations/GetServerIdentityServerResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetServerListErrors.php b/src/Models/Operations/GetServerListErrors.php
new file mode 100644
index 0000000..81a5865
--- /dev/null
+++ b/src/Models/Operations/GetServerListErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetServerListMediaContainer.php b/src/Models/Operations/GetServerListMediaContainer.php
new file mode 100644
index 0000000..3c62763
--- /dev/null
+++ b/src/Models/Operations/GetServerListMediaContainer.php
@@ -0,0 +1,34 @@
+ $server
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('Server')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $server = null;
+
+ public function __construct()
+ {
+ $this->size = null;
+ $this->server = null;
+ }
+}
diff --git a/src/Models/Operations/GetServerListResponse.php b/src/Models/Operations/GetServerListResponse.php
new file mode 100644
index 0000000..c558221
--- /dev/null
+++ b/src/Models/Operations/GetServerListResponse.php
@@ -0,0 +1,62 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->twoHundredApplicationJsonObject = null;
+ $this->fourHundredAndOneApplicationJsonObject = null;
+ }
+}
diff --git a/src/Models/Operations/GetServerListResponseBody.php b/src/Models/Operations/GetServerListResponseBody.php
new file mode 100644
index 0000000..41600b3
--- /dev/null
+++ b/src/Models/Operations/GetServerListResponseBody.php
@@ -0,0 +1,29 @@
+mediaContainer = null;
+ }
+}
diff --git a/src/Models/Operations/GetServerListServer.php b/src/Models/Operations/GetServerListServer.php
new file mode 100644
index 0000000..a395ebf
--- /dev/null
+++ b/src/Models/Operations/GetServerListServer.php
@@ -0,0 +1,53 @@
+name = null;
+ $this->host = null;
+ $this->address = null;
+ $this->port = null;
+ $this->machineIdentifier = null;
+ $this->version = null;
+ }
+}
diff --git a/src/Models/Operations/GetServerListServerResponseBody.php b/src/Models/Operations/GetServerListServerResponseBody.php
new file mode 100644
index 0000000..dde0976
--- /dev/null
+++ b/src/Models/Operations/GetServerListServerResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetServerPreferencesErrors.php b/src/Models/Operations/GetServerPreferencesErrors.php
new file mode 100644
index 0000000..9b13d68
--- /dev/null
+++ b/src/Models/Operations/GetServerPreferencesErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetServerPreferencesResponse.php b/src/Models/Operations/GetServerPreferencesResponse.php
new file mode 100644
index 0000000..eeb3564
--- /dev/null
+++ b/src/Models/Operations/GetServerPreferencesResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/GetServerPreferencesResponseBody.php b/src/Models/Operations/GetServerPreferencesResponseBody.php
new file mode 100644
index 0000000..2235a64
--- /dev/null
+++ b/src/Models/Operations/GetServerPreferencesResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetSessionHistoryErrors.php b/src/Models/Operations/GetSessionHistoryErrors.php
new file mode 100644
index 0000000..39ef31c
--- /dev/null
+++ b/src/Models/Operations/GetSessionHistoryErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetSessionHistoryResponse.php b/src/Models/Operations/GetSessionHistoryResponse.php
new file mode 100644
index 0000000..8cb177c
--- /dev/null
+++ b/src/Models/Operations/GetSessionHistoryResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/GetSessionHistoryResponseBody.php b/src/Models/Operations/GetSessionHistoryResponseBody.php
new file mode 100644
index 0000000..6d7a8b6
--- /dev/null
+++ b/src/Models/Operations/GetSessionHistoryResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetSessionsErrors.php b/src/Models/Operations/GetSessionsErrors.php
new file mode 100644
index 0000000..71280a5
--- /dev/null
+++ b/src/Models/Operations/GetSessionsErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetSessionsResponse.php b/src/Models/Operations/GetSessionsResponse.php
new file mode 100644
index 0000000..4373223
--- /dev/null
+++ b/src/Models/Operations/GetSessionsResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/GetSessionsResponseBody.php b/src/Models/Operations/GetSessionsResponseBody.php
new file mode 100644
index 0000000..5fa70f5
--- /dev/null
+++ b/src/Models/Operations/GetSessionsResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetSourceConnectionInformationErrors.php b/src/Models/Operations/GetSourceConnectionInformationErrors.php
new file mode 100644
index 0000000..3de5af2
--- /dev/null
+++ b/src/Models/Operations/GetSourceConnectionInformationErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetSourceConnectionInformationRequest.php b/src/Models/Operations/GetSourceConnectionInformationRequest.php
new file mode 100644
index 0000000..a05c877
--- /dev/null
+++ b/src/Models/Operations/GetSourceConnectionInformationRequest.php
@@ -0,0 +1,26 @@
+source = "";
+ }
+}
diff --git a/src/Models/Operations/GetSourceConnectionInformationResponse.php b/src/Models/Operations/GetSourceConnectionInformationResponse.php
new file mode 100644
index 0000000..744a365
--- /dev/null
+++ b/src/Models/Operations/GetSourceConnectionInformationResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/GetSourceConnectionInformationResponseBody.php b/src/Models/Operations/GetSourceConnectionInformationResponseBody.php
new file mode 100644
index 0000000..c9e5b8b
--- /dev/null
+++ b/src/Models/Operations/GetSourceConnectionInformationResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetTimelineErrors.php b/src/Models/Operations/GetTimelineErrors.php
new file mode 100644
index 0000000..5db4f21
--- /dev/null
+++ b/src/Models/Operations/GetTimelineErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetTimelineRequest.php b/src/Models/Operations/GetTimelineRequest.php
new file mode 100644
index 0000000..8d2b2c4
--- /dev/null
+++ b/src/Models/Operations/GetTimelineRequest.php
@@ -0,0 +1,107 @@
+ratingKey = 0;
+ $this->key = "";
+ $this->state = \LukeHagar\Plex_API\Models\Operations\State::Playing;
+ $this->hasMDE = 0;
+ $this->time = 0;
+ $this->duration = 0;
+ $this->context = "";
+ $this->playQueueItemID = 0;
+ $this->playBackTime = 0;
+ $this->row = 0;
+ }
+}
diff --git a/src/Models/Operations/GetTimelineResponse.php b/src/Models/Operations/GetTimelineResponse.php
new file mode 100644
index 0000000..11df9f3
--- /dev/null
+++ b/src/Models/Operations/GetTimelineResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/GetTimelineResponseBody.php b/src/Models/Operations/GetTimelineResponseBody.php
new file mode 100644
index 0000000..07dd541
--- /dev/null
+++ b/src/Models/Operations/GetTimelineResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetTranscodeSessionsErrors.php b/src/Models/Operations/GetTranscodeSessionsErrors.php
new file mode 100644
index 0000000..12d9996
--- /dev/null
+++ b/src/Models/Operations/GetTranscodeSessionsErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetTranscodeSessionsMediaContainer.php b/src/Models/Operations/GetTranscodeSessionsMediaContainer.php
new file mode 100644
index 0000000..8cc4133
--- /dev/null
+++ b/src/Models/Operations/GetTranscodeSessionsMediaContainer.php
@@ -0,0 +1,34 @@
+ $transcodeSession
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('TranscodeSession')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $transcodeSession = null;
+
+ public function __construct()
+ {
+ $this->size = null;
+ $this->transcodeSession = null;
+ }
+}
diff --git a/src/Models/Operations/GetTranscodeSessionsResponse.php b/src/Models/Operations/GetTranscodeSessionsResponse.php
new file mode 100644
index 0000000..0a40152
--- /dev/null
+++ b/src/Models/Operations/GetTranscodeSessionsResponse.php
@@ -0,0 +1,62 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->twoHundredApplicationJsonObject = null;
+ $this->fourHundredAndOneApplicationJsonObject = null;
+ }
+}
diff --git a/src/Models/Operations/GetTranscodeSessionsResponseBody.php b/src/Models/Operations/GetTranscodeSessionsResponseBody.php
new file mode 100644
index 0000000..57a9b20
--- /dev/null
+++ b/src/Models/Operations/GetTranscodeSessionsResponseBody.php
@@ -0,0 +1,29 @@
+mediaContainer = null;
+ }
+}
diff --git a/src/Models/Operations/GetTranscodeSessionsSessionsResponseBody.php b/src/Models/Operations/GetTranscodeSessionsSessionsResponseBody.php
new file mode 100644
index 0000000..02d7684
--- /dev/null
+++ b/src/Models/Operations/GetTranscodeSessionsSessionsResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetTransientTokenErrors.php b/src/Models/Operations/GetTransientTokenErrors.php
new file mode 100644
index 0000000..2d308f8
--- /dev/null
+++ b/src/Models/Operations/GetTransientTokenErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetTransientTokenRequest.php b/src/Models/Operations/GetTransientTokenRequest.php
new file mode 100644
index 0000000..ed08dc0
--- /dev/null
+++ b/src/Models/Operations/GetTransientTokenRequest.php
@@ -0,0 +1,35 @@
+type = \LukeHagar\Plex_API\Models\Operations\QueryParamType::Delegation;
+ $this->scope = \LukeHagar\Plex_API\Models\Operations\Scope::All;
+ }
+}
diff --git a/src/Models/Operations/GetTransientTokenResponse.php b/src/Models/Operations/GetTransientTokenResponse.php
new file mode 100644
index 0000000..8de5ee2
--- /dev/null
+++ b/src/Models/Operations/GetTransientTokenResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/GetTransientTokenResponseBody.php b/src/Models/Operations/GetTransientTokenResponseBody.php
new file mode 100644
index 0000000..bcf491e
--- /dev/null
+++ b/src/Models/Operations/GetTransientTokenResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/GetUpdateStatusErrors.php b/src/Models/Operations/GetUpdateStatusErrors.php
new file mode 100644
index 0000000..8cf894e
--- /dev/null
+++ b/src/Models/Operations/GetUpdateStatusErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/GetUpdateStatusResponse.php b/src/Models/Operations/GetUpdateStatusResponse.php
new file mode 100644
index 0000000..fbfef81
--- /dev/null
+++ b/src/Models/Operations/GetUpdateStatusResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/GetUpdateStatusResponseBody.php b/src/Models/Operations/GetUpdateStatusResponseBody.php
new file mode 100644
index 0000000..1bcd32f
--- /dev/null
+++ b/src/Models/Operations/GetUpdateStatusResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/Guids.php b/src/Models/Operations/Guids.php
new file mode 100644
index 0000000..66d1e9a
--- /dev/null
+++ b/src/Models/Operations/Guids.php
@@ -0,0 +1,23 @@
+id = null;
+ }
+}
diff --git a/src/Models/Operations/IncludeDetails.php b/src/Models/Operations/IncludeDetails.php
new file mode 100644
index 0000000..0ab2ce4
--- /dev/null
+++ b/src/Models/Operations/IncludeDetails.php
@@ -0,0 +1,22 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/LogLineRequest.php b/src/Models/Operations/LogLineRequest.php
new file mode 100644
index 0000000..e793032
--- /dev/null
+++ b/src/Models/Operations/LogLineRequest.php
@@ -0,0 +1,51 @@
+level = \LukeHagar\Plex_API\Models\Operations\Level::Zero;
+ $this->message = "";
+ $this->source = "";
+ }
+}
diff --git a/src/Models/Operations/LogLineResponse.php b/src/Models/Operations/LogLineResponse.php
new file mode 100644
index 0000000..d1dd95a
--- /dev/null
+++ b/src/Models/Operations/LogLineResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/LogLineResponseBody.php b/src/Models/Operations/LogLineResponseBody.php
new file mode 100644
index 0000000..fe3fb15
--- /dev/null
+++ b/src/Models/Operations/LogLineResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/LogMultiLineErrors.php b/src/Models/Operations/LogMultiLineErrors.php
new file mode 100644
index 0000000..79cd54f
--- /dev/null
+++ b/src/Models/Operations/LogMultiLineErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/LogMultiLineResponse.php b/src/Models/Operations/LogMultiLineResponse.php
new file mode 100644
index 0000000..b0b3afa
--- /dev/null
+++ b/src/Models/Operations/LogMultiLineResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/LogMultiLineResponseBody.php b/src/Models/Operations/LogMultiLineResponseBody.php
new file mode 100644
index 0000000..905d408
--- /dev/null
+++ b/src/Models/Operations/LogMultiLineResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/MarkPlayedErrors.php b/src/Models/Operations/MarkPlayedErrors.php
new file mode 100644
index 0000000..1a656e6
--- /dev/null
+++ b/src/Models/Operations/MarkPlayedErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/MarkPlayedRequest.php b/src/Models/Operations/MarkPlayedRequest.php
new file mode 100644
index 0000000..16d8718
--- /dev/null
+++ b/src/Models/Operations/MarkPlayedRequest.php
@@ -0,0 +1,26 @@
+key = 0;
+ }
+}
diff --git a/src/Models/Operations/MarkPlayedResponse.php b/src/Models/Operations/MarkPlayedResponse.php
new file mode 100644
index 0000000..e6c1f67
--- /dev/null
+++ b/src/Models/Operations/MarkPlayedResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/MarkPlayedResponseBody.php b/src/Models/Operations/MarkPlayedResponseBody.php
new file mode 100644
index 0000000..46d873a
--- /dev/null
+++ b/src/Models/Operations/MarkPlayedResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/MarkUnplayedErrors.php b/src/Models/Operations/MarkUnplayedErrors.php
new file mode 100644
index 0000000..bc5728b
--- /dev/null
+++ b/src/Models/Operations/MarkUnplayedErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/MarkUnplayedRequest.php b/src/Models/Operations/MarkUnplayedRequest.php
new file mode 100644
index 0000000..762de43
--- /dev/null
+++ b/src/Models/Operations/MarkUnplayedRequest.php
@@ -0,0 +1,26 @@
+key = 0;
+ }
+}
diff --git a/src/Models/Operations/MarkUnplayedResponse.php b/src/Models/Operations/MarkUnplayedResponse.php
new file mode 100644
index 0000000..aff459a
--- /dev/null
+++ b/src/Models/Operations/MarkUnplayedResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/MarkUnplayedResponseBody.php b/src/Models/Operations/MarkUnplayedResponseBody.php
new file mode 100644
index 0000000..fcfd5dd
--- /dev/null
+++ b/src/Models/Operations/MarkUnplayedResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/Media.php b/src/Models/Operations/Media.php
new file mode 100644
index 0000000..226d76e
--- /dev/null
+++ b/src/Models/Operations/Media.php
@@ -0,0 +1,118 @@
+ $part
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('Part')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $part = null;
+
+ public function __construct()
+ {
+ $this->id = null;
+ $this->duration = null;
+ $this->bitrate = null;
+ $this->width = null;
+ $this->height = null;
+ $this->aspectRatio = null;
+ $this->audioChannels = null;
+ $this->audioCodec = null;
+ $this->videoCodec = null;
+ $this->videoResolution = null;
+ $this->container = null;
+ $this->videoFrameRate = null;
+ $this->optimizedForStreaming = null;
+ $this->has64bitOffsets = null;
+ $this->videoProfile = null;
+ $this->part = null;
+ }
+}
diff --git a/src/Models/Operations/MediaContainer.php b/src/Models/Operations/MediaContainer.php
new file mode 100644
index 0000000..a5e499d
--- /dev/null
+++ b/src/Models/Operations/MediaContainer.php
@@ -0,0 +1,328 @@
+ $directory
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('Directory')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $directory = null;
+
+ public function __construct()
+ {
+ $this->size = null;
+ $this->allowCameraUpload = null;
+ $this->allowChannelAccess = null;
+ $this->allowMediaDeletion = null;
+ $this->allowSharing = null;
+ $this->allowSync = null;
+ $this->allowTuners = null;
+ $this->backgroundProcessing = null;
+ $this->certificate = null;
+ $this->companionProxy = null;
+ $this->countryCode = null;
+ $this->diagnostics = null;
+ $this->eventStream = null;
+ $this->friendlyName = null;
+ $this->hubSearch = null;
+ $this->itemClusters = null;
+ $this->livetv = null;
+ $this->machineIdentifier = null;
+ $this->mediaProviders = null;
+ $this->multiuser = null;
+ $this->musicAnalysis = null;
+ $this->myPlex = null;
+ $this->myPlexMappingState = null;
+ $this->myPlexSigninState = null;
+ $this->myPlexSubscription = null;
+ $this->myPlexUsername = null;
+ $this->offlineTranscode = null;
+ $this->ownerFeatures = null;
+ $this->photoAutoTag = null;
+ $this->platform = null;
+ $this->platformVersion = null;
+ $this->pluginHost = null;
+ $this->pushNotifications = null;
+ $this->readOnlyLibraries = null;
+ $this->streamingBrainABRVersion = null;
+ $this->streamingBrainVersion = null;
+ $this->sync = null;
+ $this->transcoderActiveVideoSessions = null;
+ $this->transcoderAudio = null;
+ $this->transcoderLyrics = null;
+ $this->transcoderPhoto = null;
+ $this->transcoderSubtitles = null;
+ $this->transcoderVideo = null;
+ $this->transcoderVideoBitrates = null;
+ $this->transcoderVideoQualities = null;
+ $this->transcoderVideoResolutions = null;
+ $this->updatedAt = null;
+ $this->updater = null;
+ $this->version = null;
+ $this->voiceSearch = null;
+ $this->directory = null;
+ }
+}
diff --git a/src/Models/Operations/Metadata.php b/src/Models/Operations/Metadata.php
new file mode 100644
index 0000000..cb00411
--- /dev/null
+++ b/src/Models/Operations/Metadata.php
@@ -0,0 +1,239 @@
+")]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?\DateTime $originallyAvailableAt = null;
+
+ #[\JMS\Serializer\Annotation\SerializedName('addedAt')]
+ #[\JMS\Serializer\Annotation\Type('float')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?float $addedAt = null;
+
+ #[\JMS\Serializer\Annotation\SerializedName('updatedAt')]
+ #[\JMS\Serializer\Annotation\Type('float')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?float $updatedAt = null;
+
+ #[\JMS\Serializer\Annotation\SerializedName('audienceRatingImage')]
+ #[\JMS\Serializer\Annotation\Type('string')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?string $audienceRatingImage = null;
+
+ #[\JMS\Serializer\Annotation\SerializedName('chapterSource')]
+ #[\JMS\Serializer\Annotation\Type('string')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?string $chapterSource = null;
+
+ #[\JMS\Serializer\Annotation\SerializedName('primaryExtraKey')]
+ #[\JMS\Serializer\Annotation\Type('string')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?string $primaryExtraKey = null;
+
+ #[\JMS\Serializer\Annotation\SerializedName('ratingImage')]
+ #[\JMS\Serializer\Annotation\Type('string')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?string $ratingImage = null;
+
+ /**
+ * $media
+ *
+ * @var ?array<\LukeHagar\Plex_API\Models\Operations\Media> $media
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('Media')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $media = null;
+
+ /**
+ * $genre
+ *
+ * @var ?array<\LukeHagar\Plex_API\Models\Operations\Genre> $genre
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('Genre')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $genre = null;
+
+ /**
+ * $director
+ *
+ * @var ?array<\LukeHagar\Plex_API\Models\Operations\Director> $director
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('Director')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $director = null;
+
+ /**
+ * $writer
+ *
+ * @var ?array<\LukeHagar\Plex_API\Models\Operations\Writer> $writer
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('Writer')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $writer = null;
+
+ /**
+ * $country
+ *
+ * @var ?array<\LukeHagar\Plex_API\Models\Operations\Country> $country
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('Country')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $country = null;
+
+ /**
+ * $role
+ *
+ * @var ?array<\LukeHagar\Plex_API\Models\Operations\Role> $role
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('Role')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $role = null;
+
+ public function __construct()
+ {
+ $this->allowSync = null;
+ $this->librarySectionID = null;
+ $this->librarySectionTitle = null;
+ $this->librarySectionUUID = null;
+ $this->ratingKey = null;
+ $this->key = null;
+ $this->guid = null;
+ $this->studio = null;
+ $this->type = null;
+ $this->title = null;
+ $this->contentRating = null;
+ $this->summary = null;
+ $this->rating = null;
+ $this->audienceRating = null;
+ $this->year = null;
+ $this->tagline = null;
+ $this->thumb = null;
+ $this->art = null;
+ $this->duration = null;
+ $this->originallyAvailableAt = null;
+ $this->addedAt = null;
+ $this->updatedAt = null;
+ $this->audienceRatingImage = null;
+ $this->chapterSource = null;
+ $this->primaryExtraKey = null;
+ $this->ratingImage = null;
+ $this->media = null;
+ $this->genre = null;
+ $this->director = null;
+ $this->writer = null;
+ $this->country = null;
+ $this->role = null;
+ }
+}
diff --git a/src/Models/Operations/MinSize.php b/src/Models/Operations/MinSize.php
new file mode 100644
index 0000000..ee7b02a
--- /dev/null
+++ b/src/Models/Operations/MinSize.php
@@ -0,0 +1,17 @@
+authToken = null;
+ $this->username = null;
+ $this->mappingState = null;
+ $this->mappingError = null;
+ $this->signInState = null;
+ $this->publicAddress = null;
+ $this->publicPort = null;
+ $this->privateAddress = null;
+ $this->privatePort = null;
+ $this->subscriptionFeatures = null;
+ $this->subscriptionActive = null;
+ $this->subscriptionState = null;
+ }
+}
diff --git a/src/Models/Operations/OnlyTransient.php b/src/Models/Operations/OnlyTransient.php
new file mode 100644
index 0000000..672e9ec
--- /dev/null
+++ b/src/Models/Operations/OnlyTransient.php
@@ -0,0 +1,17 @@
+id = null;
+ $this->key = null;
+ $this->duration = null;
+ $this->file = null;
+ $this->size = null;
+ $this->container = null;
+ $this->has64bitOffsets = null;
+ $this->hasThumbnail = null;
+ $this->optimizedForStreaming = null;
+ $this->videoProfile = null;
+ }
+}
diff --git a/src/Models/Operations/PathParamTaskName.php b/src/Models/Operations/PathParamTaskName.php
new file mode 100644
index 0000000..088f41b
--- /dev/null
+++ b/src/Models/Operations/PathParamTaskName.php
@@ -0,0 +1,29 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/PerformSearchRequest.php b/src/Models/Operations/PerformSearchRequest.php
new file mode 100644
index 0000000..d8a3def
--- /dev/null
+++ b/src/Models/Operations/PerformSearchRequest.php
@@ -0,0 +1,44 @@
+query = "";
+ $this->sectionId = null;
+ $this->limit = null;
+ }
+}
diff --git a/src/Models/Operations/PerformSearchResponse.php b/src/Models/Operations/PerformSearchResponse.php
new file mode 100644
index 0000000..6aff5f2
--- /dev/null
+++ b/src/Models/Operations/PerformSearchResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/PerformSearchResponseBody.php b/src/Models/Operations/PerformSearchResponseBody.php
new file mode 100644
index 0000000..360a2e7
--- /dev/null
+++ b/src/Models/Operations/PerformSearchResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/PerformVoiceSearchErrors.php b/src/Models/Operations/PerformVoiceSearchErrors.php
new file mode 100644
index 0000000..fee597f
--- /dev/null
+++ b/src/Models/Operations/PerformVoiceSearchErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/PerformVoiceSearchRequest.php b/src/Models/Operations/PerformVoiceSearchRequest.php
new file mode 100644
index 0000000..ae641dc
--- /dev/null
+++ b/src/Models/Operations/PerformVoiceSearchRequest.php
@@ -0,0 +1,44 @@
+query = "";
+ $this->sectionId = null;
+ $this->limit = null;
+ }
+}
diff --git a/src/Models/Operations/PerformVoiceSearchResponse.php b/src/Models/Operations/PerformVoiceSearchResponse.php
new file mode 100644
index 0000000..0feccaa
--- /dev/null
+++ b/src/Models/Operations/PerformVoiceSearchResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/PerformVoiceSearchResponseBody.php b/src/Models/Operations/PerformVoiceSearchResponseBody.php
new file mode 100644
index 0000000..0498857
--- /dev/null
+++ b/src/Models/Operations/PerformVoiceSearchResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/PlaylistType.php b/src/Models/Operations/PlaylistType.php
new file mode 100644
index 0000000..a53d6cd
--- /dev/null
+++ b/src/Models/Operations/PlaylistType.php
@@ -0,0 +1,18 @@
+key = null;
+ $this->title = null;
+ $this->type = null;
+ }
+}
diff --git a/src/Models/Operations/QueryParamOnlyTransient.php b/src/Models/Operations/QueryParamOnlyTransient.php
new file mode 100644
index 0000000..6454ff8
--- /dev/null
+++ b/src/Models/Operations/QueryParamOnlyTransient.php
@@ -0,0 +1,17 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/RefreshLibraryRequest.php b/src/Models/Operations/RefreshLibraryRequest.php
new file mode 100644
index 0000000..5d5ba7d
--- /dev/null
+++ b/src/Models/Operations/RefreshLibraryRequest.php
@@ -0,0 +1,26 @@
+sectionId = 0;
+ }
+}
diff --git a/src/Models/Operations/RefreshLibraryResponse.php b/src/Models/Operations/RefreshLibraryResponse.php
new file mode 100644
index 0000000..99c8116
--- /dev/null
+++ b/src/Models/Operations/RefreshLibraryResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/RefreshLibraryResponseBody.php b/src/Models/Operations/RefreshLibraryResponseBody.php
new file mode 100644
index 0000000..e8e99fc
--- /dev/null
+++ b/src/Models/Operations/RefreshLibraryResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/ResponseBody.php b/src/Models/Operations/ResponseBody.php
new file mode 100644
index 0000000..9cd9467
--- /dev/null
+++ b/src/Models/Operations/ResponseBody.php
@@ -0,0 +1,23 @@
+mediaContainer = null;
+ }
+}
diff --git a/src/Models/Operations/Role.php b/src/Models/Operations/Role.php
new file mode 100644
index 0000000..ab45c91
--- /dev/null
+++ b/src/Models/Operations/Role.php
@@ -0,0 +1,23 @@
+tag = null;
+ }
+}
diff --git a/src/Models/Operations/Scope.php b/src/Models/Operations/Scope.php
new file mode 100644
index 0000000..91423e2
--- /dev/null
+++ b/src/Models/Operations/Scope.php
@@ -0,0 +1,16 @@
+name = null;
+ $this->host = null;
+ $this->address = null;
+ $this->port = null;
+ $this->machineIdentifier = null;
+ $this->version = null;
+ $this->protocol = null;
+ $this->product = null;
+ $this->deviceClass = null;
+ $this->protocolVersion = null;
+ $this->protocolCapabilities = null;
+ }
+}
diff --git a/src/Models/Operations/Skip.php b/src/Models/Operations/Skip.php
new file mode 100644
index 0000000..bfe772d
--- /dev/null
+++ b/src/Models/Operations/Skip.php
@@ -0,0 +1,17 @@
+ entry for this version will have the `state` set to `skipped`. */
+enum Skip: int
+{
+ case Zero = 0;
+ case One = 1;
+}
diff --git a/src/Models/Operations/Smart.php b/src/Models/Operations/Smart.php
new file mode 100644
index 0000000..0e82bdf
--- /dev/null
+++ b/src/Models/Operations/Smart.php
@@ -0,0 +1,17 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/StartAllTasksResponse.php b/src/Models/Operations/StartAllTasksResponse.php
new file mode 100644
index 0000000..37730d7
--- /dev/null
+++ b/src/Models/Operations/StartAllTasksResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/StartAllTasksResponseBody.php b/src/Models/Operations/StartAllTasksResponseBody.php
new file mode 100644
index 0000000..394320d
--- /dev/null
+++ b/src/Models/Operations/StartAllTasksResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/StartTaskErrors.php b/src/Models/Operations/StartTaskErrors.php
new file mode 100644
index 0000000..2a60806
--- /dev/null
+++ b/src/Models/Operations/StartTaskErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/StartTaskRequest.php b/src/Models/Operations/StartTaskRequest.php
new file mode 100644
index 0000000..6d39b6a
--- /dev/null
+++ b/src/Models/Operations/StartTaskRequest.php
@@ -0,0 +1,26 @@
+taskName = \LukeHagar\Plex_API\Models\Operations\TaskName::BackupDatabase;
+ }
+}
diff --git a/src/Models/Operations/StartTaskResponse.php b/src/Models/Operations/StartTaskResponse.php
new file mode 100644
index 0000000..93e7c5c
--- /dev/null
+++ b/src/Models/Operations/StartTaskResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/StartTaskResponseBody.php b/src/Models/Operations/StartTaskResponseBody.php
new file mode 100644
index 0000000..7356bbe
--- /dev/null
+++ b/src/Models/Operations/StartTaskResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/StartUniversalTranscodeErrors.php b/src/Models/Operations/StartUniversalTranscodeErrors.php
new file mode 100644
index 0000000..717f46e
--- /dev/null
+++ b/src/Models/Operations/StartUniversalTranscodeErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/StartUniversalTranscodeRequest.php b/src/Models/Operations/StartUniversalTranscodeRequest.php
new file mode 100644
index 0000000..f56aace
--- /dev/null
+++ b/src/Models/Operations/StartUniversalTranscodeRequest.php
@@ -0,0 +1,161 @@
+hasMDE = 0;
+ $this->path = "";
+ $this->mediaIndex = 0;
+ $this->partIndex = 0;
+ $this->protocol = "";
+ $this->fastSeek = null;
+ $this->directPlay = null;
+ $this->directStream = null;
+ $this->subtitleSize = null;
+ $this->subtites = null;
+ $this->audioBoost = null;
+ $this->location = null;
+ $this->mediaBufferSize = null;
+ $this->session = null;
+ $this->addDebugOverlay = null;
+ $this->autoAdjustQuality = null;
+ }
+}
diff --git a/src/Models/Operations/StartUniversalTranscodeResponse.php b/src/Models/Operations/StartUniversalTranscodeResponse.php
new file mode 100644
index 0000000..e008d1c
--- /dev/null
+++ b/src/Models/Operations/StartUniversalTranscodeResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/StartUniversalTranscodeResponseBody.php b/src/Models/Operations/StartUniversalTranscodeResponseBody.php
new file mode 100644
index 0000000..676deab
--- /dev/null
+++ b/src/Models/Operations/StartUniversalTranscodeResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/State.php b/src/Models/Operations/State.php
new file mode 100644
index 0000000..d41c439
--- /dev/null
+++ b/src/Models/Operations/State.php
@@ -0,0 +1,18 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/StopAllTasksResponse.php b/src/Models/Operations/StopAllTasksResponse.php
new file mode 100644
index 0000000..44c4a1c
--- /dev/null
+++ b/src/Models/Operations/StopAllTasksResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/StopAllTasksResponseBody.php b/src/Models/Operations/StopAllTasksResponseBody.php
new file mode 100644
index 0000000..63864cf
--- /dev/null
+++ b/src/Models/Operations/StopAllTasksResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/StopTaskErrors.php b/src/Models/Operations/StopTaskErrors.php
new file mode 100644
index 0000000..501268e
--- /dev/null
+++ b/src/Models/Operations/StopTaskErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/StopTaskRequest.php b/src/Models/Operations/StopTaskRequest.php
new file mode 100644
index 0000000..8a7f7b3
--- /dev/null
+++ b/src/Models/Operations/StopTaskRequest.php
@@ -0,0 +1,26 @@
+taskName = \LukeHagar\Plex_API\Models\Operations\PathParamTaskName::BackupDatabase;
+ }
+}
diff --git a/src/Models/Operations/StopTaskResponse.php b/src/Models/Operations/StopTaskResponse.php
new file mode 100644
index 0000000..5599a19
--- /dev/null
+++ b/src/Models/Operations/StopTaskResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/StopTaskResponseBody.php b/src/Models/Operations/StopTaskResponseBody.php
new file mode 100644
index 0000000..6a3b4f4
--- /dev/null
+++ b/src/Models/Operations/StopTaskResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/StopTranscodeSessionErrors.php b/src/Models/Operations/StopTranscodeSessionErrors.php
new file mode 100644
index 0000000..b0ab5da
--- /dev/null
+++ b/src/Models/Operations/StopTranscodeSessionErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/StopTranscodeSessionRequest.php b/src/Models/Operations/StopTranscodeSessionRequest.php
new file mode 100644
index 0000000..dcfa32e
--- /dev/null
+++ b/src/Models/Operations/StopTranscodeSessionRequest.php
@@ -0,0 +1,26 @@
+sessionKey = "";
+ }
+}
diff --git a/src/Models/Operations/StopTranscodeSessionResponse.php b/src/Models/Operations/StopTranscodeSessionResponse.php
new file mode 100644
index 0000000..3922403
--- /dev/null
+++ b/src/Models/Operations/StopTranscodeSessionResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/StopTranscodeSessionResponseBody.php b/src/Models/Operations/StopTranscodeSessionResponseBody.php
new file mode 100644
index 0000000..33bf521
--- /dev/null
+++ b/src/Models/Operations/StopTranscodeSessionResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/Stream.php b/src/Models/Operations/Stream.php
new file mode 100644
index 0000000..7a7ab5a
--- /dev/null
+++ b/src/Models/Operations/Stream.php
@@ -0,0 +1,155 @@
+id = null;
+ $this->streamType = null;
+ $this->default = null;
+ $this->codec = null;
+ $this->index = null;
+ $this->bitrate = null;
+ $this->language = null;
+ $this->languageTag = null;
+ $this->languageCode = null;
+ $this->bitDepth = null;
+ $this->chromaLocation = null;
+ $this->chromaSubsampling = null;
+ $this->codedHeight = null;
+ $this->codedWidth = null;
+ $this->colorRange = null;
+ $this->frameRate = null;
+ $this->height = null;
+ $this->level = null;
+ $this->profile = null;
+ $this->refFrames = null;
+ $this->width = null;
+ $this->displayTitle = null;
+ $this->extendedDisplayTitle = null;
+ }
+}
diff --git a/src/Models/Operations/TaskName.php b/src/Models/Operations/TaskName.php
new file mode 100644
index 0000000..d67c194
--- /dev/null
+++ b/src/Models/Operations/TaskName.php
@@ -0,0 +1,29 @@
+key = null;
+ $this->throttled = null;
+ $this->complete = null;
+ $this->progress = null;
+ $this->size = null;
+ $this->speed = null;
+ $this->error = null;
+ $this->duration = null;
+ $this->context = null;
+ $this->sourceVideoCodec = null;
+ $this->sourceAudioCodec = null;
+ $this->videoDecision = null;
+ $this->audioDecision = null;
+ $this->protocol = null;
+ $this->container = null;
+ $this->videoCodec = null;
+ $this->audioCodec = null;
+ $this->audioChannels = null;
+ $this->transcodeHwRequested = null;
+ $this->timeStamp = null;
+ $this->maxOffsetAvailable = null;
+ $this->minOffsetAvailable = null;
+ }
+}
diff --git a/src/Models/Operations/Type.php b/src/Models/Operations/Type.php
new file mode 100644
index 0000000..fcd5be9
--- /dev/null
+++ b/src/Models/Operations/Type.php
@@ -0,0 +1,18 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/UpdatePlayProgressRequest.php b/src/Models/Operations/UpdatePlayProgressRequest.php
new file mode 100644
index 0000000..9c853d5
--- /dev/null
+++ b/src/Models/Operations/UpdatePlayProgressRequest.php
@@ -0,0 +1,44 @@
+key = "";
+ $this->time = 0;
+ $this->state = "";
+ }
+}
diff --git a/src/Models/Operations/UpdatePlayProgressResponse.php b/src/Models/Operations/UpdatePlayProgressResponse.php
new file mode 100644
index 0000000..e426777
--- /dev/null
+++ b/src/Models/Operations/UpdatePlayProgressResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/UpdatePlayProgressResponseBody.php b/src/Models/Operations/UpdatePlayProgressResponseBody.php
new file mode 100644
index 0000000..9fbbe9e
--- /dev/null
+++ b/src/Models/Operations/UpdatePlayProgressResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/UpdatePlaylistErrors.php b/src/Models/Operations/UpdatePlaylistErrors.php
new file mode 100644
index 0000000..33fe403
--- /dev/null
+++ b/src/Models/Operations/UpdatePlaylistErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/UpdatePlaylistRequest.php b/src/Models/Operations/UpdatePlaylistRequest.php
new file mode 100644
index 0000000..072cb36
--- /dev/null
+++ b/src/Models/Operations/UpdatePlaylistRequest.php
@@ -0,0 +1,26 @@
+playlistID = 0;
+ }
+}
diff --git a/src/Models/Operations/UpdatePlaylistResponse.php b/src/Models/Operations/UpdatePlaylistResponse.php
new file mode 100644
index 0000000..f17f6a2
--- /dev/null
+++ b/src/Models/Operations/UpdatePlaylistResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/UpdatePlaylistResponseBody.php b/src/Models/Operations/UpdatePlaylistResponseBody.php
new file mode 100644
index 0000000..b6687f8
--- /dev/null
+++ b/src/Models/Operations/UpdatePlaylistResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/UploadPlaylistErrors.php b/src/Models/Operations/UploadPlaylistErrors.php
new file mode 100644
index 0000000..c209791
--- /dev/null
+++ b/src/Models/Operations/UploadPlaylistErrors.php
@@ -0,0 +1,35 @@
+code = null;
+ $this->message = null;
+ $this->status = null;
+ }
+}
diff --git a/src/Models/Operations/UploadPlaylistRequest.php b/src/Models/Operations/UploadPlaylistRequest.php
new file mode 100644
index 0000000..d4f0cfd
--- /dev/null
+++ b/src/Models/Operations/UploadPlaylistRequest.php
@@ -0,0 +1,45 @@
+path = "";
+ $this->force = \LukeHagar\Plex_API\Models\Operations\Force::Zero;
+ }
+}
diff --git a/src/Models/Operations/UploadPlaylistResponse.php b/src/Models/Operations/UploadPlaylistResponse.php
new file mode 100644
index 0000000..23ed5a1
--- /dev/null
+++ b/src/Models/Operations/UploadPlaylistResponse.php
@@ -0,0 +1,53 @@
+contentType = "";
+ $this->statusCode = 0;
+ $this->rawResponse = null;
+ $this->object = null;
+ }
+}
diff --git a/src/Models/Operations/UploadPlaylistResponseBody.php b/src/Models/Operations/UploadPlaylistResponseBody.php
new file mode 100644
index 0000000..2ca7fc9
--- /dev/null
+++ b/src/Models/Operations/UploadPlaylistResponseBody.php
@@ -0,0 +1,34 @@
+ $errors
+ */
+ #[\JMS\Serializer\Annotation\SerializedName('errors')]
+ #[\JMS\Serializer\Annotation\Type('array')]
+ #[\JMS\Serializer\Annotation\SkipWhenEmpty]
+ public ?array $errors = null;
+
+ public function __construct()
+ {
+ $this->errors = null;
+ }
+}
diff --git a/src/Models/Operations/Upscale.php b/src/Models/Operations/Upscale.php
new file mode 100644
index 0000000..e8ff92b
--- /dev/null
+++ b/src/Models/Operations/Upscale.php
@@ -0,0 +1,17 @@
+tag = null;
+ }
+}
diff --git a/src/Playlists.php b/src/Playlists.php
new file mode 100644
index 0000000..cac0a6f
--- /dev/null
+++ b/src/Playlists.php
@@ -0,0 +1,460 @@
+sdkConfiguration = $sdkConfig;
+ }
+
+ /**
+ * 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.
+ *
+ *
+ * @param \LukeHagar\Plex_API\Models\Operations\CreatePlaylistRequest $request
+ * @return \LukeHagar\Plex_API\Models\Operations\CreatePlaylistResponse
+ */
+ public function createPlaylist(
+ ?\LukeHagar\Plex_API\Models\Operations\CreatePlaylistRequest $request,
+ ): \LukeHagar\Plex_API\Models\Operations\CreatePlaylistResponse
+ {
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/playlists');
+
+ $options = ['http_errors' => false];
+ $options = array_merge_recursive($options, Utils\Utils::getQueryParams(\LukeHagar\Plex_API\Models\Operations\CreatePlaylistRequest::class, $request, null));
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('POST', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\CreatePlaylistResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\CreatePlaylistResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Get All Playlists
+ *
+ * Get All Playlists given the specified filters.
+ *
+ * @param ?\LukeHagar\Plex_API\Models\Operations\PlaylistType $playlistType
+ * @param ?\LukeHagar\Plex_API\Models\Operations\QueryParamSmart $smart
+ * @return \LukeHagar\Plex_API\Models\Operations\GetPlaylistsResponse
+ */
+ public function getPlaylists(
+ ?\LukeHagar\Plex_API\Models\Operations\PlaylistType $playlistType = null,
+ ?\LukeHagar\Plex_API\Models\Operations\QueryParamSmart $smart = null,
+ ): \LukeHagar\Plex_API\Models\Operations\GetPlaylistsResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\GetPlaylistsRequest();
+ $request->playlistType = $playlistType;
+ $request->smart = $smart;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/playlists/all');
+
+ $options = ['http_errors' => false];
+ $options = array_merge_recursive($options, Utils\Utils::getQueryParams(\LukeHagar\Plex_API\Models\Operations\GetPlaylistsRequest::class, $request, null));
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetPlaylistsResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetPlaylistsResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * 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.
+ *
+ *
+ * @param float $playlistID
+ * @return \LukeHagar\Plex_API\Models\Operations\GetPlaylistResponse
+ */
+ public function getPlaylist(
+ float $playlistID,
+ ): \LukeHagar\Plex_API\Models\Operations\GetPlaylistResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\GetPlaylistRequest();
+ $request->playlistID = $playlistID;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/playlists/{playlistID}', \LukeHagar\Plex_API\Models\Operations\GetPlaylistRequest::class, $request);
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetPlaylistResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetPlaylistResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Deletes a Playlist
+ *
+ * This endpoint will delete a playlist
+ *
+ *
+ * @param float $playlistID
+ * @return \LukeHagar\Plex_API\Models\Operations\DeletePlaylistResponse
+ */
+ public function deletePlaylist(
+ float $playlistID,
+ ): \LukeHagar\Plex_API\Models\Operations\DeletePlaylistResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\DeletePlaylistRequest();
+ $request->playlistID = $playlistID;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/playlists/{playlistID}', \LukeHagar\Plex_API\Models\Operations\DeletePlaylistRequest::class, $request);
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('DELETE', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\DeletePlaylistResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\DeletePlaylistResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * 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}`
+ *
+ *
+ * @param float $playlistID
+ * @return \LukeHagar\Plex_API\Models\Operations\UpdatePlaylistResponse
+ */
+ public function updatePlaylist(
+ float $playlistID,
+ ): \LukeHagar\Plex_API\Models\Operations\UpdatePlaylistResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\UpdatePlaylistRequest();
+ $request->playlistID = $playlistID;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/playlists/{playlistID}', \LukeHagar\Plex_API\Models\Operations\UpdatePlaylistRequest::class, $request);
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('PUT', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\UpdatePlaylistResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\UpdatePlaylistResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * 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.
+ *
+ *
+ * @param float $playlistID
+ * @param float $type
+ * @return \LukeHagar\Plex_API\Models\Operations\GetPlaylistContentsResponse
+ */
+ public function getPlaylistContents(
+ float $playlistID,
+ float $type,
+ ): \LukeHagar\Plex_API\Models\Operations\GetPlaylistContentsResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\GetPlaylistContentsRequest();
+ $request->playlistID = $playlistID;
+ $request->type = $type;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/playlists/{playlistID}/items', \LukeHagar\Plex_API\Models\Operations\GetPlaylistContentsRequest::class, $request);
+
+ $options = ['http_errors' => false];
+ $options = array_merge_recursive($options, Utils\Utils::getQueryParams(\LukeHagar\Plex_API\Models\Operations\GetPlaylistContentsRequest::class, $request, null));
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetPlaylistContentsResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetPlaylistContentsResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Delete Playlist Contents
+ *
+ * Clears a playlist, only works with dumb playlists. Returns the playlist.
+ *
+ *
+ * @param float $playlistID
+ * @return \LukeHagar\Plex_API\Models\Operations\ClearPlaylistContentsResponse
+ */
+ public function clearPlaylistContents(
+ float $playlistID,
+ ): \LukeHagar\Plex_API\Models\Operations\ClearPlaylistContentsResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\ClearPlaylistContentsRequest();
+ $request->playlistID = $playlistID;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/playlists/{playlistID}/items', \LukeHagar\Plex_API\Models\Operations\ClearPlaylistContentsRequest::class, $request);
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('DELETE', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\ClearPlaylistContentsResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\ClearPlaylistContentsResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * 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.
+ *
+ *
+ * @param float $playlistID
+ * @param string $uri
+ * @param float $playQueueID
+ * @return \LukeHagar\Plex_API\Models\Operations\AddPlaylistContentsResponse
+ */
+ public function addPlaylistContents(
+ float $playlistID,
+ string $uri,
+ float $playQueueID,
+ ): \LukeHagar\Plex_API\Models\Operations\AddPlaylistContentsResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\AddPlaylistContentsRequest();
+ $request->playlistID = $playlistID;
+ $request->uri = $uri;
+ $request->playQueueID = $playQueueID;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/playlists/{playlistID}/items', \LukeHagar\Plex_API\Models\Operations\AddPlaylistContentsRequest::class, $request);
+
+ $options = ['http_errors' => false];
+ $options = array_merge_recursive($options, Utils\Utils::getQueryParams(\LukeHagar\Plex_API\Models\Operations\AddPlaylistContentsRequest::class, $request, null));
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('PUT', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\AddPlaylistContentsResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\AddPlaylistContentsResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * 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.
+ *
+ *
+ * @param string $path
+ * @param \LukeHagar\Plex_API\Models\Operations\Force $force
+ * @return \LukeHagar\Plex_API\Models\Operations\UploadPlaylistResponse
+ */
+ public function uploadPlaylist(
+ string $path,
+ \LukeHagar\Plex_API\Models\Operations\Force $force,
+ ): \LukeHagar\Plex_API\Models\Operations\UploadPlaylistResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\UploadPlaylistRequest();
+ $request->path = $path;
+ $request->force = $force;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/playlists/upload');
+
+ $options = ['http_errors' => false];
+ $options = array_merge_recursive($options, Utils\Utils::getQueryParams(\LukeHagar\Plex_API\Models\Operations\UploadPlaylistRequest::class, $request, null));
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('POST', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\UploadPlaylistResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\UploadPlaylistResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+}
\ No newline at end of file
diff --git a/src/PlexAPI.php b/src/PlexAPI.php
new file mode 100644
index 0000000..bbda303
--- /dev/null
+++ b/src/PlexAPI.php
@@ -0,0 +1,200 @@
+sdkConfiguration = $sdkConfiguration;
+
+ $this->server = new Server($this->sdkConfiguration);
+
+ $this->media = new Media($this->sdkConfiguration);
+
+ $this->activities = new Activities($this->sdkConfiguration);
+
+ $this->butler = new Butler($this->sdkConfiguration);
+
+ $this->hubs = new Hubs($this->sdkConfiguration);
+
+ $this->search = new Search($this->sdkConfiguration);
+
+ $this->library = new Library($this->sdkConfiguration);
+
+ $this->log = new Log($this->sdkConfiguration);
+
+ $this->playlists = new Playlists($this->sdkConfiguration);
+
+ $this->security = new Security($this->sdkConfiguration);
+
+ $this->sessions = new Sessions($this->sdkConfiguration);
+
+ $this->updater = new Updater($this->sdkConfiguration);
+
+ $this->video = new Video($this->sdkConfiguration);
+ }
+}
\ No newline at end of file
diff --git a/src/PlexAPIBuilder.php b/src/PlexAPIBuilder.php
new file mode 100644
index 0000000..593dd9f
--- /dev/null
+++ b/src/PlexAPIBuilder.php
@@ -0,0 +1,153 @@
+sdkConfig = new SDKConfiguration();
+ }
+
+ /**
+ * setClient allows setting a custom Guzzle client for the SDK to make requests with.
+ *
+ * @param \GuzzleHttp\ClientInterface $client
+ * @return PlexAPIBuilder
+ */
+ public function setClient(\GuzzleHttp\ClientInterface $client): PlexAPIBuilder
+ {
+ $this->sdkConfig->defaultClient = $client;
+ return $this;
+ }
+
+ /**
+ * setSecurity is used to configure the security required for the SDK.
+ *
+ * @param Models\Components\Security $security
+ * @return PlexAPIBuilder
+ */
+ public function setSecurity(Models\Components\Security $security): PlexAPIBuilder
+ {
+ $this->sdkConfig->security = $security;
+ return $this;
+ }
+
+ /**
+ * setServerUrl is used to configure the server URL for the SDK, and optionally template any parameters in the URL.
+ *
+ * @param string $serverUrl
+ * @param array $params
+ * @return PlexAPIBuilder
+ */
+ public function setServerUrl(string $serverUrl, ?array $params = null): PlexAPIBuilder
+ {
+ $this->sdkConfig->serverUrl = Utils\Utils::templateUrl($serverUrl, $params);
+ return $this;
+ }
+
+ /**
+ * setServer is used to configure the server for the SDK
+ *
+ * @param int $serverIdx
+ * @return PlexAPIBuilder
+ */
+ public function setServerIndex(int $serverIdx): PlexAPIBuilder
+ {
+ $this->sdkConfig->serverIndex = $serverIdx;
+ return $this;
+ }
+
+
+ /**
+ * setProtocol is used to configure the protocol variable for url substitution
+ *
+ * @param ServerProtocol $protocol
+ * @return PlexAPIBuilder
+ */
+ public function setProtocol(ServerProtocol $protocol): PlexAPIBuilder
+ {
+ foreach ($this->sdkConfig->serverDefaults as $idx => $serverDefaults) {
+ if (!array_key_exists('protocol', $serverDefaults)) {
+ continue;
+ }
+
+ $this->sdkConfig->serverDefaults[$idx]['protocol'] = $protocol->value;
+
+ }
+
+ return $this;
+ }
+ /**
+ * setIp is used to configure the ip variable for url substitution
+ *
+ * @param string $ip
+ * @return PlexAPIBuilder
+ */
+ public function setIp(string $ip): PlexAPIBuilder
+ {
+ foreach ($this->sdkConfig->serverDefaults as $idx => $serverDefaults) {
+ if (!array_key_exists('ip', $serverDefaults)) {
+ continue;
+ }
+
+ $this->sdkConfig->serverDefaults[$idx]['ip'] = $ip;
+ }
+
+ return $this;
+ }
+ /**
+ * setPort is used to configure the port variable for url substitution
+ *
+ * @param string $port
+ * @return PlexAPIBuilder
+ */
+ public function setPort(string $port): PlexAPIBuilder
+ {
+ foreach ($this->sdkConfig->serverDefaults as $idx => $serverDefaults) {
+ if (!array_key_exists('port', $serverDefaults)) {
+ continue;
+ }
+
+ $this->sdkConfig->serverDefaults[$idx]['port'] = $port;
+ }
+
+ return $this;
+ }
+
+ /**
+ * build is used to build the SDK with any of the configured options.
+ *
+ * @return PlexAPI
+ */
+ public function build(): PlexAPI
+ {
+ if ($this->sdkConfig->defaultClient === null) {
+ $this->sdkConfig->defaultClient = new \GuzzleHttp\Client([
+ 'timeout' => 60,
+ ]);
+ }
+ if ($this->sdkConfig->security !== null) {
+ $this->sdkConfig->securityClient = Utils\Utils::configureSecurityClient($this->sdkConfig->defaultClient, $this->sdkConfig->security);
+ }
+
+ if ($this->sdkConfig->securityClient === null) {
+ $this->sdkConfig->securityClient = $this->sdkConfig->defaultClient;
+ }
+
+ return new PlexAPI($this->sdkConfig);
+ }
+}
\ No newline at end of file
diff --git a/src/SDKConfiguration.php b/src/SDKConfiguration.php
new file mode 100644
index 0000000..80373da
--- /dev/null
+++ b/src/SDKConfiguration.php
@@ -0,0 +1,51 @@
+> */
+ public ?array $serverDefaults = [
+ [
+ ],
+ [
+ 'protocol' => 'http',
+ 'ip' => '10.10.10.47',
+ 'port' => '32400',
+ ],
+ ];
+ public string $language = 'php';
+ public string $openapiDocVersion = '0.0.3';
+ public string $sdkVersion = '0.1.0';
+ public string $genVersion = '2.223.3';
+ public string $userAgent = 'speakeasy-sdk/php 0.1.0 2.223.3 0.0.3 lukehagar/plex-api';
+
+
+ public function getServerUrl(): string
+ {
+
+ if ($this->serverUrl !== '') {
+ return $this->serverUrl;
+ };
+ return PlexAPI::SERVERS[$this->serverIndex];
+ }
+
+ /**
+ * @return array
+ */
+ public function getServerDefaults(): ?array
+ {
+ return $this->serverDefaults[$this->serverIndex];
+ }
+}
\ No newline at end of file
diff --git a/src/Search.php b/src/Search.php
new file mode 100644
index 0000000..206f2d7
--- /dev/null
+++ b/src/Search.php
@@ -0,0 +1,195 @@
+sdkConfiguration = $sdkConfig;
+ }
+
+ /**
+ * 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).
+ * - ``: 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.
+ *
+ *
+ * @param string $query
+ * @param ?float $sectionId
+ * @param ?float $limit
+ * @return \LukeHagar\Plex_API\Models\Operations\PerformSearchResponse
+ */
+ public function performSearch(
+ string $query,
+ ?float $sectionId = null,
+ ?float $limit = null,
+ ): \LukeHagar\Plex_API\Models\Operations\PerformSearchResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\PerformSearchRequest();
+ $request->query = $query;
+ $request->sectionId = $sectionId;
+ $request->limit = $limit;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/hubs/search');
+
+ $options = ['http_errors' => false];
+ $options = array_merge_recursive($options, Utils\Utils::getQueryParams(\LukeHagar\Plex_API\Models\Operations\PerformSearchRequest::class, $request, null));
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\PerformSearchResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\PerformSearchResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * 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](https://en.wikipedia.org/wiki/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.
+ *
+ *
+ * @param string $query
+ * @param ?float $sectionId
+ * @param ?float $limit
+ * @return \LukeHagar\Plex_API\Models\Operations\PerformVoiceSearchResponse
+ */
+ public function performVoiceSearch(
+ string $query,
+ ?float $sectionId = null,
+ ?float $limit = null,
+ ): \LukeHagar\Plex_API\Models\Operations\PerformVoiceSearchResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\PerformVoiceSearchRequest();
+ $request->query = $query;
+ $request->sectionId = $sectionId;
+ $request->limit = $limit;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/hubs/search/voice');
+
+ $options = ['http_errors' => false];
+ $options = array_merge_recursive($options, Utils\Utils::getQueryParams(\LukeHagar\Plex_API\Models\Operations\PerformVoiceSearchRequest::class, $request, null));
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\PerformVoiceSearchResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\PerformVoiceSearchResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Get Search Results
+ *
+ * This will search the database for the string provided.
+ *
+ * @param string $query
+ * @return \LukeHagar\Plex_API\Models\Operations\GetSearchResultsResponse
+ */
+ public function getSearchResults(
+ string $query,
+ ): \LukeHagar\Plex_API\Models\Operations\GetSearchResultsResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\GetSearchResultsRequest();
+ $request->query = $query;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/search');
+
+ $options = ['http_errors' => false];
+ $options = array_merge_recursive($options, Utils\Utils::getQueryParams(\LukeHagar\Plex_API\Models\Operations\GetSearchResultsRequest::class, $request, null));
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetSearchResultsResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->twoHundredApplicationJsonObject = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetSearchResultsResponseBody', 'json');
+ }
+ }
+ else if ($httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->fourHundredAndOneApplicationJsonObject = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetSearchResultsSearchResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+}
\ No newline at end of file
diff --git a/src/Security.php b/src/Security.php
new file mode 100644
index 0000000..3b07c68
--- /dev/null
+++ b/src/Security.php
@@ -0,0 +1,121 @@
+sdkConfiguration = $sdkConfig;
+ }
+
+ /**
+ * 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.
+ *
+ *
+ * @param \LukeHagar\Plex_API\Models\Operations\QueryParamType $type
+ * @param \LukeHagar\Plex_API\Models\Operations\Scope $scope
+ * @return \LukeHagar\Plex_API\Models\Operations\GetTransientTokenResponse
+ */
+ public function getTransientToken(
+ \LukeHagar\Plex_API\Models\Operations\QueryParamType $type,
+ \LukeHagar\Plex_API\Models\Operations\Scope $scope,
+ ): \LukeHagar\Plex_API\Models\Operations\GetTransientTokenResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\GetTransientTokenRequest();
+ $request->type = $type;
+ $request->scope = $scope;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/security/token');
+
+ $options = ['http_errors' => false];
+ $options = array_merge_recursive($options, Utils\Utils::getQueryParams(\LukeHagar\Plex_API\Models\Operations\GetTransientTokenRequest::class, $request, null));
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetTransientTokenResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetTransientTokenResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * 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.
+ *
+ *
+ * @param string $source
+ * @return \LukeHagar\Plex_API\Models\Operations\GetSourceConnectionInformationResponse
+ */
+ public function getSourceConnectionInformation(
+ string $source,
+ ): \LukeHagar\Plex_API\Models\Operations\GetSourceConnectionInformationResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\GetSourceConnectionInformationRequest();
+ $request->source = $source;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/security/resources');
+
+ $options = ['http_errors' => false];
+ $options = array_merge_recursive($options, Utils\Utils::getQueryParams(\LukeHagar\Plex_API\Models\Operations\GetSourceConnectionInformationRequest::class, $request, null));
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetSourceConnectionInformationResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetSourceConnectionInformationResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+}
\ No newline at end of file
diff --git a/src/Server.php b/src/Server.php
new file mode 100644
index 0000000..193969c
--- /dev/null
+++ b/src/Server.php
@@ -0,0 +1,383 @@
+sdkConfiguration = $sdkConfig;
+ }
+
+ /**
+ * Server Capabilities
+ *
+ * Server Capabilities
+ *
+ * @return \LukeHagar\Plex_API\Models\Operations\GetServerCapabilitiesResponse
+ */
+ public function getServerCapabilities(
+ ): \LukeHagar\Plex_API\Models\Operations\GetServerCapabilitiesResponse
+ {
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/');
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetServerCapabilitiesResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->twoHundredApplicationJsonObject = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetServerCapabilitiesResponseBody', 'json');
+ }
+ }
+ else if ($httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->fourHundredAndOneApplicationJsonObject = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetServerCapabilitiesServerResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Get Server Preferences
+ *
+ * Get Server Preferences
+ *
+ * @return \LukeHagar\Plex_API\Models\Operations\GetServerPreferencesResponse
+ */
+ public function getServerPreferences(
+ ): \LukeHagar\Plex_API\Models\Operations\GetServerPreferencesResponse
+ {
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/:/prefs');
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetServerPreferencesResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetServerPreferencesResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Get Available Clients
+ *
+ * Get Available Clients
+ *
+ * @return \LukeHagar\Plex_API\Models\Operations\GetAvailableClientsResponse
+ */
+ public function getAvailableClients(
+ ): \LukeHagar\Plex_API\Models\Operations\GetAvailableClientsResponse
+ {
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/clients');
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetAvailableClientsResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->responseBodies = $serializer->deserialize((string)$httpResponse->getBody(), 'array', 'json');
+ }
+ }
+ else if ($httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetAvailableClientsResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Get Devices
+ *
+ * Get Devices
+ *
+ * @return \LukeHagar\Plex_API\Models\Operations\GetDevicesResponse
+ */
+ public function getDevices(
+ ): \LukeHagar\Plex_API\Models\Operations\GetDevicesResponse
+ {
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/devices');
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetDevicesResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->twoHundredApplicationJsonObject = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetDevicesResponseBody', 'json');
+ }
+ }
+ else if ($httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->fourHundredAndOneApplicationJsonObject = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetDevicesServerResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Get Server Identity
+ *
+ * Get Server Identity
+ *
+ * @return \LukeHagar\Plex_API\Models\Operations\GetServerIdentityResponse
+ */
+ public function getServerIdentity(
+ ): \LukeHagar\Plex_API\Models\Operations\GetServerIdentityResponse
+ {
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/identity');
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetServerIdentityResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->twoHundredApplicationJsonObject = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetServerIdentityResponseBody', 'json');
+ }
+ }
+ else if ($httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->fourHundredAndOneApplicationJsonObject = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetServerIdentityServerResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Get MyPlex Account
+ *
+ * Returns MyPlex Account Information
+ *
+ * @return \LukeHagar\Plex_API\Models\Operations\GetMyPlexAccountResponse
+ */
+ public function getMyPlexAccount(
+ ): \LukeHagar\Plex_API\Models\Operations\GetMyPlexAccountResponse
+ {
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/myplex/account');
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetMyPlexAccountResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->twoHundredApplicationJsonObject = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetMyPlexAccountResponseBody', 'json');
+ }
+ }
+ else if ($httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->fourHundredAndOneApplicationJsonObject = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetMyPlexAccountServerResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Get a Resized Photo
+ *
+ * Plex's Photo transcoder is used throughout the service to serve images at specified sizes.
+ *
+ *
+ * @param \LukeHagar\Plex_API\Models\Operations\GetResizedPhotoRequest $request
+ * @return \LukeHagar\Plex_API\Models\Operations\GetResizedPhotoResponse
+ */
+ public function getResizedPhoto(
+ ?\LukeHagar\Plex_API\Models\Operations\GetResizedPhotoRequest $request,
+ ): \LukeHagar\Plex_API\Models\Operations\GetResizedPhotoResponse
+ {
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/photo/:/transcode');
+
+ $options = ['http_errors' => false];
+ $options = array_merge_recursive($options, Utils\Utils::getQueryParams(\LukeHagar\Plex_API\Models\Operations\GetResizedPhotoRequest::class, $request, null));
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetResizedPhotoResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetResizedPhotoResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Get Server List
+ *
+ * Get Server List
+ *
+ * @return \LukeHagar\Plex_API\Models\Operations\GetServerListResponse
+ */
+ public function getServerList(
+ ): \LukeHagar\Plex_API\Models\Operations\GetServerListResponse
+ {
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/servers');
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetServerListResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->twoHundredApplicationJsonObject = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetServerListResponseBody', 'json');
+ }
+ }
+ else if ($httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->fourHundredAndOneApplicationJsonObject = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetServerListServerResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+}
\ No newline at end of file
diff --git a/src/ServerProtocol.php b/src/ServerProtocol.php
new file mode 100644
index 0000000..2441e67
--- /dev/null
+++ b/src/ServerProtocol.php
@@ -0,0 +1,16 @@
+sdkConfiguration = $sdkConfig;
+ }
+
+ /**
+ * Get Active Sessions
+ *
+ * This will retrieve the "Now Playing" Information of the PMS.
+ *
+ * @return \LukeHagar\Plex_API\Models\Operations\GetSessionsResponse
+ */
+ public function getSessions(
+ ): \LukeHagar\Plex_API\Models\Operations\GetSessionsResponse
+ {
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/status/sessions');
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetSessionsResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetSessionsResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Get Session History
+ *
+ * This will Retrieve a listing of all history views.
+ *
+ * @return \LukeHagar\Plex_API\Models\Operations\GetSessionHistoryResponse
+ */
+ public function getSessionHistory(
+ ): \LukeHagar\Plex_API\Models\Operations\GetSessionHistoryResponse
+ {
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/status/sessions/history/all');
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetSessionHistoryResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetSessionHistoryResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Get Transcode Sessions
+ *
+ * Get Transcode Sessions
+ *
+ * @return \LukeHagar\Plex_API\Models\Operations\GetTranscodeSessionsResponse
+ */
+ public function getTranscodeSessions(
+ ): \LukeHagar\Plex_API\Models\Operations\GetTranscodeSessionsResponse
+ {
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/transcode/sessions');
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetTranscodeSessionsResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->twoHundredApplicationJsonObject = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetTranscodeSessionsResponseBody', 'json');
+ }
+ }
+ else if ($httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->fourHundredAndOneApplicationJsonObject = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetTranscodeSessionsSessionsResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Stop a Transcode Session
+ *
+ * Stop a Transcode Session
+ *
+ * @param string $sessionKey
+ * @return \LukeHagar\Plex_API\Models\Operations\StopTranscodeSessionResponse
+ */
+ public function stopTranscodeSession(
+ string $sessionKey,
+ ): \LukeHagar\Plex_API\Models\Operations\StopTranscodeSessionResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\StopTranscodeSessionRequest();
+ $request->sessionKey = $sessionKey;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/transcode/sessions/{sessionKey}', \LukeHagar\Plex_API\Models\Operations\StopTranscodeSessionRequest::class, $request);
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('DELETE', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\StopTranscodeSessionResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\StopTranscodeSessionResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+}
\ No newline at end of file
diff --git a/src/Updater.php b/src/Updater.php
new file mode 100644
index 0000000..8fd49ce
--- /dev/null
+++ b/src/Updater.php
@@ -0,0 +1,159 @@
+sdkConfiguration = $sdkConfig;
+ }
+
+ /**
+ * Querying status of updates
+ *
+ * Querying status of updates
+ *
+ * @return \LukeHagar\Plex_API\Models\Operations\GetUpdateStatusResponse
+ */
+ public function getUpdateStatus(
+ ): \LukeHagar\Plex_API\Models\Operations\GetUpdateStatusResponse
+ {
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/updater/status');
+
+ $options = ['http_errors' => false];
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetUpdateStatusResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetUpdateStatusResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Checking for updates
+ *
+ * Checking for updates
+ *
+ * @param ?\LukeHagar\Plex_API\Models\Operations\Download $download
+ * @return \LukeHagar\Plex_API\Models\Operations\CheckForUpdatesResponse
+ */
+ public function checkForUpdates(
+ ?\LukeHagar\Plex_API\Models\Operations\Download $download = null,
+ ): \LukeHagar\Plex_API\Models\Operations\CheckForUpdatesResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\CheckForUpdatesRequest();
+ $request->download = $download;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/updater/check');
+
+ $options = ['http_errors' => false];
+ $options = array_merge_recursive($options, Utils\Utils::getQueryParams(\LukeHagar\Plex_API\Models\Operations\CheckForUpdatesRequest::class, $request, null));
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('PUT', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\CheckForUpdatesResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\CheckForUpdatesResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Apply Updates
+ *
+ * Note that these two parameters are effectively mutually exclusive. The `tonight` parameter takes precedence and `skip` will be ignored if `tonight` is also passed
+ *
+ *
+ * @param ?\LukeHagar\Plex_API\Models\Operations\Tonight $tonight
+ * @param ?\LukeHagar\Plex_API\Models\Operations\Skip $skip
+ * @return \LukeHagar\Plex_API\Models\Operations\ApplyUpdatesResponse
+ */
+ public function applyUpdates(
+ ?\LukeHagar\Plex_API\Models\Operations\Tonight $tonight = null,
+ ?\LukeHagar\Plex_API\Models\Operations\Skip $skip = null,
+ ): \LukeHagar\Plex_API\Models\Operations\ApplyUpdatesResponse
+ {
+ $request = new \LukeHagar\Plex_API\Models\Operations\ApplyUpdatesRequest();
+ $request->tonight = $tonight;
+ $request->skip = $skip;
+
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/updater/apply');
+
+ $options = ['http_errors' => false];
+ $options = array_merge_recursive($options, Utils\Utils::getQueryParams(\LukeHagar\Plex_API\Models\Operations\ApplyUpdatesRequest::class, $request, null));
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('PUT', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\ApplyUpdatesResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400 or $httpResponse->getStatusCode() === 500) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\ApplyUpdatesResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+}
\ No newline at end of file
diff --git a/src/Utils/EnumHandler.php b/src/Utils/EnumHandler.php
new file mode 100644
index 0000000..2de07ba
--- /dev/null
+++ b/src/Utils/EnumHandler.php
@@ -0,0 +1,54 @@
+ GraphNavigator::DIRECTION_SERIALIZATION,
+ 'format' => 'json',
+ 'type' => 'enum',
+ 'method' => 'serializeEnumToJson',
+ ],
+ [
+ 'direction' => GraphNavigator::DIRECTION_DESERIALIZATION,
+ 'format' => 'json',
+ 'type' => 'enum',
+ 'method' => 'deserializeEnumFromJson',
+ ],
+ ];
+ }
+
+ /** @phpstan-ignore-next-line */
+ public function serializeEnumToJson(JsonSerializationVisitor $visitor, \BackedEnum $data, array $type, Context $context): string|int
+ {
+ return $data->value;
+ }
+
+ /** @phpstan-ignore-next-line */
+ public function deserializeEnumFromJson(JsonDeserializationVisitor $visitor, mixed $data, array $type, Context $context): mixed
+ {
+ $type = $type['params'][0]['name'] ?? null;
+ if (null === $type || !is_a($type, \BackedEnum::class, true)) {
+ throw new \LogicException();
+ }
+
+ return $type::from($data);
+ }
+}
diff --git a/src/Utils/FormMetadata.php b/src/Utils/FormMetadata.php
new file mode 100644
index 0000000..2f0775c
--- /dev/null
+++ b/src/Utils/FormMetadata.php
@@ -0,0 +1,71 @@
+ 2) { /** @phpstan-ignore-line */
+ continue;
+ }
+
+ switch ($parts[0]) {
+ case "name":
+ $name = $parts[1];
+ break;
+ case "json":
+ $json = $parts[1] === "true";
+ break;
+ case "style":
+ $style = $parts[1];
+ break;
+ case "explode":
+ $explode = $parts[1] === "true";
+ break;
+ case "dateTimeFormat":
+ $dateTimeFormat = $parts[1];
+ break;
+ }
+ }
+
+ return new FormMetadata($name, $json, $style, $explode, $dateTimeFormat);
+ }
+
+ private function __construct(string $name, bool $json, string $style, bool $explode, string $dateTimeFormat)
+ {
+ $this->name = $name;
+ $this->json = $json;
+ $this->style = $style;
+ $this->explode = $explode;
+ $this->dateTimeFormat = $dateTimeFormat;
+ }
+}
diff --git a/src/Utils/Headers.php b/src/Utils/Headers.php
new file mode 100644
index 0000000..b2149f3
--- /dev/null
+++ b/src/Utils/Headers.php
@@ -0,0 +1,114 @@
+
+ */
+ public function parseHeaders(mixed $headers): array
+ {
+ $out = [];
+
+ if ($headers === null) {
+ return $out;
+ }
+
+ foreach ($headers as $field => $value) {
+ if ($value === null) {
+ continue;
+ }
+
+ $metadata = $this->parseHeaderMetadata(new ReflectionProperty(get_class($headers), $field));
+ if ($metadata === null) {
+ continue;
+ }
+
+ $value = $this->serializeHeader($metadata, $value);
+
+ if (empty($value)) {
+ continue;
+ }
+
+ $out[$metadata->name] = $value;
+ }
+
+ return $out;
+ }
+
+ private function serializeHeader(ParamsMetadata $metadata, mixed $value): string
+ {
+ switch (gettype($value)) {
+ case 'object':
+ $items = [];
+
+ foreach ($value as $field => $fieldValue) { /** @phpstan-ignore-line */
+ if ($fieldValue === null) {
+ continue;
+ }
+
+ $fieldMetadata = $this->parseHeaderMetadata(new ReflectionProperty(get_class($value), $field));
+ if ($fieldMetadata === null || empty($fieldMetadata->name)) {
+ continue;
+ }
+
+ if ($metadata->explode) {
+ $items[] = $fieldMetadata->name . '=' . valToString($fieldValue);
+ } else {
+ $items[] = $fieldMetadata->name;
+ $items[] = valToString($fieldValue);
+ }
+ }
+
+ return implode(',', $items);
+ case 'array':
+ if (array_is_list($value)) {
+ return implode(',', array_map(fn ($v) => valToString($v), $value));
+ } else {
+ $items = [];
+
+ foreach ($value as $field => $fieldValue) {
+ if ($fieldValue === null) {
+ continue;
+ }
+
+ if ($metadata->explode) {
+ $items[] = $field . '=' . valToString($fieldValue);
+ } else {
+ $items[] = $field;
+ $items[] = valToString($fieldValue);
+ }
+ }
+
+ return implode(',', $items);
+ }
+ default:
+ return valToString($value);
+ }
+ }
+
+ private function parseHeaderMetadata(ReflectionProperty $property): ParamsMetadata | null
+ {
+ $metadataStr = SpeakeasyMetadata::find($property->getAttributes(SpeakeasyMetadata::class), "header");
+ if ($metadataStr === null) {
+ return null;
+ }
+
+ $metadata = ParamsMetadata::parse($metadataStr);
+ if ($metadata === null) {
+ return null;
+ }
+
+ return $metadata;
+ }
+}
diff --git a/src/Utils/JSON.php b/src/Utils/JSON.php
new file mode 100644
index 0000000..d0ff56d
--- /dev/null
+++ b/src/Utils/JSON.php
@@ -0,0 +1,22 @@
+configureHandlers(function (\JMS\Serializer\Handler\HandlerRegistry $registry) {
+ $registry->registerSubscribingHandler(new MixedJSONHandler());
+ $registry->registerSubscribingHandler(new EnumHandler());
+ })
+ ->addDefaultHandlers()->build();
+ }
+}
\ No newline at end of file
diff --git a/src/Utils/MixedJSONHandler.php b/src/Utils/MixedJSONHandler.php
new file mode 100644
index 0000000..f80c67a
--- /dev/null
+++ b/src/Utils/MixedJSONHandler.php
@@ -0,0 +1,63 @@
+ GraphNavigator::DIRECTION_SERIALIZATION,
+ 'format' => 'json',
+ 'type' => 'mixed',
+ 'method' => 'serializeMixedToJson',
+ ],
+ [
+ 'direction' => GraphNavigator::DIRECTION_DESERIALIZATION,
+ 'format' => 'json',
+ 'type' => 'mixed',
+ 'method' => 'deserializeMixedToJson',
+ ],
+ ];
+ }
+
+ /** @phpstan-ignore-next-line */
+ public function serializeMixedToJson(JsonSerializationVisitor $visitor, mixed $any, array $type, Context $context): string
+ {
+ $serializer = JSON::createSerializer();
+ $s = $serializer->serialize($any, 'json');
+ $s = ltrim($s, '"');
+ $s = rtrim($s, '"');
+ return $s;
+ }
+
+ /** @phpstan-ignore-next-line */
+ public function deserializeMixedToJson(JsonDeserializationVisitor $visitor, mixed $data, array $type, Context $context): mixed
+ {
+ if (!is_string($data)) {
+ return $data;
+ }
+
+ $decoded = json_decode($data, true);
+ if (json_last_error() === JSON_ERROR_NONE && $data !== $decoded) {
+ return $decoded;
+ }
+
+ return $data;
+ }
+}
diff --git a/src/Utils/MultipartMetadata.php b/src/Utils/MultipartMetadata.php
new file mode 100644
index 0000000..1285bff
--- /dev/null
+++ b/src/Utils/MultipartMetadata.php
@@ -0,0 +1,71 @@
+ 2) { /** @phpstan-ignore-line */
+ continue;
+ }
+
+ switch ($parts[0]) {
+ case "name":
+ $name = $parts[1];
+ break;
+ case "file":
+ $file = $parts[1] === "true";
+ break;
+ case "content":
+ $content = $parts[1] === "true";
+ break;
+ case "json":
+ $json = $parts[1] === "true";
+ break;
+ case "dateTimeFormat":
+ $dateTimeFormat = $parts[1];
+ break;
+ }
+ }
+
+ return new MultipartMetadata($name, $file, $content, $json, $dateTimeFormat);
+ }
+
+ private function __construct(string $name, bool $file, bool $content, bool $json, string $dateTimeFormat)
+ {
+ $this->name = $name;
+ $this->file = $file;
+ $this->content = $content;
+ $this->json = $json;
+ $this->dateTimeFormat = $dateTimeFormat;
+ }
+}
diff --git a/src/Utils/ParamsMetadata.php b/src/Utils/ParamsMetadata.php
new file mode 100644
index 0000000..3966ae2
--- /dev/null
+++ b/src/Utils/ParamsMetadata.php
@@ -0,0 +1,91 @@
+ 2) { /** @phpstan-ignore-line */
+ continue;
+ }
+
+ switch ($parts[0]) {
+ case "name":
+ $name = $parts[1];
+ break;
+ case "style":
+ $style = $parts[1];
+ break;
+ case "explode":
+ $explode = $parts[1] === "true";
+ break;
+ case "serialization":
+ $serialization = $parts[1];
+ break;
+ case "dateTimeFormat":
+ $dateTimeFormat = $parts[1];
+ break;
+ }
+ }
+
+ return new ParamsMetadata($type, $style, $explode, $name, $serialization, $dateTimeFormat);
+ }
+
+ private function __construct(string $type, string $style, bool $explode, string $name, string $serialization, string $dateTimeFormat)
+ {
+ $this->type = $type;
+ $this->style = $style;
+ $this->explode = $explode;
+ $this->name = $name;
+ $this->serialization = $serialization;
+ $this->dateTimeFormat = $dateTimeFormat;
+ }
+}
diff --git a/src/Utils/PathParameters.php b/src/Utils/PathParameters.php
new file mode 100644
index 0000000..86ef2e5
--- /dev/null
+++ b/src/Utils/PathParameters.php
@@ -0,0 +1,155 @@
+>> $globals
+ * @return array
+ */
+ public function parsePathParams(string $type, mixed $pathParams, array $globals): array
+ {
+ $parsed = [];
+
+ $fields = array_keys(get_class_vars($type));
+
+ foreach ($fields as $field) {
+ $value = $pathParams !== null ? $pathParams->{$field} : null;
+ $value = populateGlobal($value, 'pathParam', $field, $globals);
+
+ if ($value === null) {
+ continue;
+ }
+
+ $requestMetadata = RequestBodies::parseRequestMetadata(new ReflectionProperty($type, $field));
+ if ($requestMetadata !== null) {
+ continue;
+ }
+
+ $metadata = $this->parsePathParamsMetadata(new ReflectionProperty($type, $field));
+ if ($metadata === null) {
+ continue;
+ }
+
+ if (!empty($metadata->serialization)) {
+ $parsed = array_merge_recursive($parsed, $this->parseSerializationParams($metadata, $value));
+ } else {
+ switch ($metadata->style) {
+ case "simple":
+ $parsed = array_merge_recursive($parsed, $this->parseSimplePathParams($metadata, $value));
+ break;
+ default:
+ throw new \Exception("Unsupported style: " . $metadata->style);
+ }
+ }
+ }
+
+ return $parsed;
+ }
+
+ /**
+ * @param ParamsMetadata $metadata
+ * @param mixed $value
+ * @return array
+ */
+ private function parseSimplePathParams(ParamsMetadata $metadata, mixed $value): array
+ {
+ $pathParams = [];
+
+ switch (gettype($value)) {
+ case "object":
+ $vals = [];
+
+ foreach ($value as $field => $fieldValue) { /** @phpstan-ignore-line */
+ if ($fieldValue === null) {
+ continue;
+ }
+
+ $fieldMetadata = $this->parsePathParamsMetadata(new ReflectionProperty(get_class($value), $field));
+ if ($fieldMetadata === null) {
+ continue;
+ }
+
+ if ($metadata->explode) {
+ $vals[] = sprintf("%s=%s", $fieldMetadata->name, valToString($fieldValue));
+ } else {
+ $vals[] = sprintf("%s,%s", $fieldMetadata->name, valToString($fieldValue));
+ }
+ }
+
+ $pathParams[$metadata->name] = implode(",", $vals);
+ break;
+ case "array":
+ $vals = [];
+
+ if (array_is_list($value)) {
+ foreach ($value as $val) {
+ $vals[] = valToString($val);
+ }
+ } else {
+ foreach ($value as $key => $val) {
+ if ($metadata->explode) {
+ $vals[] = sprintf("%s=%s", $key, valToString($val));
+ } else {
+ $vals[] = sprintf("%s,%s", $key, valToString($val));
+ }
+ }
+ }
+
+ $pathParams[$metadata->name] = implode(",", $vals);
+ break;
+ default:
+ $pathParams[$metadata->name] = valToString($value);
+ break;
+ }
+
+ return $pathParams;
+ }
+
+ private function parsePathParamsMetadata(ReflectionProperty $property): ParamsMetadata | null
+ {
+ $metadataStr = SpeakeasyMetadata::find($property->getAttributes(SpeakeasyMetadata::class), "pathParam");
+ if ($metadataStr === null) {
+ return null;
+ }
+
+ $metadata = ParamsMetadata::parse($metadataStr);
+ if ($metadata === null) {
+ return null;
+ }
+
+ return $metadata;
+ }
+
+ /**
+ * @param ParamsMetadata $metadata
+ * @param mixed $value
+ * @return array
+ */
+ private function parseSerializationParams(ParamsMetadata $metadata, mixed $value): array
+ {
+ $params = [];
+
+ switch ($metadata->serialization) {
+ case "json":
+ $serializer = JSON::createSerializer();
+ $params[$metadata->name] = urlencode($serializer->serialize($value, 'json'));
+ break;
+ default:
+ throw new \Exception("Unsupported serialization: " . $metadata->serialization);
+ }
+
+ return $params;
+ }
+}
diff --git a/src/Utils/QueryParameters.php b/src/Utils/QueryParameters.php
new file mode 100644
index 0000000..306eeda
--- /dev/null
+++ b/src/Utils/QueryParameters.php
@@ -0,0 +1,276 @@
+>> $globals
+ * @return string
+ */
+ public function parseQueryParams(string $type, mixed $queryParams, array $globals): string | null
+ {
+ $parts = [];
+
+ $fields = array_keys(get_class_vars($type));
+
+ foreach ($fields as $field ) {
+ $value = $queryParams !== null ? $queryParams->{$field} : null;
+ $value = populateGlobal($value, 'queryParam', $field, $globals);
+
+ if ($value === null) {
+ continue;
+ }
+
+ $requestMetadata = RequestBodies::parseRequestMetadata(new ReflectionProperty($type, $field));
+ if ($requestMetadata !== null) {
+ continue;
+ }
+
+ $metadata = $this->parseQueryParamsMetadata(new ReflectionProperty($type, $field));
+ if ($metadata === null) {
+ continue;
+ }
+
+ if (!empty($metadata->serialization)) {
+ $parts[] = $this->parseSerializationParams($metadata, $value);
+ } else {
+ switch ($metadata->style) {
+ case "deepObject":
+ $parts[] = $this->parseDeepObjectParams($metadata, $value);
+ break;
+ case "form":
+ $parts[] = $this->parseDelimitedParams($metadata, $value, ",");
+ break;
+ case "pipeDelimited":
+ $parts[] = $this->parseDelimitedParams($metadata, $value, "|");
+ break;
+ default:
+ throw new \Exception("Unsupported style: " . $metadata->style);
+ }
+ }
+ }
+
+ return empty($parts) ? null : implode("&", $parts);
+ }
+
+ /**
+ * @param ParamsMetadata $metadata
+ * @param mixed $value
+ * @return string
+ */
+ private function parseSerializationParams(ParamsMetadata $metadata, mixed $value): string
+ {
+ $queryParams = [];
+
+ switch ($metadata->serialization) {
+ case "json":
+ $serializer = JSON::createSerializer();
+ $queryParams[$metadata->name] = $serializer->serialize($value, 'json');
+ break;
+ default:
+ throw new \Exception("Unsupported serialization: " . $metadata->serialization);
+ }
+
+ return http_build_query($queryParams);
+ }
+
+ /**
+ * @param ParamsMetadata $metadata
+ * @param mixed $value
+ * @return string
+ */
+ private function parseDeepObjectParams(ParamsMetadata $metadata, mixed $value): string
+ {
+ $queryParams = [];
+
+ $dateTimeFormat = $metadata->dateTimeFormat;
+
+ switch (gettype($value)) {
+ case "object":
+ foreach ($value as $field => $val) { /** @phpstan-ignore-line */
+ if ($val === null) {
+ continue;
+ }
+
+ $fieldMetaData = $this->parseQueryParamsMetadata(new ReflectionProperty(get_class($value), $field));
+ if ($fieldMetaData === null) {
+ continue;
+ }
+
+ $dateTimeFormat = $fieldMetaData->dateTimeFormat;
+
+ $items = [];
+
+ if (gettype($val) == "array" && array_is_list($val)) {
+ foreach ($val as $item) {
+ $items[] = valToString($item, $dateTimeFormat);
+ }
+ } else {
+ $queryParams[$metadata->name . "[" . $fieldMetaData->name . "]"] = valToString($val, $dateTimeFormat);
+ }
+
+ if (count($items) > 0) {
+ $queryParams[$metadata->name . "[" . $fieldMetaData->name . "]"] = $items;
+ }
+ }
+ break;
+ case "array":
+ if (!array_is_list($value)) {
+ foreach ($value as $key => $val) {
+ if ($val === null) {
+ continue;
+ }
+
+ $items = [];
+
+ if (gettype($val) == "array" && array_is_list($val)) {
+ foreach ($val as $item) {
+ $items[] = valToString($item, $dateTimeFormat);
+ }
+ } else {
+ $queryParams[$metadata->name . "[" . $key . "]"] = valToString($val, $dateTimeFormat);
+ }
+
+ if (count($items) > 0) {
+ $queryParams[$metadata->name . "[" . $key . "]"] = $items;
+ }
+ }
+ }
+ break;
+ }
+
+ return $this->buildQueryString($queryParams);
+ }
+
+ /**
+ * @param ParamsMetadata $metadata
+ * @param mixed $value
+ * @param string $delimiter
+ * @return string
+ */
+ private function parseDelimitedParams(ParamsMetadata $metadata, mixed $value, string $delimiter): string
+ {
+ $queryParams = [];
+
+ $dateTimeFormat = $metadata->dateTimeFormat;
+
+ switch (gettype($value)) {
+ case "object":
+ $items = [];
+
+ foreach ($value as $field => $val) { /** @phpstan-ignore-line */
+ if ($val === null) {
+ continue;
+ }
+
+ $fieldMetaData = $this->parseQueryParamsMetadata(new ReflectionProperty(get_class($value), $field));
+ if ($fieldMetaData === null) {
+ continue;
+ }
+
+ $dateTimeFormat = $fieldMetaData->dateTimeFormat;
+
+ if ($metadata->explode) {
+ $queryParams[$fieldMetaData->name] = valToString($val, $dateTimeFormat);
+ } else {
+ $items[] = $fieldMetaData->name . $delimiter . valToString($val, $dateTimeFormat);
+ }
+ }
+
+ if (count($items) > 0) {
+ $queryParams[$metadata->name] = implode($delimiter, $items);
+ }
+ break;
+ case "array":
+ if (array_is_list($value)) {
+ $values = [];
+ $items = [];
+
+ foreach ($value as $item) {
+ if ($metadata->explode) {
+ $values[] = valToString($item, $dateTimeFormat);
+ } else {
+ $items[] = valToString($item, $dateTimeFormat);
+ }
+ }
+
+ if (count($items) > 0) {
+ $values[] = implode($delimiter, $items);
+ }
+
+ $queryParams[$metadata->name] = $values;
+ } else {
+ $items = [];
+
+ foreach ($value as $key => $val) {
+ if ($val === null) {
+ continue;
+ }
+
+ if ($metadata->explode) {
+ $queryParams[$key] = valToString($val, $dateTimeFormat);
+ } else {
+ $items[] = $key . $delimiter . valToString($val, $dateTimeFormat);
+ }
+ }
+
+ if (count($items) > 0) {
+ $queryParams[$metadata->name] = implode($delimiter, $items);
+ }
+ }
+ break;
+ default:
+ $queryParams[$metadata->name] = valToString($value, $dateTimeFormat);
+ }
+
+ return $this->buildQueryString($queryParams);
+ }
+
+ /**
+ * @param array|string> $queryParams
+ */
+ private function buildQueryString(array $queryParams): string
+ {
+ ksort($queryParams);
+
+ $parts = [];
+ foreach ($queryParams as $key => $value) {
+ if (is_array($value)) {
+ foreach ($value as $item) {
+ $parts[] = urlencode($key) . "=" . urlencode($item);
+ }
+ } else {
+ $parts[] = urlencode($key) . "=" . urlencode($value);
+ }
+ }
+
+ return implode("&", $parts);
+ }
+
+ private function parseQueryParamsMetadata(ReflectionProperty $property): ParamsMetadata | null
+ {
+ $metadataStr = SpeakeasyMetadata::find($property->getAttributes(SpeakeasyMetadata::class), "queryParam");
+ if ($metadataStr === null) {
+ return null;
+ }
+
+ $metadata = ParamsMetadata::parse($metadataStr);
+ if ($metadata === null) {
+ return null;
+ }
+
+ return $metadata;
+ }
+}
+
diff --git a/src/Utils/RequestBodies.php b/src/Utils/RequestBodies.php
new file mode 100644
index 0000000..87f792b
--- /dev/null
+++ b/src/Utils/RequestBodies.php
@@ -0,0 +1,366 @@
+ 'application/json',
+ 'form' => 'application/x-www-form-urlencoded',
+ 'multipart' => 'multipart/form-data',
+ 'raw' => 'application/octet-stream',
+ 'string' => 'text/plain',
+ ];
+
+ /**
+ * @param mixed $request
+ * @param string $requestFieldName
+ * @param string $serializationMethod
+ * @return array|null
+ */
+ public function serializeRequestBody(mixed $request, string $requestFieldName, string $serializationMethod): array | null
+ {
+ if ($request === null) {
+ return null;
+ }
+
+ if (gettype($request) !== 'object' || !property_exists($request, $requestFieldName)) {
+ return $this->serializeContentType($requestFieldName, RequestBodies::SERIALIZATION_METHOD_TO_CONTENT_TYPE[$serializationMethod], $request);
+ }
+
+ $requestVal = $request->{$requestFieldName};
+ if ($requestVal === null) {
+ return null;
+ }
+
+ $metadata = RequestBodies::parseRequestMetadata(new ReflectionProperty(get_class($request), $requestFieldName));
+ if ($metadata === null) {
+ throw new \Exception("Missing request metadata for field $requestFieldName");
+ }
+
+ return $this->serializeContentType($requestFieldName, $metadata->mediaType, $requestVal);
+ }
+
+ /**
+ * @param string $fieldName
+ * @param string $mediaType
+ * @param mixed $value
+ * @return array|null
+ */
+ private function serializeContentType(string $fieldName, string $mediaType, mixed $value): array | null
+ {
+ if ($value === null) {
+ return null;
+ }
+
+ $options = [];
+
+ if (preg_match('/(application|text)\/.*?\+*json.*/', $mediaType)) {
+ $serializer = JSON::createSerializer();
+ $options['body'] = $serializer->serialize($value, 'json');
+ $options['headers']['content-type'] = $mediaType;
+ } else if (preg_match('/multipart\/.*/', $mediaType)) {
+ return $this->serializeMultipart($value);
+ } else if (preg_match('/application\/x-www-form-urlencoded.*/', $mediaType)) {
+ return $this->serializeFormData($fieldName, $value);
+ } else {
+ $options['headers']['content-type'] = $mediaType;
+ $type = gettype($value);
+ switch ($type) {
+ case 'string':
+ $options['body'] = $value;
+ break;
+ default:
+ throw new \Exception("Invalid request body type $type for field $fieldName");
+ }
+ }
+
+ return $options;
+ }
+
+ /**
+ * @param mixed $value
+ * @return array
+ */
+ private function serializeMultipart(mixed $value): array
+ {
+ $options = [
+ 'multipart' => [],
+ ];
+
+ foreach ($value as $field => $val) {
+ if ($val === null) {
+ continue;
+ }
+
+ $metadata = $this->parseMultipartMetadata(new ReflectionProperty(get_class($value), $field));
+ if ($metadata === null) {
+ continue;
+ }
+
+ if ($metadata->file) {
+ $options['multipart'][] = $this->serializeMultipartFile($val);
+ } else if ($metadata->json) {
+ $serializer = JSON::createSerializer();
+ $options['multipart'][] = [
+ 'name' => $metadata->name,
+ 'headers' => [
+ 'Content-Type' => 'application/json',
+ ],
+ 'contents' => $serializer->serialize($val, 'json'),
+ ];
+ } else {
+ $dateTimeFormat = $metadata->dateTimeFormat;
+
+ if (gettype($val) === 'array' && array_is_list($val)) {
+ foreach ($value as $item) {
+ $options['multipart'][] = [
+ 'name' => $metadata->name . '[]',
+ 'contents' => valToString($item, $dateTimeFormat)
+ ];
+ }
+ } else {
+ $options['multipart'][] = [
+ 'name' => $metadata->name,
+ 'contents' => valToString($val, $dateTimeFormat),
+ ];
+ }
+ }
+ }
+
+ return $options;
+ }
+
+ /**
+ * @param mixed $value
+ * @return array
+ */
+ private function serializeMultipartFile(mixed $value): array
+ {
+ if (gettype($value) != 'object') {
+ throw new \Exception("Invalid type for multipart/form-data file");
+ }
+
+ $name = "";
+ $filename = "";
+ $content = "";
+
+ foreach ($value as $field => $val) { /** @phpstan-ignore-line */
+ if ($val === null) {
+ continue;
+ }
+
+ $metadata = $this->parseMultipartMetadata(new ReflectionProperty(get_class($value), $field));
+ if ($metadata === null || (!$metadata->content && empty($metadata->name))) {
+ continue;
+ }
+
+ if ($metadata->content) {
+ $content = $val;
+ } else {
+ $name = $metadata->name;
+ $filename = $val;
+ }
+ }
+
+ if (empty($name) || empty($filename) || empty($content)) {
+ throw new \Exception("Invalid multipart/form-data file");
+ }
+
+ return [
+ 'name' => $name,
+ 'contents' => $content,
+ 'filename' => $filename,
+ ];
+ }
+
+ /**
+ * @param string $fieldName
+ * @param mixed $value
+ * @return array
+ */
+ private function serializeFormData(string $fieldName, mixed $value): array
+ {
+ $options = [
+ 'form_params' => [],
+ ];
+
+ switch (gettype($value)) {
+ case 'object':
+ foreach ($value as $field => $val) { /** @phpstan-ignore-line */
+ if ($val === null) {
+ continue;
+ }
+
+ $metadata = $this->parseFormMetadata(new ReflectionProperty(get_class($value), $field));
+ if ($metadata === null) {
+ continue;
+ }
+
+ if ($metadata->json) {
+ $serializer = JSON::createSerializer();
+ $options['form_params'][$metadata->name] = $serializer->serialize($val, 'json');
+ } else {
+ switch ($metadata->style) {
+ case 'form':
+ $values = $this->serializeForm($metadata, $val);
+ foreach ($values as $k => $v) {
+ $options['form_params'][$k] = $v;
+ }
+ break;
+ default:
+ throw new \Exception("Invalid form style for field $field");
+ }
+ }
+ }
+ break;
+ case 'array':
+ if (array_is_list($value)) {
+ throw new \Exception("Invalid request body type for field $fieldName");
+ } else {
+ foreach ($value as $k => $v) {
+ $options['form_params'][$k] = valToString($v);
+ }
+ }
+ break;
+ default:
+ throw new \Exception("Invalid request body type for field $fieldName");
+ }
+
+ return $options;
+ }
+
+ /**
+ * @param FormMetadata $metadata
+ * @param mixed $value
+ * @return array
+ */
+ private function serializeForm(FormMetadata $metadata, mixed $value): array
+ {
+ $values = [];
+
+ $dateTimeFormat = $metadata->dateTimeFormat;
+
+ switch (gettype($value)) {
+ case 'object':
+ switch (get_class($value)) {
+ case 'DateTime':
+ $values[$metadata->name] = valToString($value, $dateTimeFormat);
+ break;
+ default:
+ if (is_a($value, \BackedEnum::class, true)) {
+ $values[$metadata->name] = valToString($value);
+ } else {
+ $items = [];
+
+ foreach ($value as $field => $val) { /** @phpstan-ignore-line */
+ if ($val === null) {
+ continue;
+ }
+
+ $fieldMetadata = $this->parseFormMetadata(new ReflectionProperty(get_class($value), $field));
+ if ($fieldMetadata === null || empty($fieldMetadata->name)) {
+ continue;
+ }
+
+ if ($metadata->explode) {
+ $values[$fieldMetadata->name] = valToString($val, $fieldMetadata->dateTimeFormat);
+ } else {
+ $items[] = sprintf('%s,%s', $fieldMetadata->name, valToString($val));
+ }
+ }
+
+ if (count($items) > 0) {
+ $values[$metadata->name] = implode(',', $items);
+ }
+ }
+ break;
+ }
+ break;
+ case 'array':
+ if (array_is_list($value)) {
+ foreach ($value as $v) {
+ $values[$metadata->name] = valToString($v, $dateTimeFormat);
+ }
+ } else {
+ $items = [];
+
+ foreach ($value as $k => $v) {
+ if ($metadata->explode) {
+ $values[$k] = valToString($v, $dateTimeFormat);
+ } else {
+ $items[] = sprintf('%s,%s', $k, valToString($v, $dateTimeFormat));
+ }
+ }
+
+ if (count($items) > 0) {
+ $values[$metadata->name] = implode(',', $items);
+ }
+ }
+ break;
+ default:
+ $values[$metadata->name] = valToString($value, $dateTimeFormat);
+ break;
+ }
+
+ return $values;
+ }
+
+ public static function parseRequestMetadata(ReflectionProperty $property): RequestMetadata | null
+ {
+ $attributes = $property->getAttributes(SpeakeasyMetadata::class);
+ if (count($attributes) !== 1) {
+ return null;
+ }
+
+ $arguments = $attributes[0]->getArguments();
+ if (count($arguments) !== 1) {
+ return null;
+ }
+
+ $metadata = RequestMetadata::parse($arguments[0]);
+ if ($metadata === null) {
+ return null;
+ }
+
+ return $metadata;
+ }
+
+ private function parseMultipartMetadata(ReflectionProperty $property): MultipartMetadata | null
+ {
+ $metadataStr = SpeakeasyMetadata::find($property->getAttributes(SpeakeasyMetadata::class), "multipartForm");
+ if ($metadataStr === null) {
+ return null;
+ }
+
+ $metadata = MultipartMetadata::parse($metadataStr);
+ if ($metadata === null) {
+ return null;
+ }
+
+ return $metadata;
+ }
+
+ private function parseFormMetadata(ReflectionProperty $property): FormMetadata | null
+ {
+ $metadataStr = SpeakeasyMetadata::find($property->getAttributes(SpeakeasyMetadata::class), "form");
+ if ($metadataStr === null) {
+ return null;
+ }
+
+ $metadata = FormMetadata::parse($metadataStr);
+ if ($metadata === null) {
+ return null;
+ }
+
+ return $metadata;
+ }
+}
diff --git a/src/Utils/RequestMetadata.php b/src/Utils/RequestMetadata.php
new file mode 100644
index 0000000..5c9debe
--- /dev/null
+++ b/src/Utils/RequestMetadata.php
@@ -0,0 +1,47 @@
+ 2) { /** @phpstan-ignore-line */
+ continue;
+ }
+
+ switch ($parts[0]) {
+ case "mediaType":
+ $mediaType = $parts[1];
+ break;
+ }
+ }
+
+ return new RequestMetadata($mediaType);
+ }
+
+ private function __construct(string $mediaType)
+ {
+ $this->mediaType = $mediaType;
+ }
+}
diff --git a/src/Utils/Security.php b/src/Utils/Security.php
new file mode 100644
index 0000000..d460d16
--- /dev/null
+++ b/src/Utils/Security.php
@@ -0,0 +1,220 @@
+>
+ */
+ public function parseSecurity(mixed $security): array
+ {
+ $clientOptions = [
+ 'headers' => [],
+ 'query' => [],
+ ];
+
+ foreach ($security as $field => $value) {
+ if ($value === null) {
+ continue;
+ }
+
+ $metadata = $this->parseSecurityMetadata(new ReflectionProperty(get_class($security), $field));
+ if ($metadata === null) {
+ continue;
+ }
+
+ if ($metadata->option) {
+ $clientOptions = array_merge_recursive($clientOptions, $this->parseSecurityOption($value));
+ return $clientOptions;
+ } else if ($metadata->scheme) {
+ // Special case for basic auth which could be a flattened struct
+ if ($metadata->subtype === 'basic' && gettype($value) !== 'object') {
+ $clientOptions = array_merge_recursive($clientOptions, $this->parseSecurityScheme($security, $metadata));
+ return $clientOptions;
+ } else {
+ $clientOptions = array_merge_recursive($clientOptions, $this->parseSecurityScheme($value, $metadata));
+ }
+ }
+ }
+
+ return $clientOptions;
+ }
+
+ /**
+ * @param mixed $option
+ * @return array>
+ */
+ private function parseSecurityOption(mixed $option): array
+ {
+ $clientOptions = [
+ 'headers' => [],
+ 'query' => [],
+ ];
+
+ foreach ($option as $field => $value) {
+ if ($value === null) {
+ continue;
+ }
+
+ $metadata = $this->parseSecurityMetadata(new ReflectionProperty(get_class($option), $field));
+ if ($metadata === null) {
+ continue;
+ }
+
+ if ($metadata->scheme) {
+ $clientOptions = array_merge_recursive($clientOptions, $this->parseSecurityScheme($value, $metadata));
+ }
+ }
+
+ return $clientOptions;
+ }
+
+ /**
+ * @param mixed $scheme
+ * @param SecurityMetadata $metadata
+ * @return array>
+ */
+ private function parseSecurityScheme(mixed $scheme, SecurityMetadata $metadata): array
+ {
+ $clientOptions = [
+ 'headers' => [],
+ 'query' => [],
+ ];
+
+ if (gettype($scheme) === 'object') {
+ if ($metadata->type === 'http' && $metadata->subtype === 'basic') {
+ return $this->parseBasicAuthScheme($scheme);
+ }
+
+ foreach ($scheme as $field => $value) { /** @phpstan-ignore-line */
+ if ($value === null) {
+ continue;
+ }
+
+ $fieldMetadata = $this->parseSecurityMetadata(new ReflectionProperty(get_class($scheme), $field));
+ if ($fieldMetadata === null || empty($fieldMetadata->name)) {
+ continue;
+ }
+
+ $clientOptions = array_merge_recursive($clientOptions, $this->parseSecuritySchemeValue($value, $metadata, $fieldMetadata));
+ }
+ } else {
+ $clientOptions = array_merge_recursive($clientOptions, $this->parseSecuritySchemeValue($scheme, $metadata, $metadata));
+ }
+
+ return $clientOptions;
+ }
+
+ /**
+ * @param mixed $value
+ * @param SecurityMetadata $metadata
+ * @param SecurityMetadata $fieldMetadata
+ * @return array>
+ */
+ private function parseSecuritySchemeValue(mixed $value, SecurityMetadata $metadata, SecurityMetadata $fieldMetadata): array
+ {
+ $clientOptions = [
+ 'headers' => [],
+ 'query' => [],
+ ];
+
+ switch ($metadata->type) {
+ case 'apiKey':
+ switch ($metadata->subtype) {
+ case 'header':
+ $clientOptions['headers'][$fieldMetadata->name] = $value;
+ break;
+ case 'query':
+ $clientOptions['query'][$fieldMetadata->name] = $value;
+ break;
+ case 'cookie':
+ $clientOptions['headers']['Cookie'] = sprintf('%s=%s', $fieldMetadata->name, $value);
+ break;
+ default:
+ throw new \Exception('Unknown apiKey security scheme subtype: ' . $metadata->subtype);
+ }
+ break;
+ case 'openIdConnect':
+ $clientOptions['headers'][$fieldMetadata->name] = $value;
+ break;
+ case 'oauth2':
+ $clientOptions['headers'][$fieldMetadata->name] = $value;
+ break;
+ case 'http':
+ switch ($metadata->subtype) {
+ case 'bearer':
+ $clientOptions['headers'][$fieldMetadata->name] = preg_match('/^Bearer /i', $value) ? $value : 'Bearer ' . $value;
+ break;
+ default:
+ throw new \Exception('Unknown http security scheme subtype: ' . $metadata->subtype);
+ }
+ break;
+ default:
+ throw new \Exception('Unknown security scheme type: ' . $metadata->type);
+ }
+
+ return $clientOptions;
+ }
+
+ /**
+ * @param mixed $scheme
+ * @return array>
+ */
+ private function parseBasicAuthScheme(mixed $scheme): array
+ {
+ $username = '';
+ $password = '';
+
+ foreach ($scheme as $field => $value) {
+ if ($value === null) {
+ continue;
+ }
+
+ $fieldMetadata = $this->parseSecurityMetadata(new ReflectionProperty(get_class($scheme), $field));
+ if ($fieldMetadata === null || empty($fieldMetadata->name)) {
+ continue;
+ }
+
+ switch ($fieldMetadata->name) {
+ case 'username':
+ $username = $value;
+ break;
+ case 'password':
+ $password = $value;
+ break;
+ }
+ }
+
+ return [
+ 'headers' => [
+ 'Authorization' => sprintf('Basic %s', base64_encode(sprintf('%s:%s', $username, $password))),
+ ],
+ 'query' => [],
+ ];
+ }
+
+ private function parseSecurityMetadata(ReflectionProperty $property): SecurityMetadata | null
+ {
+ $metadataStr = SpeakeasyMetadata::find($property->getAttributes(SpeakeasyMetadata::class), 'security');
+ if ($metadataStr === null) {
+ return null;
+ }
+
+ $metadata = SecurityMetadata::parse($metadataStr);
+ if ($metadata === null) {
+ return null;
+ }
+
+ return $metadata;
+ }
+}
diff --git a/src/Utils/SecurityClient.php b/src/Utils/SecurityClient.php
new file mode 100644
index 0000000..fb3f7ab
--- /dev/null
+++ b/src/Utils/SecurityClient.php
@@ -0,0 +1,93 @@
+> */
+ private array $clientOptions;
+
+ /**
+ * @param array> $clientOptions
+ */
+ public function __construct(\GuzzleHttp\ClientInterface $client, array $clientOptions)
+ {
+ $this->client = $client;
+ $this->clientOptions = $clientOptions;
+ }
+
+ /**
+ * @param \Psr\Http\Message\RequestInterface $request
+ * @param array $options
+ */
+ public function send(\Psr\Http\Message\RequestInterface $request, array $options = []): \Psr\Http\Message\ResponseInterface
+ {
+ return $this->client->send($request, $this->addClientOptions($options));
+ }
+
+ /**
+ * @param \Psr\Http\Message\RequestInterface $request
+ * @param array $options
+ */
+ public function sendAsync(\Psr\Http\Message\RequestInterface $request, array $options = []): \GuzzleHttp\Promise\PromiseInterface
+ {
+ return $this->client->sendAsync($request, $this->addClientOptions($options));
+ }
+
+ /**
+ * @param string $method
+ * @param string|\Psr\Http\Message\UriInterface $uri
+ * @param array $options
+ */
+ public function request(string $method, $uri, array $options = []): \Psr\Http\Message\ResponseInterface
+ {
+ return $this->client->request($method, $uri, $this->addClientOptions($options));
+ }
+
+ /**
+ * @param string $method
+ * @param string|\Psr\Http\Message\UriInterface $uri
+ * @param array $options
+ */
+ public function requestAsync(string $method, $uri, array $options = []): \GuzzleHttp\Promise\PromiseInterface
+ {
+ return $this->client->requestAsync($method, $uri, $this->addClientOptions($options));
+ }
+
+ public function getConfig(?string $option = null)
+ {
+ return $this->client->getConfig($option);
+ }
+
+ /**
+ * @param array $options
+ * @return array
+ */
+ private function addClientOptions(array $options): array
+ {
+ if (!isset($options["headers"])) {
+ $options["headers"] = [];
+ }
+
+ if (!isset($options["query"])) {
+ $options["query"] = [];
+ }
+
+ if (count($this->clientOptions["headers"]) > 0) {
+ $options["headers"] = array_merge_recursive($options["headers"], $this->clientOptions["headers"]);
+ }
+
+ if (count($this->clientOptions["query"]) > 0) {
+ $options["query"] = array_merge_recursive($options["query"], $this->clientOptions["query"]);
+ }
+
+ return $options;
+ }
+}
diff --git a/src/Utils/SecurityMetadata.php b/src/Utils/SecurityMetadata.php
new file mode 100644
index 0000000..8cb1a3e
--- /dev/null
+++ b/src/Utils/SecurityMetadata.php
@@ -0,0 +1,71 @@
+ 2) { /** @phpstan-ignore-line */
+ continue;
+ }
+
+ switch ($parts[0]) {
+ case "name":
+ $name = $parts[1];
+ break;
+ case "type":
+ $type = $parts[1];
+ break;
+ case "subtype":
+ $subtype = $parts[1];
+ break;
+ case "option":
+ $option = true;
+ break;
+ case "scheme":
+ $scheme = true;
+ break;
+ }
+ }
+
+ return new SecurityMetadata($option, $scheme, $name, $type, $subtype);
+ }
+
+ private function __construct(bool $option, bool $scheme, string $name, string $type, string $subtype)
+ {
+ $this->option = $option;
+ $this->scheme = $scheme;
+ $this->name = $name;
+ $this->type = $type;
+ $this->subtype = $subtype;
+ }
+}
diff --git a/src/Utils/SpeakeasyMetadata.php b/src/Utils/SpeakeasyMetadata.php
new file mode 100644
index 0000000..2f5ea18
--- /dev/null
+++ b/src/Utils/SpeakeasyMetadata.php
@@ -0,0 +1,47 @@
+value = $value;
+ }
+
+ /**
+ * @param array<\ReflectionAttribute> $attributes
+ * @return string | null
+ */
+ public static function find(array $attributes, string $type): string | null
+ {
+ foreach ($attributes as $attr) {
+ $arguments = $attr->getArguments();
+ if (count($arguments) !== 1) {
+ return null;
+ }
+
+ $prefix = explode(":", $arguments[0], 2);
+ if (count($prefix) !== 2) {
+ return null;
+ }
+
+ if ($prefix[0] === $type) {
+ return $arguments[0];
+ }
+ }
+
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/src/Utils/Utils.php b/src/Utils/Utils.php
new file mode 100644
index 0000000..98af025
--- /dev/null
+++ b/src/Utils/Utils.php
@@ -0,0 +1,221 @@
+parseSecurity($security);
+
+ return new SecurityClient($client, $clientOptions);
+ }
+
+ /**
+ * templateUrl will replace the path parameters in the given URL with the given values.
+ *
+ * @param string $url
+ * @param mixed $params
+ * @return string
+ */
+ public static function templateUrl(string $url, mixed $params): string
+ {
+ $url = preg_replace_callback('/{([^}]+)}/', function ($matches) use ($params) {
+ $key = $matches[1];
+ if (array_key_exists($key, $params)) {
+ return $params[$key];
+ } else {
+ return $matches[0];
+ }
+ }, $url);
+
+ return $url;
+ }
+
+ /**
+ * generateUrl generates a URL from the given path and path parameters.
+ *
+ * @param string $url
+ * @param string $path
+ * @param string|null $type
+ * @param mixed|null $pathParams
+ * @param array>>|null $globals
+ * @return string
+ */
+ public static function generateUrl(string $url, string $path, string $type = null, mixed $pathParams = null, array $globals = null): string
+ {
+ $url = removeSuffix($url, '/') . $path;
+ $globals ??= [];
+
+ $pp = new PathParameters();
+ $params = $type !== null ? $pp->parsePathParams($type, $pathParams, $globals) : [];
+
+ return Utils::templateUrl($url, $params);
+ }
+
+ /**
+ * matchContentType will return true if the given content type matches the given pattern.
+ *
+ * @param string $contentType
+ * @param string $pattern
+ * @return bool
+ */
+ public static function matchContentType(string $contentType, string $pattern): bool
+ {
+ if ($contentType === $pattern || $pattern === '*' || $pattern === '*/*') {
+ return true;
+ }
+
+ $mediaType = strtolower(trim(explode(';', $contentType)[0]));
+
+ if ($mediaType === $pattern) {
+ return true;
+ }
+
+ $parts = explode('/', $mediaType);
+ if (count($parts) === 2) {
+ $type = $parts[0];
+ $subtype = $parts[1];
+
+ if ($pattern === "$type/*" || $pattern === "*/$subtype") {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * serializeRequestBody will serialize the given request body.
+ *
+ * @param mixed $request
+ * @param string $requestFieldName
+ * @param string $serializationMethod
+ * @return array|null
+ */
+ public static function serializeRequestBody(mixed $request, string $requestFieldName, string $serializationMethod): array | null
+ {
+ $rb = new RequestBodies();
+ return $rb->serializeRequestBody($request, $requestFieldName, $serializationMethod);
+ }
+
+ /**
+ * getQueryParams will return serialized query parameters for the given type.
+ *
+ * @param string $type
+ * @param mixed $queryParams
+ * @param array>>|null $globals
+ * @return array
+ */
+ public static function getQueryParams(string $type, mixed $queryParams, array $globals = null): array
+ {
+ $qp = new QueryParameters();
+ $globals ??= [];
+
+ $query = $qp->parseQueryParams($type, $queryParams, $globals);
+
+ if ($query === null) {
+ return [];
+ }
+
+ return [
+ 'query' => $query,
+ ];
+ }
+
+ /**
+ * getHeaders will return serialized headers for the given type.
+ *
+ * @param mixed $headers
+ * @return array
+ */
+ public static function getHeaders(mixed $headers): array
+ {
+ $h = new Headers();
+
+ $headers = $h->parseHeaders($headers);
+
+ return [
+ 'headers' => $headers,
+ ];
+ }
+}
+
+function removePrefix(string $text, string $prefix): string
+{
+ if (0 === strpos($text, $prefix))
+ $text = substr($text, strlen($prefix));
+ return $text;
+}
+
+function removeSuffix(string $text, string $suffix): string
+{
+ $suffix_length = strlen($suffix);
+ if (substr($text, -$suffix_length) === $suffix) {
+ return substr($text, 0, -$suffix_length);
+ }
+ return $text;
+}
+
+function valToString(mixed $val, string $dateTimeFormat = ''): string
+{
+ switch (gettype($val)) {
+ case 'string':
+ return $val;
+ case 'object':
+ switch (get_class($val)) {
+ case 'DateTime':
+ if (empty($dateTimeFormat)) {
+ $dateTimeFormat = 'Y-m-d\TH:i:s.uP';
+ }
+
+ return $val->format($dateTimeFormat);
+ default:
+ if (is_a($val, \BackedEnum::class, true)) {
+ $enumVal = $val->value;
+ if (is_string($enumVal)) {
+ return $enumVal;
+ }
+
+ return var_export($enumVal, true);
+ }
+
+ return var_export($val, true);
+ }
+ default:
+ return var_export($val, true);
+ }
+}
+
+/**
+ * @param mixed $value
+ * @param string $type
+ * @param string $field
+ * @param array>> $globals
+ * @return mixed
+ */
+function populateGlobal(mixed $value, string $type, string $field, array $globals): mixed
+{
+ if ($globals !== null && $value === null && isset($globals['parameters'][$type]) && isset($globals['parameters'][$type][$field])) {
+ $globalVal = $globals['parameters'][$type][$field];
+ if ($globalVal !== null) {
+ $value = $globalVal;
+ }
+ }
+
+ return $value;
+}
\ No newline at end of file
diff --git a/src/Video.php b/src/Video.php
new file mode 100644
index 0000000..9a1dbb3
--- /dev/null
+++ b/src/Video.php
@@ -0,0 +1,109 @@
+sdkConfiguration = $sdkConfig;
+ }
+
+ /**
+ * Start Universal Transcode
+ *
+ * Begin a Universal Transcode Session
+ *
+ * @param \LukeHagar\Plex_API\Models\Operations\StartUniversalTranscodeRequest $request
+ * @return \LukeHagar\Plex_API\Models\Operations\StartUniversalTranscodeResponse
+ */
+ public function startUniversalTranscode(
+ ?\LukeHagar\Plex_API\Models\Operations\StartUniversalTranscodeRequest $request,
+ ): \LukeHagar\Plex_API\Models\Operations\StartUniversalTranscodeResponse
+ {
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/video/:/transcode/universal/start.mpd');
+
+ $options = ['http_errors' => false];
+ $options = array_merge_recursive($options, Utils\Utils::getQueryParams(\LukeHagar\Plex_API\Models\Operations\StartUniversalTranscodeRequest::class, $request, null));
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\StartUniversalTranscodeResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\StartUniversalTranscodeResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Get the timeline for a media item
+ *
+ * Get the timeline for a media item
+ *
+ * @param \LukeHagar\Plex_API\Models\Operations\GetTimelineRequest $request
+ * @return \LukeHagar\Plex_API\Models\Operations\GetTimelineResponse
+ */
+ public function getTimeline(
+ ?\LukeHagar\Plex_API\Models\Operations\GetTimelineRequest $request,
+ ): \LukeHagar\Plex_API\Models\Operations\GetTimelineResponse
+ {
+ $baseUrl = Utils\Utils::templateUrl($this->sdkConfiguration->getServerUrl(), $this->sdkConfiguration->getServerDefaults());
+ $url = Utils\Utils::generateUrl($baseUrl, '/:/timeline');
+
+ $options = ['http_errors' => false];
+ $options = array_merge_recursive($options, Utils\Utils::getQueryParams(\LukeHagar\Plex_API\Models\Operations\GetTimelineRequest::class, $request, null));
+ $options['headers']['Accept'] = 'application/json';
+ $options['headers']['user-agent'] = $this->sdkConfiguration->userAgent;
+
+ $httpResponse = $this->sdkConfiguration->securityClient->request('GET', $url, $options);
+
+ $contentType = $httpResponse->getHeader('Content-Type')[0] ?? '';
+
+ $statusCode = $httpResponse->getStatusCode();
+
+ $response = new \LukeHagar\Plex_API\Models\Operations\GetTimelineResponse();
+ $response->statusCode = $statusCode;
+ $response->contentType = $contentType;
+ $response->rawResponse = $httpResponse;
+
+ if ($httpResponse->getStatusCode() === 200 or $httpResponse->getStatusCode() === 400) {
+ }
+ else if ($httpResponse->getStatusCode() === 401) {
+ if (Utils\Utils::matchContentType($contentType, 'application/json')) {
+ $serializer = Utils\JSON::createSerializer();
+ $response->object = $serializer->deserialize((string)$httpResponse->getBody(), 'LukeHagar\Plex_API\Models\Operations\GetTimelineResponseBody', 'json');
+ }
+ }
+
+ return $response;
+ }
+}
\ No newline at end of file