diff --git a/.github/workflows/arazzo-validation.yml b/.github/workflows/arazzo-validation.yml new file mode 100644 index 000000000..8f046a3fd --- /dev/null +++ b/.github/workflows/arazzo-validation.yml @@ -0,0 +1,175 @@ +name: Arazzo Workflow Validation + +on: + push: + branches: [main, feature/arbiter-discovery-pipeline] + paths: + - "workflows/**" + - "plex-api-spec.yaml" + - ".github/workflows/arazzo-validation.yml" + pull_request: + branches: [main] + paths: + - "workflows/**" + - "plex-api-spec.yaml" + - ".github/workflows/arazzo-validation.yml" + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: arazzo-validation-${{ github.ref }} + cancel-in-progress: true + +jobs: + validate: + runs-on: ubuntu-latest + steps: + - name: Checkout plex-api-spec + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: false + + - name: Clone Arbiter + run: | + git clone https://github.com/LukasParke/arbiter.git ../arbiter + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '24' + + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + version: latest + + - name: Build Arbiter + run: | + cd ../arbiter + pnpm install --frozen-lockfile + pnpm run build + + - name: Set up Docker Compose + uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2320ee5c88db75466b73 # v3.10.0 + + - name: Start Plex Media Server + run: | + docker compose up -d pms + for i in {1..60}; do + if curl -sf http://localhost:32400/identity > /dev/null 2>&1; then + echo "PMS is ready" + break + fi + echo "Waiting for PMS... ($i/60)" + sleep 5 + done + env: + PLEX_CLAIM_TOKEN: ${{ secrets.PLEX_CLAIM_TOKEN }} + + - name: Extract Plex Token + id: plex-token + run: | + # Wait for Plex to finish initialization and generate token + for i in {1..30}; do + TOKEN=$(docker exec plex-api-test cat /config/Library/Application\ Support/Plex\ Media\ Server/Preferences.xml 2>/dev/null | grep -oP 'PlexOnlineToken="\K[^"]+' || true) + if [ -n "$TOKEN" ]; then + echo "token=$TOKEN" >> $GITHUB_OUTPUT + echo "Found Plex token" + break + fi + echo "Waiting for Plex token... ($i/30)" + sleep 5 + done + + # Fallback: use a test token if available + if [ -z "${{ steps.plex-token.outputs.token }}" ]; then + echo "token=test-token" >> $GITHUB_OUTPUT + echo "Using fallback test token" + fi + + - name: Start Arbiter Proxy with Validation + run: | + cd ../arbiter + node dist/src/cli.js start \ + --target http://localhost:32400 \ + --port 8080 \ + --docs-port 9000 \ + --db-path /tmp/arbiter.db \ + --validate \ + --spec "$GITHUB_WORKSPACE/plex-api-spec.yaml" \ + --verbose > /tmp/arbiter.log 2>&1 & + PROXY_PID=$! + echo "PROXY_PID=$PROXY_PID" >> $GITHUB_ENV + + for i in {1..30}; do + if curl -sf http://localhost:8080/identity > /dev/null 2>&1; then + echo "Arbiter proxy is ready (with validation enabled)" + break + fi + echo "Waiting for arbiter proxy... ($i/30)" + sleep 1 + done + + - name: Install Redocly Respect + run: | + npm install -g @redocly/cli@latest + npx @redocly/cli@latest --version + + - name: Lint Arazzo Workflows + run: | + for wf in workflows/*.yaml; do + echo "=== Linting $(basename $wf) ===" + npx @redocly/cli@latest lint "$wf" || exit 1 + done + + - name: Run Arazzo Tests via Arbiter Proxy + run: | + FAILED=0 + for wf in workflows/*.yaml; do + echo "" + echo "========================================" + echo "=== Running $(basename $wf) ===" + echo "========================================" + npx @redocly/cli@latest respect "$wf" \ + --input plexToken=${{ steps.plex-token.outputs.token }} \ + --input baseUrl=http://localhost:8080 \ + || FAILED=1 + done + exit $FAILED + + - name: Collect Arbiter Validation Log + if: always() + run: | + echo "=== Arbiter Proxy Validation Log ===" > /tmp/validation-summary.log + if [ -f /tmp/arbiter.log ]; then + grep -E "\[VALIDATE\]|Proxy error|Diff Report|Missing endpoints|Query param gaps" /tmp/arbiter.log >> /tmp/validation-summary.log || true + cat /tmp/validation-summary.log + fi + + - name: Stop Arbiter Proxy + if: always() + run: | + kill $PROXY_PID 2>/dev/null || true + sleep 2 + + - name: Stop Plex Media Server + if: always() + run: docker compose down + + - name: Upload Arbiter Log + if: always() + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: arbiter-validation-log + path: /tmp/arbiter.log + retention-days: 7 + + - name: Upload Validation Summary + if: always() + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: validation-summary + path: /tmp/validation-summary.log + retention-days: 7 diff --git a/.github/workflows/discovery.yml b/.github/workflows/discovery.yml new file mode 100644 index 000000000..ca5dde135 --- /dev/null +++ b/.github/workflows/discovery.yml @@ -0,0 +1,120 @@ +name: Nightly Discovery Pipeline + +on: + schedule: + - cron: '0 6 * * *' + workflow_dispatch: + +permissions: + contents: read + actions: write + +concurrency: + group: nightly-discovery + cancel-in-progress: true + +jobs: + discover: + runs-on: ubuntu-latest + steps: + - name: Checkout plex-api-spec + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: false + + - name: Clone Arbiter + run: | + git clone https://github.com/LukasParke/arbiter.git ../arbiter + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '24' + + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + version: latest + + - name: Build Arbiter + run: | + cd ../arbiter + pnpm install --frozen-lockfile + pnpm run build + + - name: Set up Docker Compose + uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2320ee5c88db75466b73 # v3.10.0 + + - name: Start Plex Media Server + run: | + docker compose up -d pms + # Wait for PMS to be healthy + for i in {1..60}; do + if curl -sf http://localhost:32400/identity > /dev/null 2>&1; then + echo "PMS is ready" + break + fi + echo "Waiting for PMS... ($i/60)" + sleep 5 + done + env: + PLEX_CLAIM_TOKEN: ${{ secrets.PLEX_CLAIM_TOKEN }} + + - name: Start Arbiter Proxy + run: | + cd ../arbiter + node dist/src/cli.js start \ + --target http://localhost:32400 \ + --port 8080 \ + --docs-port 9000 \ + --db-path /tmp/arbiter.db \ + --verbose & + PROXY_PID=$! + echo "PROXY_PID=$PROXY_PID" >> $GITHUB_ENV + # Wait for proxy + for i in {1..30}; do + if curl -sf http://localhost:8080/identity > /dev/null 2>&1; then + echo "Proxy is ready" + break + fi + echo "Waiting for proxy... ($i/30)" + sleep 1 + done + + - name: Generate Traffic + run: | + cd ../arbiter + node dist/src/cli.js generate-traffic \ + --target http://localhost:8080 \ + --output /tmp/traffic.jsonl + + - name: Stop Arbiter Proxy + run: | + kill $PROXY_PID || true + sleep 2 + + - name: Run Diff + run: | + cd ../arbiter + node dist/src/cli.js diff \ + --spec ./plex-api-spec/plex-api-spec.yaml \ + --traffic /tmp/traffic.jsonl \ + --output /tmp/diff_report.json + + - name: Stop Plex Media Server + if: always() + run: docker compose down + + - name: Upload diff report + if: always() + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: diff-report + path: /tmp/diff_report.json + + - name: Upload traffic capture + if: always() + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: traffic-capture + path: /tmp/traffic.jsonl diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 000000000..c51305463 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,71 @@ +name: Lint OpenAPI Spec + +on: + push: + branches: [main] + paths: + - "plex-api-spec.yaml" + - ".github/workflows/lint.yml" + pull_request: + branches: [main] + paths: + - "plex-api-spec.yaml" + - ".github/workflows/lint.yml" + +jobs: + prettier: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: '20' + - run: npm install prettier prettier-plugin-openapi + - run: npx prettier --check plex-api-spec.yaml + + speakeasy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Install Speakeasy + run: | + curl -fsSL https://raw.githubusercontent.com/speakeasy-api/speakeasy/main/install.sh | sh + speakeasy --version + - run: speakeasy lint openapi -s plex-api-spec.yaml + + vacuum: + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - uses: actions/checkout@v4 + + - name: Install Vacuum + run: | + gh release download --repo daveshanley/vacuum --pattern '*linux_x86_64.tar.gz' + tar -xzf vacuum_*_linux_x86_64.tar.gz + sudo mv vacuum /usr/local/bin/ + vacuum version + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Lint with Vacuum + run: | + vacuum lint plex-api-spec.yaml \ + --details \ + --pipeline-output \ + --no-banner \ + --min-score 25 + + - name: Generate Vacuum Report + if: always() + run: | + vacuum report plex-api-spec.yaml report-prefix --no-pretty + + - name: Upload Vacuum Report + if: always() + uses: actions/upload-artifact@v4 + with: + name: vacuum-report + path: report-prefix*.json + retention-days: 30 diff --git a/.gitignore b/.gitignore index a14702c40..15eb33627 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,6 @@ report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json # Finder (MacOS) folder config .DS_Store +report-prefix*.json +# Plex test data generated by docker compose +test-data/ diff --git a/.speakeasy/lint.yaml b/.speakeasy/lint.yaml index 09e082d60..26c75a078 100644 --- a/.speakeasy/lint.yaml +++ b/.speakeasy/lint.yaml @@ -3,4 +3,5 @@ defaultRuleset: PathParamRuleset rulesets: PathParamRuleset: rulesets: - - speakeasy-generation # Use the speakeasy-generation ruleset as a base + - speakeasy-generation + - speakeasy-recommended diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..62dfa5f66 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,56 @@ +version: "3.8" + +services: + pms: + image: plexinc/pms-docker:latest + container_name: plex-api-test + restart: "no" + ports: + - "32400:32400/tcp" + - "32400:32400/udp" + environment: + - PLEX_CLAIM=${PLEX_CLAIM_TOKEN:-claim-xxxxxxxxxxxxxxxxxxxx} + - PUID=1000 + - PGID=1000 + - TZ=UTC + volumes: + - ./test-data/config:/config + - ./test-data/transcode:/transcode + - ./test-data/media:/data/media:ro + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:32400/identity"] + interval: 10s + timeout: 5s + retries: 30 + start_period: 60s + + proxy: + build: + context: ../arbiter + dockerfile: Dockerfile + container_name: plex-api-proxy + restart: "no" + ports: + - "8080:8080" + - "9000:9000" + command: + - "node" + - "dist/src/cli.js" + - "--target" + - "http://pms:32400" + - "--port" + - "8080" + - "--docs-port" + - "9000" + - "--db-path" + - "/data/arbiter.db" + - "--validate" + - "--spec" + - "/spec/plex-api-spec.yaml" + - "--verbose" + volumes: + - ./test-data/capture:/data + - ./plex-api-spec.yaml:/spec/plex-api-spec.yaml:ro + depends_on: + pms: + condition: service_healthy diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..03c5f8ff0 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,100 @@ +{ + "name": "plex-api-spec", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "devDependencies": { + "prettier": "^3.8.3", + "prettier-plugin-openapi": "^1.0.15" + } + }, + "node_modules/@types/js-yaml": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", + "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/js-yaml": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz", + "integrity": "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/prettier": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", + "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-plugin-openapi": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/prettier-plugin-openapi/-/prettier-plugin-openapi-1.0.15.tgz", + "integrity": "sha512-jYLcikix0NBnYiabmYUrh57jNLP3sfKtObRaX0MHYSzsnsyWqlCcvEkfD9B9U8eMZwtRTbCgV1ZCxUm5klQnEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/js-yaml": "^4.0.9", + "js-yaml": "^4.1.0", + "yaml": "^2.8.3" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "prettier": "^3.0.0" + } + }, + "node_modules/yaml": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 000000000..c94fd4db8 --- /dev/null +++ b/package.json @@ -0,0 +1,6 @@ +{ + "devDependencies": { + "prettier": "^3.8.3", + "prettier-plugin-openapi": "^1.0.15" + } +} diff --git a/plex-api-spec.yaml b/plex-api-spec.yaml index 71803e99f..c90cab082 100644 --- a/plex-api-spec.yaml +++ b/plex-api-spec.yaml @@ -2,11 +2,42 @@ openapi: 3.1.1 info: title: Plex Media Server version: 1.1.1 + description: |- + OpenAPI specification for the Plex Media Server (PMS) API and the plex.tv cloud API. + + ## Base URLs + + - **PMS (local server)**: `http(s)://{host}:{port}` — Most endpoints in this spec target the local PMS. + - **plex.tv v2**: `https://plex.tv/api/v2` — Authentication, account, and social endpoints. + - **plex.tv v1 (legacy)**: `https://plex.tv/api` — Legacy XML endpoints (friends, home users, claims). + - **Cloud providers**: `https://discover.provider.plex.tv`, `https://metadata.provider.plex.tv`, etc. + + Endpoints that target plex.tv or cloud providers declare an override `servers` array. + + ## Authentication + + - **X-Plex-Token**: Pass via the `X-Plex-Token` header on every request. It may also be passed as a query parameter (`?X-Plex-Token=...`) on all endpoints. + - **X-Plex-Client-Identifier**: Mandatory for OAuth PIN flow (`/pins`) and JWT device registration. Must be a unique, persistent identifier for the client application. + - **OAuth PIN Flow**: `POST /pins` → user visits `https://plex.tv/link` → `GET /pins/{pinId}` → obtain `authToken`. + + ## Response Formats + + - **PMS endpoints**: Return XML by default. Send `Accept: application/json` to receive JSON. + - **plex.tv v2**: Returns JSON by default. + - **Legacy v1 endpoints** (`/pins.xml`, `/api/resources`, `/api/users/`): Return XML only. + + ## Rate Limiting + + plex.tv auth endpoints (PIN creation, sign-in) enforce rate limits. Clients should implement exponential backoff and reuse tokens rather than re-authenticating on every request. + contact: + name: Plex API Spec Maintainers + url: https://github.com/LukasParke/plex-api-spec + email: api@plex.tv license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0.html servers: - - url: "https://{IP-description}.{identifier}.plex.direct:{port}" + - url: https://{IP-description}.{identifier}.plex.direct:{port} variables: identifier: description: The unique identifier of this particular PMS @@ -17,18 +48,24 @@ servers: port: description: The Port number configured on the PMS. Typically (`32400`). default: '32400' - - url: "{protocol}://{host}:{port}" + - url: '{protocol}://{host}:{port}' variables: - protocol: - description: The network protocol to use. Typically (`http` or `https`) - default: http host: - description: "The Host of the PMS.\nIf using on a local network, this is the internal IP address of the server hosting the PMS.\nIf using on an external network, this is the external IP address for your network, and requires port forwarding.\nIf using a reverse proxy, this would be the external DNS domain for your network, and requires the proxy handle port forwarding. \n" + description: |- + The Host of the PMS. + If using on a local network, this is the internal IP address of the server hosting the PMS. + If using on an external network, this is the external IP address for your network, and requires port forwarding. + If using a reverse proxy, this would be the external DNS domain for your network, and requires the proxy handle port forwarding. default: localhost port: - description: "The Port number configured on the PMS. Typically (`32400`). \nIf using a reverse proxy, this would be the port number configured on the proxy.\n" + description: |- + The Port number configured on the PMS. Typically (`32400`). + If using a reverse proxy, this would be the port number configured on the proxy. default: '32400' - - url: "{full_server_url}" + protocol: + description: The network protocol to use. Typically (`http` or `https`) + default: http + - url: '{full_server_url}' variables: full_server_url: description: The full manual URL to access the PMS @@ -52,12 +89,14 @@ x-speakeasy-globals: - $ref: "#/components/parameters/X-Plex-Marketplace" tags: - name: Activities - description: | + description: |- Activities 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. + - name: Authentication + description: Plex Authentication operations - name: Butler description: The butler is responsible for running periodic tasks. Some tasks run daily, others every few days, and some weekly. These includes database maintenance, metadata updating, thumbnail generation, media analysis, and other tasks. - name: Collections @@ -65,7 +104,7 @@ tags: - name: Content description: The actual content of the media provider - name: Devices - description: | + description: |- Media grabbers provide ways for media to be obtained for a given protocol. The simplest ones are `stream` and `download`. More complex grabbers can have associated devices Network tuners can present themselves on the network using the Simple Service Discovery Protocol and Plex Media Server will discover them. The following XML is an example of the data returned from SSDP. The `deviceType`, `serviceType`, and `serviceId` values must remain as they are in the example in order for PMS to properly discover the device. Other less-obvious fields are described in the parameters section below. @@ -100,16 +139,18 @@ tags: - UDN: (string) A UUID for the device. This should be unique across models of a device at minimum. - URLBase: (string) The base HTTP URL for the device from which all of the other endpoints are hosted. + + Note: This tag covers media grabber and network tuner devices only. For client device discovery, use `/clients` or `/resources`. - name: Download Queue - description: API Operations against the Download Queue + description: |- + API Operations against the Download Queue. + Note: The Download Queue is distinct from the Play Queue. The Download Queue manages offline/downloaded content, while the Play Queue manages active playback sessions. - name: DVRs - description: | - The DVR provides means to watch and record live TV. This section of endpoints describes how to setup the DVR itself + description: The DVR provides means to watch and record live TV. This section of endpoints describes how to setup the DVR itself - name: EPG - description: | - The EPG (Electronic Program Guide) is responsible for obtaining metadata for what is airing on each channel and when + description: The EPG (Electronic Program Guide) is responsible for obtaining metadata for what is airing on each channel and when - name: Events - description: | + description: |- The server can notify clients in real-time of a wide range of events, from library scanning, to preferences being modified, to changes to media, and many other things. This is also the mechanism by which activity progress is reported. Two protocols for receiving the events are available: EventSource (also known as SSE), and WebSocket. @@ -126,18 +167,31 @@ tags: description: Endpoints for manipulating playlists. x-displayName: 'Library: Playlists' - name: Live TV - description: | - LiveTV contains the playback sessions of a channel from a DVR device + description: LiveTV contains the playback sessions of a channel from a DVR device - name: Log description: Logging mechanism to allow clients to log to the server - name: Play Queue - description: "The playqueue feature within a media provider\nA play queue represents the current list of media for playback. Although queues are persisted by the server, they should be regarded by the user as a fairly lightweight, an ephemeral list of items queued up for playback in a session. There is generally one active queue for each type of media (music, video, photos) that can be added to or destroyed and replaced with a fresh queue.\nPlay Queues has a region, which we refer to in this doc (partially for historical reasons) as \"Up Next\". This region is defined by `playQueueLastAddedItemID` existing on the media container. This follows iTunes' terminology. It is a special region after the currently playing item but before the originally-played items. This enables \"Party Mode\" listening/viewing, where items can be added on-the-fly, and normal queue playback resumed when completed. \nYou can visualize the play queue as a sliding window in the complete list of media queued for playback. This model is important when scaling to larger play queues (e.g. shuffling 40,000 audio tracks). The client only needs visibility into small areas of the queue at any given time, and the server can optimize access in this fashion.\nAll created play queues will have an empty \"Up Next\" area - unless the item is an album and no `key` is provided. In this case the \"Up Next\" area will be populated by the contents of the album. This is to allow queueing of multiple albums - since the 'Add to Up Next' will insert after all the tracks. This means that If you're creating a PQ from an album, you can only shuffle it if you set `key`. This is due to the above implicit queueing of albums when no `key` is provided as well as the current limitation that you cannot shuffle a PQ with an \"Up Next\" area.\nThe play queue window advances as the server receives timeline requests. The client needs to retrieve the play queue as the “now playing” item changes. There is no play queue API to update the playing item." + description: |- + The playqueue feature within a media provider + A play queue represents the current list of media for playback. Although queues are persisted by the server, they should be regarded by the user as a fairly lightweight, an ephemeral list of items queued up for playback in a session. There is generally one active queue for each type of media (music, video, photos) that can be added to or destroyed and replaced with a fresh queue. + Play Queues has a region, which we refer to in this doc (partially for historical reasons) as "Up Next". This region is defined by `playQueueLastAddedItemID` existing on the media container. This follows iTunes' terminology. It is a special region after the currently playing item but before the originally-played items. This enables "Party Mode" listening/viewing, where items can be added on-the-fly, and normal queue playback resumed when completed. + You can visualize the play queue as a sliding window in the complete list of media queued for playback. This model is important when scaling to larger play queues (e.g. shuffling 40,000 audio tracks). The client only needs visibility into small areas of the queue at any given time, and the server can optimize access in this fashion. + All created play queues will have an empty "Up Next" area - unless the item is an album and no `key` is provided. In this case the "Up Next" area will be populated by the contents of the album. This is to allow queueing of multiple albums - since the 'Add to Up Next' will insert after all the tracks. This means that If you're creating a PQ from an album, you can only shuffle it if you set `key`. This is due to the above implicit queueing of albums when no `key` is provided as well as the current limitation that you cannot shuffle a PQ with an "Up Next" area. + The play queue window advances as the server receives timeline requests. The client needs to retrieve the play queue as the “now playing” item changes. There is no play queue API to update the playing item. + - name: Playback + description: Plex Playback operations - name: Playlist description: Media playlists that can be created and played back + - name: Playlists + description: Plex Playlists operations + - name: Plex + description: Plex Plex operations - name: Preferences description: API Operations against the Preferences - name: Provider - description: Media providers are the starting points for the entire Plex Media Server media library API. It defines the paths for the groups of endpoints. The `/media/providers` should be the only hard-coded path in clients when accessing the media library. Non-media library endpoints are outside the scope of the media provider. See the description in See [the section in API Info](#section/API-Info/Media-Providers) for more information on how to use media providers. + description: |- + Media providers are the starting points for the entire Plex Media Server media library API. It defines the paths for the groups of endpoints. The `/media/providers` should be the only hard-coded path in clients when accessing the media library. Non-media library endpoints are outside the scope of the media provider. See the description in See [the section in API Info](#section/API-Info/Media-Providers) for more information on how to use media providers. + Note: Dynamic proxy paths such as `/{provider}/search`, `/{provider}/metadata`, and other provider-relative routes are resolved through the media provider API. - name: Rate description: Operations for rating media items (thumbs up/down, star ratings, etc.) - name: Search @@ -145,8 +199,7 @@ tags: - name: Status description: The status endpoints give you information about current playbacks, play history, and even terminating sessions. - name: Subscriptions - description: | - Subscriptions determine which media will be recorded and the criteria for selecting an airing when multiple are available + description: Subscriptions determine which media will be recorded and the criteria for selecting an airing when multiple are available - name: Timeline description: The actions feature within a media provider - name: Transcoder @@ -154,57 +207,45 @@ tags: - name: UltraBlur description: Service provided to compute UltraBlur colors and images. - name: Updater - description: | + description: |- 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. + - name: Users + description: Plex Users operations x-tagGroups: - - name: General + - name: Server tags: - General - - Library - - Library Playlists - - Library Collections - - Status - Activities - - Updater - Butler - - Events + - Updater - Log - Preferences - - Download Queue - - UltraBlur - - Transcoder - - name: Playback & Sessions - tags: - - Status - - Timeline - - Play Queue - Transcoder - - name: Media Provider + - name: Library tags: - - Provider - - Content + - Library - Hubs - Search - - Rate - - Playlist - - Play Queue - - Timeline - - name: DVR + - name: Media tags: + - Timeline - DVRs - - Devices - EPG - - Subscriptions - Live TV + - Subscriptions + - Devices + - name: System + tags: + - Download Queue paths: /: get: - summary: Get PMS info operationId: getServerInfo - description: Information about this PMS setup and configuration + summary: Get PMS info tags: - General + description: Information about this PMS setup and configuration parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -223,14 +264,115 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithDirectory' + allOf: + - $ref: "#/components/schemas/ServerConfiguration" + - type: object + properties: + Directory: + type: array + items: + $ref: "#/components/schemas/Directory" + example: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + allowCameraUpload: true + allowChannelAccess: true + allowMediaDeletion: true + allowSharing: true + allowSync: true + allowTuners: true + backgroundProcessing: true + certificate: true + companionProxy: true + countryCode: example + diagnostics: + - example + eventStream: true + friendlyName: example + hubSearch: true + itemClusters: true + livetv: 7 + machineIdentifier: 0123456789abcdef0123456789abcdef012345678 + mediaProviders: true + multiuser: true + musicAnalysis: 2 + myPlex: true + myPlexMappingState: mapped + myPlexSigninState: ok + myPlexSubscription: true + myPlexUsername: example + offlineTranscode: 1 + ownerFeatures: + - example + platform: example + platformVersion: example + pluginHost: true + pushNotifications: true + readOnlyLibraries: true + streamingBrainABRVersion: 1 + streamingBrainVersion: 1 + sync: true + transcoderActiveVideoSessions: 1 + transcoderAudio: true + transcoderLyrics: true + transcoderPhoto: true + transcoderSubtitles: true + transcoderVideo: true + transcoderVideoBitrates: + - example + transcoderVideoQualities: + - example + transcoderVideoResolutions: + - example + updatedAt: 1 + updater: true + version: example + voiceSearch: true + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string /:/eventsource/notifications: get: - summary: Connect to Eventsource operationId: getNotifications - description: Connect to the event source to get a stream of events + summary: Connect to Eventsource tags: - Events + description: Connect to the event source to get a stream of events parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -244,7 +386,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: filter - description: | + description: |- By default, all events except logs are sent. A rich filtering mechanism is provided to allow clients to opt into or out of each event type using the `filters` parameter. For example: - `filters=-log`: All event types except logs (the default). @@ -262,28 +404,73 @@ paths: content: application/octet-stream: schema: + type: string format: binary + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: type: string /:/prefs: get: - summary: Get all preferences operationId: getAllPreferences - description: Get the list of all preferences + summary: Get all preferences tags: - Preferences + description: Get the list of all preferences responses: '200': description: OK content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithSettings' + $ref: "#/components/schemas/MediaContainerWithSettings" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Setting: + - type: bool + default: string value + advanced: true + enumValues: string value + group: string value + hidden: true + id: string value + label: string value + summary: string value + value: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string put: - summary: Set preferences operationId: setPreferences - description: Set a set of preferences in query parameters + summary: Set preferences tags: - Preferences + description: Set a set of preferences in query parameters parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -297,6 +484,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: prefs + description: The preference key to retrieve or set in: query required: true schema: @@ -307,22 +495,33 @@ paths: sendCrashReports: 1 responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" + description: Successfully updated set preferences + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': description: Attempt to set a preferences that doesn't exist content: - text/html: {} + text/html: + schema: + type: string '403': description: Attempt to set a preferences that doesn't exist content: - text/html: {} + text/html: + schema: + type: string /:/prefs/get: get: - summary: Get a preferences operationId: getPreference - description: Get a single preference and value + summary: Get a preferences tags: - Preferences + description: Get a single preference and value parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -346,20 +545,413 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithSettings' + $ref: "#/components/schemas/MediaContainerWithSettings" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Setting: + - type: bool + default: string value + advanced: true + enumValues: string value + group: string value + hidden: true + id: string value + label: string value + summary: string value + value: string value '404': description: No preference with the provided name found. content: - text/html: {} + text/html: + schema: + type: string + /:/progress: + get: + operationId: getProgress + summary: Get Progress + tags: + - Playback + description: Get or update watch progress for a media item. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: key + description: The metadata key of the item + in: query + required: true + schema: + type: string + - name: time + description: The current playback position in milliseconds + in: query + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/ProgressResponse" + example: + MediaContainer: + size: 1 + Video: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string /:/rate: put: - summary: Rate an item operationId: setRating + summary: Rate an item + tags: + - Rate description: |- Set the rating on an item. This API does respond to the GET verb but applications should use PUT - tags: - - Rate parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -389,9 +981,9 @@ paths: in: query required: true schema: - maximum: 10 - minimum: 0 type: number + minimum: 0 + maximum: 10 - name: ratedAt description: The time when the rating occurred. If not present, interpreted as now. in: query @@ -400,24 +992,35 @@ paths: type: integer responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" + description: Successfully updated rate an item + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': description: Bad Request. Can occur when parameters are of the wrong type, missing, or if the `ratedAt` is in the future content: - text/html: {} + text/html: + schema: + type: string '404': description: Indicates that no library with the provide identifier can be found or no item can be found with the rating key content: - text/html: {} + text/html: + schema: + type: string /:/scrobble: put: - summary: Mark an item as played operationId: markPlayed + summary: Mark an item as played + tags: + - Timeline description: |- Mark an item as played. Note, this does not create any view history of this item but rather just sets the state as played. The client must provide either the `key` or `uri` query parameter This API does respond to the GET verb but applications should use PUT - tags: - - Timeline parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -443,30 +1046,40 @@ paths: schema: type: string - name: uri - description: The URI of the item to mark as played. See intro for description of the URIs + description: URI of the item to scrobble. Format is `library:///item/` or `plex://movie/` or `plex://episode/`. in: query - required: false + required: true schema: type: string responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" + description: Successfully updated mark an item as played + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': description: Bad Request. Can occur when parameters are of the wrong type, or missing content: - text/html: {} + text/html: + schema: + type: string '404': description: Indicates that no library with the provide identifier can be found or no item can be found with the rating key content: - text/html: {} + text/html: + schema: + type: string /:/timeline: post: - summary: Report media timeline operationId: report - description: | - This endpoint is hit during media playback for an item. It must be hit whenever the play state changes, or in the absence of a play state change, in a regular fashion (generally this means every 10 seconds on a LAN/WAN, and every 20 seconds over cellular). + summary: Report media timeline tags: - Timeline + description: This endpoint is hit during media playback for an item. It must be hit whenever the play state changes, or in the absence of a play state change, in a regular fashion (generally this means every 10 seconds on a LAN/WAN, and every 20 seconds over cellular). parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -568,6 +1181,26 @@ paths: schema: type: integer example: 1024 + - name: containerKey + description: Groups timeline reports (e.g. /playQueues/123). + in: query + schema: + type: string + - name: guid + description: Global unique identifier for the item. + in: query + schema: + type: string + - name: playQueueID + description: Identifies the play queue itself (distinct from playQueueItemID). + in: query + schema: + type: integer + - name: url + description: Alternative to key/ratingKey (legacy). + in: query + schema: + type: string - name: X-Plex-Client-Identifier description: Unique per client. in: header @@ -585,48 +1218,104 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/ServerConfiguration' - - properties: + - $ref: "#/components/schemas/ServerConfiguration" + - type: object + properties: Bandwidths: description: A list of media times and bandwidths when trascoding is using with auto adjustment of bandwidth + type: object properties: Bandwidth: - items: - properties: - bandwidth: - description: The bandwidth at this time in kbps - type: integer - resolution: - description: The user-friendly resolution at this time - type: string - time: - description: Media playback time where this bandwidth started - type: integer - type: object type: array - type: object + items: + $ref: "#/components/schemas/Bandwidth" + playQueueID: + description: The play queue ID when playback originates from a queue. + type: integer terminationCode: description: A code describing why the session was terminated by the server. type: integer terminationText: description: A user friendly and localized text describing why the session was terminated by the server. type: string - type: object - type: object + example: + MediaContainer: + allowCameraUpload: true + allowChannelAccess: true + allowMediaDeletion: true + allowSharing: true + allowSync: true + allowTuners: true + backgroundProcessing: true + certificate: true + companionProxy: true + countryCode: example + diagnostics: [] + eventStream: true + friendlyName: example + hubSearch: true + itemClusters: true + livetv: 7 + machineIdentifier: 0123456789abcdef0123456789abcdef012345678 + mediaProviders: true + multiuser: true + musicAnalysis: 2 + myPlex: true + myPlexMappingState: mapped + myPlexSigninState: ok + myPlexSubscription: true + myPlexUsername: example + offlineTranscode: 1 + ownerFeatures: [] + platform: example + platformVersion: example + pluginHost: true + pushNotifications: true + readOnlyLibraries: true + streamingBrainABRVersion: 1 + streamingBrainVersion: 1 + sync: true + transcoderActiveVideoSessions: 1 + transcoderAudio: true + transcoderLyrics: true + transcoderPhoto: true + transcoderSubtitles: true + transcoderVideo: true + transcoderVideoBitrates: [] + transcoderVideoQualities: [] + transcoderVideoResolutions: [] + updatedAt: 1 + updater: true + version: example + voiceSearch: true + Bandwidths: + Bandwidth: + - bandwidth: 1 + resolution: string value + time: 1 + playQueueID: 1 + terminationCode: 1 + terminationText: example '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string /:/unscrobble: put: - summary: Mark an item as unplayed operationId: unscrobble + summary: Mark an item as unplayed + tags: + - Timeline description: |- Mark an item as unplayed. The client must provide either the `key` or `uri` query parameter This API does respond to the GET verb but applications should use PUT - tags: - - Timeline parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -652,29 +1341,40 @@ paths: schema: type: string - name: uri - description: The URI of the item to mark as played. See intro for description of the URIs + description: URI of the item to scrobble. Format is `library:///item/` or `plex://movie/` or `plex://episode/`. in: query - required: false + required: true schema: type: string responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" + description: Successfully updated mark an item as unplayed + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': description: Bad Request. Can occur when parameters are of the wrong type, or missing content: - text/html: {} + text/html: + schema: + type: string '404': description: Indicates that no library with the provide identifier can be found or no item can be found with the rating key content: - text/html: {} - /:/websocket/notifications: + text/html: + schema: + type: string + /:/websocket/notifications: get: - summary: Connect to WebSocket operationId: connectWebSocket - description: Connect to the web socket to get a stream of events + summary: Connect to WebSocket tags: - Events + description: Connect to the web socket to get a stream of events parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -688,7 +1388,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: filter - description: | + description: |- By default, all events except logs are sent. A rich filtering mechanism is provided to allow clients to opt into or out of each event type using the `filters` parameter. For example: - `filters=-log`: All event types except logs (the default). @@ -706,191 +1406,29 @@ paths: content: application/octet-stream: schema: - format: binary type: string - /activities: - get: - summary: Get all activities - operationId: listActivities - description: List all activities on the server. Admins can see all activities but other users can only see their own - tags: - - Activities - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - MediaContainer: - allOf: - - properties: - Activity: - items: - properties: - cancellable: - description: Indicates whether this activity can be cancelled - type: boolean - Context: - description: An object with additional values - additionalProperties: true - type: object - progress: - description: A progress percentage. A value of -1 means the progress is indeterminate - maximum: 100 - minimum: -1 - type: number - Response: - description: An object with the response to the async opperation - additionalProperties: true - type: object - subtitle: - description: A user-friendly sub-title for this activity - type: string - title: - description: A user-friendly title for this activity - type: string - type: - description: The type of activity - type: string - userID: - description: The user this activity belongs to - type: integer - uuid: - description: The ID of the activity - type: string - type: object - type: array - type: object - type: object - /butler: - delete: - summary: Stop all Butler tasks - operationId: stopTasks - description: This endpoint will stop all currently running tasks and remove any scheduled tasks from the queue. - tags: - - Butler - security: - - token: - - admin - responses: - '200': - $ref: '#/components/responses/200' - get: - summary: Get all Butler tasks - operationId: getTasks - description: | - Get the list of butler tasks and their scheduling - tags: - - Butler - security: - - token: - - admin - responses: - '200': - description: Butler tasks + format: binary + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - application/json: + text/html: schema: - properties: - ButlerTasks: - properties: - ButlerTask: - items: - properties: - description: - description: A user-friendly description of the task - type: string - enabled: - description: Whether this task is enabled or not - type: boolean - interval: - description: The interval (in days) of when this task is run. A value of 1 is run every day, 7 is every week, etc. - type: integer - name: - description: The name of the task - type: string - scheduleRandomized: - description: Indicates whether the timing of the task is randomized within the butler interval - type: boolean - title: - description: A user-friendly title of the task - type: string - type: object - type: array - type: object - type: object - post: - summary: Start all Butler tasks - operationId: startTasks - description: | - 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. - tags: - - Butler - security: - - token: - - admin - responses: - '200': - $ref: '#/components/responses/200' - /downloadQueue: - post: - summary: Create download queue - operationId: createDownloadQueue - description: | - Available: 0.2.0 - - Creates a download queue for this client if one doesn't exist, or returns the existing queue for this client and user. - tags: - - Download Queue - responses: - '200': - description: OK + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - application/json: + text/html: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - DownloadQueue: - items: - properties: - id: - type: integer - itemCount: - type: integer - status: - description: | - The state of this queue - - deciding: At least one item is still being decided - - waiting: At least one item is waiting for transcode and none are currently transcoding - - processing: At least one item is being transcoded - - done: All items are available (or potentially expired) - - error: At least one item has encountered an error - enum: - - deciding - - waiting - - processing - - done - - error - type: string - type: object - type: array - type: object - /hubs: + type: string + /:/websockets/notifications: get: - summary: Get global hubs - operationId: getAllHubs - description: Get the global hubs in this PMS + operationId: getWebsocketNotifications + summary: Get WebSocket Notifications tags: - - Hubs + - Events + description: WebSocket endpoint for real-time notifications (plural alias). Connect with X-Plex-Token header. Delivers NotificationContainer messages. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -903,48 +1441,39 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - $ref: '#/components/parameters/count' - - name: onlyTransient - description: 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) - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: identifier - description: If provided, limit to only specified hubs - in: query - schema: - type: array - items: - type: string responses: + '101': + description: Switching Protocols - WebSocket connection established '200': - description: OK - headers: - X-Plex-Container-Start: - $ref: '#/components/headers/X-Plex-Container-Start' - X-Plex-Container-Total-Size: - $ref: '#/components/headers/X-Plex-Container-Total-Size' + description: WebSocket messages content: - application/json: + application/octet-stream: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Hub: - items: - $ref: '#/components/schemas/Hub' - type: array - type: object - type: object - /hubs/continueWatching: + $ref: "#/components/schemas/NotificationContainer" + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /accounts: get: - summary: Get the continue watching hub - operationId: getContinueWatching - description: Get the global continue watching hub + operationId: getSystemAccounts + summary: Get System Accounts tags: - - Hubs + - General + description: Get a list of local system accounts. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -957,36 +1486,64 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - $ref: '#/components/parameters/count' responses: '200': description: OK - headers: - X-Plex-Container-Start: - $ref: '#/components/headers/X-Plex-Container-Start' - X-Plex-Container-Total-Size: - $ref: '#/components/headers/X-Plex-Container-Total-Size' content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Hub: - items: - $ref: '#/components/schemas/Hub' - type: array - type: object - type: object - /hubs/items: - get: - summary: Get a hub's items - operationId: getHubItems - description: Get the items within a single hub specified by identifier + $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /actions/addToWatchlist: + post: + operationId: addToWatchlist + summary: Add to Watchlist tags: - - Hubs + - Provider + description: Add an item to the user's Plex Discover watchlist. + servers: + - url: https://discover.provider.plex.tv parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -999,41 +1556,45 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - $ref: '#/components/parameters/count' - - name: identifier - description: If provided, limit to only specified hubs + - name: uri + description: The URI of the item to add or remove in: query required: true schema: - type: array - items: - type: string + type: string responses: '200': description: OK - headers: - X-Plex-Container-Start: - $ref: '#/components/headers/X-Plex-Container-Start' - X-Plex-Container-Total-Size: - $ref: '#/components/headers/X-Plex-Container-Total-Size' content: application/json: schema: - properties: - MediaContainer: - $ref: '#/components/schemas/MediaContainer' - type: object - '404': - description: The specified hub could not be found + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - /hubs/promoted: - get: - summary: Get the hubs which are promoted - operationId: getPromotedHubs - description: Get the global hubs which are promoted (should be displayed on the home screen) + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /actions/removeFromContinueWatching: + put: + operationId: removeFromContinueWatching + summary: Remove From Continue Watching tags: - - Hubs + - Playback + description: Remove an item from the Continue Watching list. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -1046,121 +1607,44 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - $ref: '#/components/parameters/count' - responses: - '200': - description: OK - headers: - X-Plex-Container-Start: - $ref: '#/components/headers/X-Plex-Container-Start' - X-Plex-Container-Total-Size: - $ref: '#/components/headers/X-Plex-Container-Total-Size' - content: - application/json: - schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Hub: - items: - $ref: '#/components/schemas/Hub' - type: array - type: object - type: object - /hubs/search: - get: - summary: Search Hub - operationId: searchHubs - description: | - Perform a search and get the result as hubs - - 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. - tags: - - Search - parameters: - - $ref: "#/components/parameters/accepts" - - $ref: "#/components/parameters/X-Plex-Client-Identifier" - - $ref: "#/components/parameters/X-Plex-Product" - - $ref: "#/components/parameters/X-Plex-Version" - - $ref: "#/components/parameters/X-Plex-Platform" - - $ref: "#/components/parameters/X-Plex-Platform-Version" - - $ref: "#/components/parameters/X-Plex-Device" - - $ref: "#/components/parameters/X-Plex-Model" - - $ref: "#/components/parameters/X-Plex-Device-Vendor" - - $ref: "#/components/parameters/X-Plex-Device-Name" - - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: query - description: The query term + - name: key + description: The metadata key of the item in: query required: true schema: type: string - - name: sectionId - description: This gives context to the search, and can result in re-ordering of search result hubs. - in: query - schema: - type: integer - example: 1 - - name: limit - description: The number of items to return per hub. 3 if not specified - in: query - schema: - type: integer responses: '200': description: OK - headers: - X-Plex-Container-Start: - $ref: '#/components/headers/X-Plex-Container-Start' - X-Plex-Container-Total-Size: - $ref: '#/components/headers/X-Plex-Container-Total-Size' content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Hub: - items: - $ref: '#/components/schemas/Hub' - type: array - type: object - type: object + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': - description: A required parameter was not given, the wrong type, or wrong value + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - '404': - description: Search restrictions result in no possible items found (such as searching no sections) + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - text/html: {} - /hubs/search/voice: - get: - summary: Voice Search Hub - operationId: voiceSearchHubs - description: | - Perform a search tailored to voice input and get the result as hubs - - 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. + text/html: + schema: + type: string + /actions/removeFromWatchlist: + post: + operationId: removeFromWatchlist + summary: Remove from Watchlist tags: - - Search + - Provider + description: Remove an item from the user's Plex Discover watchlist. + servers: + - url: https://discover.provider.plex.tv parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -1173,82 +1657,198 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: query - description: The query term + - name: uri + description: The URI of the item to add or remove in: query required: true schema: type: string - - $ref: '#/components/parameters/type' - - name: limit - description: The number of items to return per hub. 3 if not specified - in: query - schema: - type: integer responses: '200': description: OK - headers: - X-Plex-Container-Start: - $ref: '#/components/headers/X-Plex-Container-Start' - X-Plex-Container-Total-Size: - $ref: '#/components/headers/X-Plex-Container-Total-Size' content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Hub: - items: - $ref: '#/components/schemas/Hub' - type: array - type: object - type: object + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': - description: A required parameter was not given, the wrong type, or wrong value + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - /identity: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /activities: get: - summary: Get PMS identity - operationId: getIdentity - description: Get details about this PMS's identity + operationId: listActivities + summary: Get all activities tags: - - General - security: - - {} + - Activities + description: List all activities on the server. Admins can see all activities but other users can only see their own responses: '200': description: OK content: application/json: schema: + type: object properties: MediaContainer: - properties: - claimed: - description: Indicates whether this server has been claimed by a user - type: boolean - machineIdentifier: - description: A unique identifier of the computer - type: string - size: - type: integer - version: - description: The full version string of the PMS - type: string type: object - type: object - /library/all: + properties: + Activity: + type: array + items: + $ref: "#/components/schemas/Activity" + example: + MediaContainer: + Activity: + - title: string value + type: string value + cancellable: true + Context: {} + progress: 1 + Response: {} + subtitle: string value + userID: 1 + uuid: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /api/resources: get: - summary: Get all items in library - operationId: getLibraryItems - description: Request all metadata items according to a query. + operationId: getLegacyResources + summary: Get Legacy Resources tags: - - Library + - Users + description: Get legacy published server connections (XML). + servers: + - url: https://plex.tv/api + responses: + '200': + description: OK + content: + application/xml: + schema: + $ref: "#/components/schemas/MediaContainerWithDevice" + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /api/users/: + get: + operationId: getLegacyUsers + summary: Get Legacy Users + tags: + - Users + description: Get legacy friends list (XML). + servers: + - url: https://plex.tv/api + responses: + '200': + description: OK + content: + application/xml: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /api/v2/user/webhooks: + get: + operationId: getUserWebhooks + summary: User Webhooks + tags: + - General + description: List webhook URLs for the logged-in user. + servers: + - url: https://plex.tv/api/v2 + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/WebhookPayload" + example: + Account: + title: string value + id: 1 + thumb: string value + event: media.play + Metadata: {} + owner: true + Player: + title: string value + local: true + publicAddress: string value + uuid: string value + Server: + title: string value + uuid: string value + user: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + post: + operationId: addUserWebhook + summary: Add User Webhook + tags: + - General + description: Add a webhook URL for the logged-in user. + servers: + - url: https://plex.tv/api/v2 parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -1261,56 +1861,38 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - $ref: '#/components/parameters/mediaQuery' responses: '200': description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts + content: + application/json: schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: schema: - type: integer + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - application/json: + text/html: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' - /library/caches: - delete: - summary: Delete library caches - operationId: deleteCaches - description: Delete the hub caches so they are recomputed on next request + type: string + /auth/jwk: + post: + operationId: registerDeviceJWK + summary: Register Device JWK tags: - - Library - security: - - token: - - admin - responses: - '200': - $ref: '#/components/responses/200' - /library/clean/bundles: - put: - summary: Clean bundles - operationId: cleanBundles - description: Clean out any now unused bundles. Bundles can become unused when media is deleted - tags: - - Library - security: - - token: - - admin - responses: - '200': - $ref: '#/components/responses/200' - /library/collections: - post: - summary: Create collection - operationId: createCollection - description: Create a collection in the library - tags: - - Collections + - Authentication + description: Register a device public key (JWK) for JWT-based authentication. + servers: + - url: https://clients.plex.tv/api/v2 parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -1323,40 +1905,52 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: sectionId - description: The section where this collection will be created - in: query - required: true - schema: - type: string - - $ref: '#/components/parameters/title' - - $ref: '#/components/parameters/smart' - - name: uri - description: The URI for processing the smart collection. Required for a smart collection - in: query - schema: - type: string - - $ref: '#/components/parameters/type' + requestBody: + content: + application/json: + example: + jwk: + crv: string value + kid: string value + kty: string value + x: string value + strong: false + schema: + $ref: "#/components/schemas/JWKRegistrationRequest" responses: '200': description: OK content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/AuthTokenResponse" + example: + authToken: string value + clientIdentifier: string value + jwt: string value '400': - description: The uri is missing for a smart collection or the section could not be found + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - /library/file: - post: - summary: Ingest a transient item - operationId: ingestTransientItem - description: |- - This endpoint takes a file path specified in the `url` parameter, matches it using the scanner's match mechanism, downloads rich metadata, and then ingests the item as a transient item (without a library section). In the case where the file represents an episode, the entire tree (show, season, and episode) is added as transient items. At this time, movies and episodes are the only supported types, which are gleaned automatically from the file path. - Note that any of the parameters passed to the metadata details endpoint (e.g. `includeExtras=1`) work here. + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /auth/keys: + get: + operationId: getAuthKeys + summary: Get Auth Keys tags: - - Library + - Authentication + description: Get Plex public JWKs for signature verification. + servers: + - url: https://clients.plex.tv/api/v2 parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -1369,59 +1963,44 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: url - description: The file of the file to ingest. - in: query - schema: - type: string - format: url - example: file:///storage%2Femulated%2F0%2FArcher-S01E01.mkv - - name: virtualFilePath - description: A virtual path to use when the url is opaque. - in: query - schema: - type: string - example: /Avatar.mkv - - name: computeHashes - description: Whether or not to compute Plex and OpenSubtitle hashes for the file. Defaults to 0. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: ingestNonMatches - description: Whether or not non matching media should be stored. Defaults to 0. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - example: 1 responses: '200': description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts + content: + application/json: schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available + $ref: "#/components/schemas/AuthKeysResponse" + example: + keys: + - alg: string value + e: string value + kid: string value + kty: string value + n: string value + use: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: schema: - type: integer + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - application/json: + text/html: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' - /library/matches: + type: string + /auth/nonce: get: - summary: Get library matches - operationId: getLibraryMatches - description: |- - The matches endpoint is used to match content external to the library with content inside the library. This is done by passing a series of semantic "hints" about the content (its type, name, or release year). Each type (e.g. movie) has a canonical set of minimal required hints. - This ability to match content is useful in a variety of scenarios. For example, in the DVR, the EPG uses the endpoint to match recording rules against airing content. And in the cloud, the UMP uses the endpoint to match up a piece of media with rich metadata. - The endpoint response can including multiple matches, if there is ambiguity, each one containing a `score` from 0 to 100. For somewhat historical reasons, anything over 85 is considered a positive match (we prefer false negatives over false positives in general for matching). - The `guid` hint is somewhat special, in that it generally represents a unique identity for a piece of media (e.g. the IMDB `ttXXX`) identifier, in contrast with other hints which can be much more ambiguous (e.g. a title of `Jane Eyre`, which could refer to the 1943 or the 2011 version). - Episodes require either a season/episode pair, or an air date (or both). Either the path must be sent, or the show title + operationId: getAuthNonce + summary: Get Auth Nonce tags: - - Library + - Authentication + description: Get a nonce to sign in client JWT authentication flow. + servers: + - url: https://clients.plex.tv/api/v2 parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -1434,124 +2013,48 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - $ref: '#/components/parameters/type' - - name: includeFullMetadata - in: query - schema: - description: Whether or not to include full metadata on a positive match. When set, and the best match exceeds a score threshold of 85, metadata as rich as possible is sent back. - $ref: "#/components/schemas/BoolInt" - - name: includeAncestorMetadata - in: query - schema: - description: Whether or not to include metadata for the item's ancestor (e.g. show and season data for an episode). - $ref: "#/components/schemas/BoolInt" - - name: includeAlternateMetadataSources - in: query - schema: - description: Whether or not to return all sources for each metadata field, which results in a different structure being passed back. - $ref: "#/components/schemas/BoolInt" - - name: guid - description: Used for movies, shows, artists, albums, and tracks. Allowed for various URI schemes, to be defined. - in: query - schema: - type: string - - $ref: '#/components/parameters/title' - - name: year - description: Used for movies shows, and albums. Optional. - in: query - schema: - type: integer - - name: path - description: Used for movies, episodes, and tracks. The full path to the media file, used for "cloud-scanning" an item. - in: query - schema: - type: string - - name: grandparentTitle - description: Used for episodes and tracks. The title of the show/artist. Required if `path` isn't passed. - in: query - schema: - type: string - - name: grandparentYear - description: Used for episodes. The year of the show. - in: query - schema: - type: integer - - name: parentIndex - description: Used for episodes and tracks. The season/album number. - in: query - schema: - type: integer - - name: index - description: Used for episodes and tracks. The episode/tracks number in the season/album. - in: query - schema: - type: integer - - name: originallyAvailableAt - description: Used for episodes. In the format `YYYY-MM-DD`. - in: query - schema: - type: string - - name: parentTitle - description: Used for albums and tracks. The artist name for albums or the album name for tracks. - in: query - schema: - type: string responses: '200': description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts + content: + application/json: schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available + $ref: "#/components/schemas/AuthNonceResponse" + example: + nonce: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: schema: - type: integer + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - application/json: + text/html: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' - /library/optimize: - put: - summary: Optimize the Database - operationId: optimizeDatabase - description: Initiate optimize on the database. - tags: - - Library - security: - - token: - - admin - parameters: - - $ref: "#/components/parameters/accepts" - - $ref: "#/components/parameters/X-Plex-Client-Identifier" - - $ref: "#/components/parameters/X-Plex-Product" - - $ref: "#/components/parameters/X-Plex-Version" - - $ref: "#/components/parameters/X-Plex-Platform" - - $ref: "#/components/parameters/X-Plex-Platform-Version" - - $ref: "#/components/parameters/X-Plex-Device" - - $ref: "#/components/parameters/X-Plex-Model" - - $ref: "#/components/parameters/X-Plex-Device-Vendor" - - $ref: "#/components/parameters/X-Plex-Device-Name" - - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: async - description: If set, don't wait for completion but return an activity - in: query - schema: - $ref: "#/components/schemas/BoolInt" - responses: - '200': - $ref: '#/components/responses/200' - /library/randomArtwork: - get: - summary: Get random artwork - operationId: getRandomArtwork - description: | - Get random artwork across sections. This is commonly used for a screensaver. - - This retrieves 100 random artwork paths in the specified sections and returns them. Restrictions are put in place to not return artwork for items the user is not allowed to access. Artwork will be for Movies, Shows, and Artists only. + type: string + x-speakeasy-retries: + backoff: + exponent: 2 + initialInterval: 1000 + maxElapsedTime: 300000 + maxInterval: 30000 + retryConnectionErrors: true + statusCodes: + - '429' + strategy: backoff + /auth/token: + post: + operationId: exchangeJWTToken + summary: Exchange JWT Token tags: - - Library + - Authentication + description: Exchange a signed client JWT for a Plex JWT token. + servers: + - url: https://clients.plex.tv/api/v2 parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -1564,214 +2067,179 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: sections - description: The sections for which to fetch artwork. - in: query - explode: false - schema: - type: array - items: - type: integer - example: - - 5 - - 6 + requestBody: + content: + application/json: + example: + clientIdentifier: string value + jwt: string value + scope: string value + schema: + $ref: "#/components/schemas/TokenExchangeRequest" responses: '200': description: OK content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithArtwork' - /library/sections/all: - get: - summary: Get library sections (main Media Provider Only) - operationId: getSections - description: |- - 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). - tags: - - Library - responses: - '200': - description: OK - headers: - X-Plex-Container-Start: - $ref: '#/components/headers/X-Plex-Container-Start' - X-Plex-Container-Total-Size: - $ref: '#/components/headers/X-Plex-Container-Total-Size' + $ref: "#/components/schemas/AuthTokenResponse" + example: + authToken: string value + clientIdentifier: string value + jwt: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - application/json: + text/html: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - allowSync: - $ref: '#/components/schemas/AllowSync' - Directory: - items: - $ref: '#/components/schemas/LibrarySection' - type: array - title1: - description: Typically just "Plex Library" - type: string - type: object - type: object - post: - summary: Add a library section - operationId: addSection - description: Add a new library section to the server + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + x-speakeasy-retries: + backoff: + exponent: 2 + initialInterval: 1000 + maxElapsedTime: 300000 + maxInterval: 30000 + retryConnectionErrors: true + statusCodes: + - '429' + strategy: backoff + /butler: + delete: + operationId: stopTasks + summary: Stop all Butler tasks tags: - - Library + - Butler + description: This endpoint will stop all currently running tasks and remove any scheduled tasks from the queue. security: - token: - admin - parameters: - - $ref: "#/components/parameters/accepts" - - $ref: "#/components/parameters/X-Plex-Client-Identifier" - - $ref: "#/components/parameters/X-Plex-Product" - - $ref: "#/components/parameters/X-Plex-Version" - - $ref: "#/components/parameters/X-Plex-Platform" - - $ref: "#/components/parameters/X-Plex-Platform-Version" - - $ref: "#/components/parameters/X-Plex-Device" - - $ref: "#/components/parameters/X-Plex-Model" - - $ref: "#/components/parameters/X-Plex-Device-Vendor" - - $ref: "#/components/parameters/X-Plex-Device-Name" - - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: name - description: The name of the new section - in: query - required: true - schema: - type: string - - name: type - description: The type of library section - in: query - required: true - schema: - type: integer - - name: scanner - description: The scanner this section should use - in: query - schema: - type: string - - name: agent - description: The agent this section should use for metadata - in: query - required: true - schema: - type: string - - name: metadataAgentProviderGroupId - description: The agent group id for this section - in: query - schema: - type: string - - name: language - description: The language of this section - in: query - required: true - schema: - type: string - - name: locations - description: The locations on disk to add to this section - in: query - schema: - type: array - items: - type: string - example: - - O:\fatboy\Media\Ripped\Music - - O:\fatboy\Media\My Music - - name: prefs - description: The preferences for this section - in: query - style: deepObject - schema: - type: object - example: - collectionMode: 2 - hidden: 0 - - name: relative - description: If set, paths are relative to `Media Upload` path - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: importFromiTunes - description: If set, import media from iTunes. - in: query - schema: - $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/slash-get-responses-200' + $ref: "#/components/responses/200" + description: Successfully deleted stop all butler tasks + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': - description: Section cannot be created due to bad parameters in request + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - /library/sections/all/refresh: - delete: - summary: Stop refresh - operationId: stopAllRefreshes - description: Stop all refreshes across all sections + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + get: + operationId: getTasks + summary: Get all Butler tasks tags: - - Library + - Butler + description: Get the list of butler tasks and their scheduling security: - token: - admin responses: '200': - $ref: '#/components/responses/LibrarySections' - /library/sections/prefs: - get: - summary: Get section prefs - operationId: getSectionsPrefs - description: Get a section's preferences for a metadata type + description: Butler tasks + content: + application/json: + schema: + type: object + properties: + ButlerTasks: + type: object + properties: + ButlerTask: + type: array + items: + $ref: "#/components/schemas/ButlerTask" + example: + ButlerTasks: + ButlerTask: + - title: string value + description: string value + enabled: true + interval: 1 + name: string value + scheduleRandomized: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + post: + operationId: startTasks + summary: Start all Butler tasks tags: - - Library + - Butler + description: |- + 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. security: - token: - admin - parameters: - - $ref: "#/components/parameters/accepts" - - $ref: "#/components/parameters/X-Plex-Client-Identifier" - - $ref: "#/components/parameters/X-Plex-Product" - - $ref: "#/components/parameters/X-Plex-Version" - - $ref: "#/components/parameters/X-Plex-Platform" - - $ref: "#/components/parameters/X-Plex-Platform-Version" - - $ref: "#/components/parameters/X-Plex-Device" - - $ref: "#/components/parameters/X-Plex-Model" - - $ref: "#/components/parameters/X-Plex-Device-Vendor" - - $ref: "#/components/parameters/X-Plex-Device-Name" - - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: type - description: The metadata type - in: query - required: true - schema: - type: integer - - name: agent - description: The metadata agent in use - in: query - schema: - type: string responses: '200': - $ref: '#/components/responses/LibrarySections' + $ref: "#/components/responses/200" + description: Successfully created/executed start all butler tasks + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': - description: type not provided or not an integer + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - /library/sections/refresh: - post: - summary: Refresh all sections - operationId: refreshSectionsMetadata - description: Tell PMS to refresh all section metadata + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /claim/token.json: + get: + operationId: getClaimToken + summary: Get Claim Token tags: - - Library - security: - - token: - - admin + - Authentication + description: Get a claim token for new server setup. + servers: + - url: https://plex.tv/api parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -1784,25 +2252,46 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: force - description: Force refresh of metadata - in: query - schema: - type: boolean responses: '200': - $ref: '#/components/responses/200' - '503': - description: Server cannot refresh a music library when not signed in + description: OK content: - text/html: {} - /library/tags: + application/json: + schema: + $ref: "#/components/schemas/ClaimTokenResponse" + example: + token: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + x-speakeasy-retries: + backoff: + exponent: 2 + initialInterval: 1000 + maxElapsedTime: 300000 + maxInterval: 30000 + retryConnectionErrors: true + statusCodes: + - '429' + strategy: backoff + /clients: get: - summary: Get all library tags of a type - operationId: getTags - description: Get all library tags of a type + operationId: getClients + summary: Get Clients tags: - - Library + - General + description: Get a list of connected Plex clients. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -1815,94 +2304,118 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - $ref: '#/components/parameters/type' responses: '200': - description: OK + description: List of clients content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Directory: - items: - properties: - filter: - description: The filter string to view metadata wit this tag - type: string - id: - type: integer - tag: - description: The name of the tag - type: string - tagKey: - description: The key of this tag. This is a universal key across all PMS instances and plex.tv services - type: string - tagType: - description: The type of the tag - type: integer - thumb: - description: The URL to a thumbnail for this tag - type: string - type: object - type: array - type: object - type: object - /livetv/dvrs: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Server: + type: array + items: + $ref: "#/components/schemas/PlexDevice" + example: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Server: + - accessToken: string value + clientIdentifier: string value + connections: + - address: string value + IPv6: true + local: true + port: 1 + protocol: http + relay: true + uri: string value + dnsRebindingProtection: true + home: true + httpsRequired: true + name: string value + natLoopbackSupported: true + owned: true + presence: true + product: string value + productVersion: string value + provides: string value + publicAddress: string value + publicAddressMatches: true + relay: true + synced: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /cloud_server: get: - summary: Get DVRs - operationId: listDVRs - description: Get the list of all available DVRs + operationId: getCloudServer + summary: Get Cloud Server tags: - - DVRs + - General + description: Get Plex Cloud server status for the logged-in user. + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" responses: '200': description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts + content: + application/json: schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available + $ref: "#/components/schemas/CloudServerResponse" + example: + address: string value + name: string value + port: 1 + scheme: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: schema: - type: integer + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - application/json: + text/html: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainerWithStatus' - - properties: - DVR: - items: - properties: - Device: - items: - $ref: '#/components/schemas/Device' - type: array - key: - type: string - language: - type: string - lineup: - type: string - uuid: - type: string - type: object - type: array - type: object - type: object - post: - summary: Create a DVR - operationId: createDVR - description: Creation of a DVR, after creation of a devcie and a lineup is selected + type: string + /devices: + get: + operationId: getSystemDevices + summary: Get System Devices tags: - - DVRs + - General + description: Get a list of local system devices. security: - token: - admin @@ -1918,36 +2431,70 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: lineup - description: The EPG lineup. - in: query - schema: - type: string - example: lineup://tv.plex.providers.epg.onconnect/USA-HI51418-DEFAULT - - name: device - description: The device. - in: query - schema: - type: array - items: - type: string - example: device[]=device://tv.plex.grabbers.hdhomerun/1053C0CA - - name: language - description: The language. - in: query - schema: - type: string - example: eng responses: '200': - $ref: '#/components/responses/dvrRequestHandler_slash-get-responses-200' - /livetv/epg/channelmap: + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDevice" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /diagnostics: get: - summary: Compute the best channel map - operationId: computeChannelMap - description: Compute the best channel map, given device and lineup + operationId: getDiagnostics + summary: Get Diagnostics tags: - - EPG + - General + description: Get server diagnostics overview. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -1960,70 +2507,65 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: device - description: The URI describing the device - in: query - required: true - schema: - type: string - - name: lineup - description: The URI describing the lineup - in: query - required: true - schema: - type: string responses: '200': description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available - schema: - type: integer content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - ChannelMapping: - items: - properties: - channelKey: - type: string - deviceIdentifier: - description: The channel description on the device - type: string - favorite: - type: boolean - lineupIdentifier: - description: The channel identifier in the lineup - type: string - type: object - type: array - type: object - type: object - '404': - description: No device or provider with the identifier was found + $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - '500': - description: Failed to compute channel map + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - text/html: {} - /livetv/epg/channels: + text/html: + schema: + type: string + /diagnostics/databases: get: - summary: Get channels for a lineup - operationId: getChannels - description: Get channels for a lineup within an EPG provider + operationId: downloadDatabaseDiagnostics + summary: Download Database Diagnostics tags: - - EPG + - General + description: Download server database diagnostics bundle. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -2036,149 +2578,190 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: lineup - description: The URI describing the lineup - in: query - required: true - schema: - type: string responses: '200': description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available - schema: - type: integer content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Channel: - items: - $ref: '#/components/schemas/Channel' - type: array - type: object - type: object - '404': - description: No provider with the identifier was found + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - /livetv/epg/countries: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /diagnostics/logs: get: - summary: Get all countries - operationId: getCountries - description: This endpoint returns a list of countries which EPG data is available for. There are three flavors, as specfied by the `flavor` attribute + operationId: downloadLogBundle + summary: Download Log Bundle tags: - - EPG - responses: - '200': - description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts + - General + description: Download server logs bundle. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available + $ref: "#/components/schemas/BinaryResponse" + example: + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: schema: - type: integer + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /downloadQueue: + post: + operationId: createDownloadQueue + summary: Create download queue + tags: + - Download Queue + description: |- + Available: 0.2.0 + + Creates a download queue for this client if one doesn't exist, or returns the existing queue for this client and user. + responses: + '200': + description: OK content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Country: - items: - properties: - code: - description: Three letter code - type: string - example: - type: string - flavor: - description: | - - `0`: The country is divided into regions, and following the key will lead to a list of regions. - - `1`: The county is divided by postal codes, and an example code is returned in `example`. - - `2`: The country has a single postal code, returned in `example`. - enum: - - 0 - - 1 - - 2 - type: integer - key: - type: string - language: - description: Three letter language code - type: string - languageTitle: - description: The title of the language - type: string - title: - type: string - type: - type: string - type: object + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + DownloadQueue: type: array - type: object - type: object - /livetv/epg/languages: + items: + $ref: "#/components/schemas/DownloadQueue" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + DownloadQueue: + - id: 1 + itemCount: 1 + status: deciding + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /features: get: - summary: Get all languages - operationId: getAllLanguages - description: Returns a list of all possible languages for EPG data. + operationId: getFeatures + summary: Get Features tags: - - EPG + - Authentication + description: Get Plex Pass feature flags for the logged-in user. + servers: + - url: https://plex.tv/api/v2 responses: '200': description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts + content: + application/json: schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available + allOf: + - type: object + - $ref: "#/components/schemas/Feature" + example: + type: string value + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + key: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: schema: - type: integer + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - application/json: + text/html: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Language: - items: - properties: - code: - description: 3 letter language code - type: string - title: - type: string - type: object - type: array - type: object - type: object - /livetv/epg/lineup: + type: string + /friends: get: - summary: Compute the best lineup - operationId: getLineup - description: Compute the best lineup, given lineup group and device + operationId: getFriends + summary: Get Friends tags: - - EPG + - Users + description: Get the list of friends and shared users. + servers: + - url: https://plex.tv/api/v2 parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -2191,41 +2774,62 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: device - description: The URI describing the device - in: query - required: true - schema: - type: string - - name: lineupGroup - description: The URI describing the lineupGroup - in: query - required: true - schema: - type: string responses: '200': - description: OK - headers: - X-Plex-Activity: - description: The activity of the reload process + description: List of friends + content: + application/json: schema: - type: string - '404': - description: No device or provider with the identifier was found + type: object + properties: + users: + type: array + items: + type: object + properties: + title: + type: string + email: + type: string + id: + type: integer + thumb: + type: string + username: + type: string + uuid: + type: string + example: + users: + - title: example + email: example + id: 1 + thumb: example + username: example + uuid: example + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - '500': - description: Could not get device's channels + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - text/html: {} - /livetv/epg/lineupchannels: + text/html: + schema: + type: string + /geoip: get: - summary: Get the channels for mulitple lineups - operationId: getLineupChannels - description: Get the channels across multiple lineups + operationId: getGeoIP + summary: Get GeoIP tags: - - EPG + - General + description: Get GeoIP lookup information for the current request. + servers: + - url: https://plex.tv/api/v2 parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -2238,98 +2842,412 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: lineup - description: The URIs describing the lineups - in: query - required: true - schema: - type: array - items: - type: string responses: '200': description: OK content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Lineup: - items: - allOf: - - $ref: '#/components/schemas/Lineup' - - properties: - Channel: - items: - $ref: '#/components/schemas/Channel' - type: array - type: object - type: array - type: object - type: object - '404': - description: No provider with the identifier was found + $ref: "#/components/schemas/GeoIPResponse" + example: + city: string value + coordinates: string value + country: string value + country_code: string value + subdivisions: string value + timezone: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - /livetv/sessions: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /home: get: - summary: Get all sessions - operationId: getSessions - description: Get all livetv sessions and metadata + operationId: getHome + summary: Get home hubs tags: - - Live TV + - Users + description: Get Plex Home user list. + servers: + - url: https://plex.tv/api/v2 responses: '200': description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts + content: + application/json: schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available + $ref: "#/components/schemas/MediaContainerWithHubs" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: schema: - type: integer + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - application/json: + text/html: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' - /log: - post: - summary: Logging a multi-line message to the Plex Media Server log - operationId: writeLog - description: | - 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 PUT endpoint as a linefeed-separated block of POST data. The parameters for each query string match as above. + type: string + /home/users: + get: + operationId: getHomeUsers + summary: Get home hubs Users tags: - - Log - security: - - token: - - admin - requestBody: - required: true - description: Line separated list of log items - content: - text/plain: {} - responses: - '200': - $ref: '#/components/responses/200' - '400': - $ref: '#/components/responses/400' - put: - summary: Logging a single-line message to the Plex Media Server log - operationId: writeMessage - description: | - This endpoint will write a single-line log message, including a level and source to the main Plex Media Server log. - - Note: This endpoint responds to all HTTP verbs **except POST** but PUT is preferred - tags: - - Log - security: - - token: - - admin + - Users + description: Get the list of Plex Home users. + servers: + - url: https://plex.tv/api parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -2342,49 +3260,63 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: level - description: | - An integer log level to write to the PMS log with. - - 0: Error - - 1: Warning - - 2: Info - - 3: Debug - - 4: Verbose - in: query - schema: - type: integer - enum: - - 0 - - 1 - - 2 - - 3 - - 4 - - name: message - description: The text of the message to write to the log. - in: query - schema: - type: string - - name: source - description: A string indicating the source of the message. - in: query - schema: - type: string responses: '200': - $ref: '#/components/responses/200' - /log/networked: + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string post: - summary: Enabling Papertrail - operationId: enablePapertrail - description: | - This endpoint will enable all Plex Media Server logs to be sent to the Papertrail networked logging site for a period of time - - Note: This endpoint responds to all HTTP verbs but POST is preferred + operationId: createHomeUser + summary: Create Home User tags: - - Log - security: - - token: - - admin + - Users + description: Create a new Plex Home user. + servers: + - url: https://plex.tv/api parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -2397,25 +3329,36 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: minutes - description: The number of minutes logging should be sent to Papertrail - in: query - schema: - type: integer responses: '200': - $ref: '#/components/responses/200' - '403': - description: User doesn't have permission + description: OK content: - text/html: {} - /media/grabbers: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /hubs: get: - summary: Get available grabbers - operationId: getAvailableGrabbers - description: Get available grabbers visible to the server + operationId: getAllHubs + summary: Get global hubs tags: - - Devices + - Hubs + description: Get the global hubs in this PMS parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -2428,77 +3371,776 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: protocol - description: Only return grabbers providing this protocol. + - $ref: "#/components/parameters/count" + - name: onlyTransient + description: 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) in: query schema: - type: string - example: livetv + $ref: "#/components/schemas/BoolInt" + - name: identifier + description: If provided, limit to only specified hubs + in: query + schema: + type: array + items: + type: string responses: '200': description: OK headers: X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer + $ref: "#/components/headers/X-Plex-Container-Start" X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available - schema: - type: integer + $ref: "#/components/headers/X-Plex-Container-Total-Size" content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - MediaGrabber: - items: - properties: - identifier: - type: string - protocol: - type: string - title: - type: string - type: object - type: array - type: object - type: object - /media/grabbers/devices: + $ref: "#/components/schemas/MediaContainerWithHubs" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /hubs/continueWatching: get: - summary: Get all devices - operationId: listDevices - description: Get the list of all devices present + operationId: getContinueWatching + summary: Get the continue watching hub tags: - - Devices - security: - - token: - - admin + - Hubs + description: Get the global continue watching hub + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/count" responses: '200': description: OK headers: X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer + $ref: "#/components/headers/X-Plex-Container-Start" X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available - schema: - type: integer + $ref: "#/components/headers/X-Plex-Container-Total-Size" content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithDevice' - post: - summary: Add a device - operationId: addDevice - description: This endpoint adds a device to an existing grabber. The device is identified, and added to the correct grabber. + $ref: "#/components/schemas/MediaContainerWithHubs" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /hubs/continueWatching/items: + get: + operationId: getContinueWatchingItems + summary: Get Continue Watching Items tags: - - Devices + - Hubs + description: Get direct access to Continue Watching items. security: - token: - admin @@ -2514,91 +4156,738 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: uri - description: The URI of the device. - in: query - schema: - type: string - example: http://10.0.0.5 responses: '200': description: OK content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithDevice' + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': - $ref: '#/components/responses/400' - /media/grabbers/devices/discover: - post: - summary: Tell grabbers to discover devices - operationId: discoverDevices - description: Tell grabbers to discover devices + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /hubs/home/recentlyAdded: + get: + operationId: getHomeRecentlyAdded + summary: Get home hubs Recently Added tags: - - Devices + - Hubs + description: Get the recently added hub for the home screen. security: - token: - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" responses: '200': - description: OK + description: Recently added hub items content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithDevice' - /media/providers: - get: - summary: Get the list of available media providers - operationId: listProviders - description: Get the list of all available media providers for this PMS. This will generally include the library provider and possibly EPG if DVR is set up. - tags: - - Provider - responses: - '200': - description: OK + $ref: "#/components/schemas/MediaContainerWithHubs" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - application/json: + text/html: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/ServerConfiguration' - - properties: - Feature: - items: - properties: - Directory: - items: - $ref: '#/components/schemas/Directory' - type: array - key: - type: string - type: - type: string - type: object - type: array - identifier: - description: A unique identifier for the provider, e.g. `com.plexapp.plugins.library`. - type: string - protocols: - description: |- - A comma-separated list of default protocols for the provider, which can be: - - `stream`: The provider allows streaming media directly from the provider (e.g. for Vimeo). - `download`: The provider allows downloading media for offline storage, sync, etc. (e.g. Podcasts). - `livetv`: The provider provides live content which is only available on a schedule basis. - type: string - title: - description: The title of the provider. - type: string - types: - description: This attribute contains a comma-separated list of the media types exposed by the provider (e.g. `video, audio`). - type: string - type: object - type: object - post: - summary: Add a media provider - operationId: addProvider - description: This endpoint registers a media provider with the server. Once registered, the media server acts as a reverse proxy to the provider, allowing both local and remote providers to work. + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /hubs/items: + get: + operationId: getHubItems + summary: Get a hub's items tags: - - Provider + - Hubs + description: Get the items within a single hub specified by identifier parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -2611,34 +4900,49 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: url - description: The URL of the media provider to add. + - $ref: "#/components/parameters/count" + - name: identifier + description: If provided, limit to only specified hubs in: query required: true schema: - type: string - responses: - '200': - $ref: '#/components/responses/200' - '400': - $ref: '#/components/responses/400' - /media/providers/refresh: - post: - summary: Refresh media providers - operationId: refreshProviders - description: Refresh all known media providers. This is useful in case a provider has updated features. - tags: - - Provider + type: array + items: + type: string responses: '200': - $ref: '#/components/responses/200' - /media/subscriptions: + description: OK + headers: + X-Plex-Container-Start: + $ref: "#/components/headers/X-Plex-Container-Start" + X-Plex-Container-Total-Size: + $ref: "#/components/headers/X-Plex-Container-Total-Size" + content: + application/json: + schema: + type: object + properties: + MediaContainer: + $ref: "#/components/schemas/MediaContainer" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + '404': + description: The specified hub could not be found + content: + text/html: + schema: + type: string + /hubs/promoted: get: - summary: Get all subscriptions - operationId: getAllSubscriptions - description: Get all subscriptions and potentially the grabs too + operationId: getPromotedHubs + summary: Get the hubs which are promoted tags: - - Subscriptions + - Hubs + description: Get the global hubs which are promoted (should be displayed on the home screen) parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -2651,42 +4955,393 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: includeGrabs - description: Indicates whether the active grabs should be included as well - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: includeStorage - description: Compute the storage of recorded items desired by this subscription - in: query - schema: - $ref: "#/components/schemas/BoolInt" + - $ref: "#/components/parameters/count" responses: '200': description: OK headers: X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer + $ref: "#/components/headers/X-Plex-Container-Start" X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available - schema: - type: integer + $ref: "#/components/headers/X-Plex-Container-Total-Size" content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithSubscription' - '403': - description: User cannot access DVR on this server + $ref: "#/components/schemas/MediaContainerWithHubs" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - post: - summary: Create a subscription - operationId: createSubscription - description: Create a subscription. The query parameters should be mostly derived from the [template](#tag/Subscriptions/operation/mediaSubscriptionsGetTemplate) + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /hubs/search: + get: + operationId: searchHubs + summary: Search Hub tags: - - Subscriptions + - Search + description: |- + Perform a search and get the result as hubs + + 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. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -2699,152 +5354,403 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: targetLibrarySectionID - description: The library section into which we'll grab the media. Not actually required when the subscription is to a playlist. + - name: query + description: The query term in: query + required: true schema: - type: integer - example: 1 - - name: targetSectionLocationID - description: The section location into which to grab. + type: string + - name: sectionId + description: This gives context to the search, and can result in re-ordering of search result hubs. in: query schema: type: integer - example: 3 - - name: type - description: The type of the thing we're subscribing too (e.g. show, season). + example: 1 + - name: limit + description: The number of items to return per hub. 3 if not specified in: query schema: type: integer - example: 2 - - name: hints - description: 'Hints describing what we''re looking for. Note: The hint `ratingKey` is required for downloading from a PMS remote.' - in: query - style: deepObject - schema: - type: object - example: - title: Family Guy - - name: prefs - description: Subscription preferences. - in: query - style: deepObject - schema: - type: object - example: - minVideoQuality: 720 - - name: params - description: | - Subscription parameters. - - `mediaProviderID`: Required for downloads to indicate which MP the subscription will download into - - `source`: Required for downloads to indicate the source of the downloaded content. + - name: includeCollections + description: Include collection results in search hubs in: query - style: deepObject schema: - type: object - example: - mediaProviderID: 1 + type: boolean responses: '200': description: OK headers: X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer + $ref: "#/components/headers/X-Plex-Container-Start" X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available - schema: - type: integer + $ref: "#/components/headers/X-Plex-Container-Total-Size" content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - MediaSubscription: - items: - $ref: '#/components/schemas/MediaSubscription' - type: array - type: object - type: object + $ref: "#/components/schemas/MediaContainerWithHubs" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 '400': - $ref: '#/components/responses/400' - '403': - description: User cannot access DVR on this server - content: - text/html: {} - '409': - description: An subscription with the same parameters already exists + description: A required parameter was not given, the wrong type, or wrong value content: - text/html: {} - /media/subscriptions/process: - post: - summary: Process all subscriptions - operationId: processSubscriptions - description: Process all subscriptions asynchronously - tags: - - Subscriptions - responses: - '200': - description: OK - headers: - X-Plex-Activity: - description: The activity of the process + text/html: schema: type: string + '404': + description: Search restrictions result in no possible items found (such as searching no sections) content: - text/html: {} - '403': - description: User cannot access DVR on this server - content: - text/html: {} - /media/subscriptions/scheduled: + text/html: + schema: + type: string + /hubs/search/voice: get: - summary: Get all scheduled recordings - operationId: getScheduledRecordings - description: Get all scheduled recordings across all subscriptions + operationId: voiceSearchHubs + summary: Voice Search Hub tags: - - Subscriptions - responses: - '200': - description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available - schema: - type: integer - content: - application/json: - schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - MediaGrabOperation: - items: - $ref: '#/components/schemas/MediaGrabOperation' - type: array - type: object - type: object - '403': - description: User cannot access DVR on this server - content: - text/html: {} - /media/subscriptions/template: - get: - summary: Get the subscription template - operationId: getTemplate - description: Get the templates for a piece of media which could include fetching one airing, season, the whole show, etc. - tags: - - Subscriptions + - Search + description: |- + Perform a search tailored to voice input and get the result as hubs + + 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. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -2857,78 +5763,440 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: guid - description: The guid of the item for which to get the template + - $ref: "#/components/parameters/type" + - name: query + description: The query term in: query + required: true schema: type: string - example: plex://episode/5fc70265c40548002d539d23 + - name: limit + description: The number of items to return per hub. 3 if not specified + in: query + schema: + type: integer + - name: includeCollections + description: Include collection results in search hubs + in: query + schema: + type: boolean responses: '200': description: OK headers: X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer + $ref: "#/components/headers/X-Plex-Container-Start" X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available + $ref: "#/components/headers/X-Plex-Container-Total-Size" + content: + application/json: schema: - type: integer + $ref: "#/components/schemas/MediaContainerWithHubs" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 + '400': + description: A required parameter was not given, the wrong type, or wrong value + content: + text/html: + schema: + type: string + /identity: + get: + operationId: getIdentity + summary: Get PMS identity + tags: + - General + description: Get details about this PMS's identity + security: + - {} + responses: + '200': + description: OK content: application/json: schema: + type: object properties: MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - SubscriptionTemplate: - items: - properties: - MediaSubscription: - items: - allOf: - - $ref: '#/components/schemas/MediaSubscription' - - properties: - airingsType: - type: string - librarySectionTitle: - type: string - locationPath: - type: string - parameters: - description: Parameter string for creating this subscription - type: string - selected: - type: boolean - targetLibrarySectionID: - description: Where this subscription will record to - type: integer - title: - description: The title of this subscription type - example: This Episode - type: string - type: - description: Metadata type number - type: integer - type: object - type: array - type: object - type: array - type: object - type: object - '403': - description: User cannot access DVR on this server + type: object + properties: + claimed: + description: Indicates whether this server has been claimed by a user + type: boolean + machineIdentifier: + description: A unique identifier of the computer + type: string + size: + type: integer + version: + description: The full version string of the PMS + type: string + example: + MediaContainer: + claimed: true + machineIdentifier: example + size: 1 + version: example + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - /photo/:/transcode: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /ip: get: - summary: Transcode an image - operationId: transcodeImage - description: Transcode an image, possibly changing format or size + operationId: getIP + summary: Get IP tags: - - Transcoder + - General + description: Get the public IP address detected by Plex. + servers: + - url: https://plex.tv parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -2941,141 +6209,95 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: url - description: The source URL for the image to transcode. Note, if this URL requires a token such as `X-Plex-Token`, it should be given as a query parameter to this url. - in: query - schema: - type: string - example: /library/metadata/265/thumb/1715112705 - - name: format - description: The output format for the image; defaults to jpg - in: query - required: false - schema: - type: string - enum: - - jpg - - jpeg - - png - - ppm - - name: width - description: The desired width of the output image - in: query - schema: - type: integer - - name: height - description: The desired height of the output image - in: query - schema: - type: integer - - name: quality - description: The desired quality of the output. -1 means the highest quality. Defaults to -1 - in: query - required: false - schema: - maximum: 127 - minimum: -1 - type: integer - - name: background - description: The background color to apply before painting the image. Only really applicable if image has transparency. Defaults to none - in: query - required: false - schema: - type: string - example: '#ff5522' - - name: upscale - description: Indicates if image should be upscaled to the desired width/height. Defaults to false - in: query - required: false - schema: - $ref: "#/components/schemas/BoolInt" - - name: minSize - description: Indicates if image should be scaled to fit the smaller dimension. By default (false) the image is scaled to fit within the width/height specified but if this parameter is true, it will allow overflowing one dimension to fit the other. Essentially it is making the width/height minimum sizes of the image or sizing the image to fill the entire width/height even if it overflows one dimension. - in: query - required: false - schema: - $ref: "#/components/schemas/BoolInt" - - name: rotate - description: Obey the rotation values specified in EXIF data. Defaults to true. - in: query - required: false - schema: - $ref: "#/components/schemas/BoolInt" - - name: blur - description: Apply a blur to the image, Defaults to 0 (none) - in: query - required: false - schema: - type: integer - - name: saturation - description: Scale the image saturation by the specified percentage. Defaults to 100 - in: query - required: false - schema: - maximum: 100 - minimum: 0 - type: integer - - name: opacity - description: Render the image at the specified opacity percentage. Defaults to 100 - in: query - required: false - schema: - maximum: 100 - minimum: 0 - type: integer - - name: chromaSubsampling - description: |- - Use the specified chroma subsambling. - - 0: 411 - - 1: 420 - - 2: 422 - - 3: 444 - Defaults to 3 (444) - in: query - required: false - schema: - type: integer - enum: - - 0 - - 1 - - 2 - - 3 - - name: blendColor - description: The color to blend with the image. Defaults to none - in: query - required: false - schema: - type: string - example: '#ff5522' responses: '200': - description: The resulting image + description: OK content: - image/jpeg: + application/json: schema: - format: binary - type: string - image/png: + $ref: "#/components/schemas/IPResponse" + example: + ip: 192.168.1.1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: schema: - format: binary type: string - image/x-portable-pixmap: + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: schema: - format: binary type: string + /library: + get: + operationId: getRootLibrary + summary: Get Root Library + tags: + - Library + description: Get the root library object. + security: + - token: + - admin + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value '400': - $ref: '#/components/responses/400' - '403': - $ref: '#/components/responses/403' - '404': - $ref: '#/components/responses/404' - /playlists: + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/all: get: - summary: List playlists - operationId: listPlaylists - description: Gets a list of playlists and playlist folders for a user. General filters are permitted, such as `sort=lastViewedAt:desc`. A flat playlist list can be retrieved using `type=15` to limit the collection to just playlists. + operationId: getLibraryItems + summary: Get all items in library tags: - - Playlist + - Library + description: Request all metadata items according to a query. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -3088,16 +6310,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: playlistType - description: Limit to a type of playlist - in: query - schema: - type: string - enum: - - audio - - video - - photo - - $ref: '#/components/parameters/smart' + - $ref: "#/components/parameters/mediaQuery" responses: '200': description: OK @@ -3113,54 +6326,418 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithPlaylistMetadata' - post: - summary: Create a Playlist - operationId: createPlaylist - description: Create a new playlist. By default the playlist is blank. + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/caches: + delete: + operationId: deleteCaches + summary: Delete library caches tags: - - Library Playlists - parameters: - - $ref: "#/components/parameters/accepts" - - $ref: "#/components/parameters/X-Plex-Client-Identifier" - - $ref: "#/components/parameters/X-Plex-Product" - - $ref: "#/components/parameters/X-Plex-Version" - - $ref: "#/components/parameters/X-Plex-Platform" - - $ref: "#/components/parameters/X-Plex-Platform-Version" - - $ref: "#/components/parameters/X-Plex-Device" - - $ref: "#/components/parameters/X-Plex-Model" - - $ref: "#/components/parameters/X-Plex-Device-Vendor" - - $ref: "#/components/parameters/X-Plex-Device-Name" - - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: uri - description: The content URI for what we're playing (e.g. `library://...`). - in: query - schema: - type: string - - name: playQueueID - description: To create a playlist from an existing play queue. - in: query - schema: - type: integer + - Library + description: Delete the hub caches so they are recomputed on next request + security: + - token: + - admin responses: '200': - description: OK + $ref: "#/components/responses/200" + description: Successfully deleted delete library caches content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithPlaylistMetadata' + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': - $ref: '#/components/responses/400' - /playlists/upload: - post: - summary: Upload - operationId: uploadPlaylist - description: 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. + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/clean/bundles: + put: + operationId: cleanBundles + summary: Clean bundles tags: - - Library Playlists + - Library + description: Clean out any now unused bundles. Bundles can become unused when media is deleted security: - token: - admin + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully updated clean bundles + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/collections: + post: + operationId: createCollection + summary: Create collection + tags: + - Collections + description: Create a collection in the library parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -3173,35 +6750,51 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: path - description: 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. + - $ref: "#/components/parameters/title" + - $ref: "#/components/parameters/smart" + - $ref: "#/components/parameters/type" + - name: sectionId + description: The section where this collection will be created in: query + required: true schema: type: string - example: /home/barkley/playlist.m3u - - name: force - description: 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. + - name: uri + description: The URI for processing the smart collection. Required for a smart collection in: query schema: - $ref: "#/components/schemas/BoolInt" + type: string responses: '200': - $ref: '#/components/responses/200' - '403': - $ref: '#/components/responses/200' - '500': - description: The playlist could not be imported + description: The created collection content: - text/html: {} - /playQueues: + application/json: + schema: + $ref: "#/components/schemas/Collection" + example: + artBlurHash: string value + collectionFilterBasedOnUser: true + collectionMode: default + collectionPublished: true + collectionSort: string value + lastRatedAt: 1 + thumbBlurHash: string value + userRating: 1 + '400': + description: The uri is missing for a smart collection or the section could not be found + content: + text/html: + schema: + type: string + /library/file: post: - summary: Create a play queue - operationId: createPlayQueue - description: |- - Makes a new play queue for a device. The source of the playqueue can either be a URI, or a playlist. The response is a media container with the initial items in the queue. Each item in the queue will be a regular item but with `playQueueItemID` - a unique ID since the queue could have repeated items with the same `ratingKey`. - Note: Either `uri` or `playlistID` must be specified + operationId: ingestTransientItem + summary: Ingest a transient item tags: - - Play Queue + - Library + description: |- + This endpoint takes a file path specified in the `url` parameter, matches it using the scanner's match mechanism, downloads rich metadata, and then ingests the item as a transient item (without a library section). In the case where the file represents an episode, the entire tree (show, season, and episode) is added as transient items. At this time, movies and episodes are the only supported types, which are gleaned automatically from the file path. + Note that any of the parameters passed to the metadata details endpoint (e.g. `includeExtras=1`) work here. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -3214,61 +6807,31 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: uri - description: The content URI for what we're playing. - in: query - schema: - type: string - - name: playlistID - description: the ID of the playlist we're playing. - in: query - schema: - type: integer - - name: type - description: The type of play queue to create + - name: url + description: The file of the file to ingest. in: query - required: true schema: type: string - enum: - - audio - - video - - photo - - name: key - description: The key of the first item to play, defaults to the first in the play queue. + format: url + example: file:///storage%2Femulated%2F0%2FArcher-S01E01.mkv + - name: virtualFilePath + description: A virtual path to use when the url is opaque. in: query schema: type: string - - name: shuffle - description: Whether to shuffle the playlist, defaults to 0. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: repeat - description: If the PQ is bigger than the window, fill any empty space with wraparound items, defaults to 0. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: continuous - description: Whether to create a continuous play queue (e.g. from an episode), defaults to 0. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: extrasPrefixCount - description: Number of trailers to prepend a movie with not including the pre-roll. If omitted the pre-roll will not be returned in the play queue. When resuming a movie `extrasPrefixCount` should be omitted as a parameter instead of passing 0. - in: query - schema: - type: integer - - name: recursive - description: Only applies to queues of type photo, whether to retrieve all descendent photos from an album or section, defaults to 1. + example: /Avatar.mkv + - name: computeHashes + description: Whether or not to compute Plex and OpenSubtitle hashes for the file. Defaults to 0. in: query schema: $ref: "#/components/schemas/BoolInt" - - name: onDeck - description: Only applies to queues of type show or seasons, whether to return a queue that is started on the On Deck episode if one exists. Otherwise begins the play queue on the beginning of the show or season. + example: 1 + - name: ingestNonMatches + description: Whether or not non matching media should be stored. Defaults to 0. in: query schema: $ref: "#/components/schemas/BoolInt" + example: 1 responses: '200': description: OK @@ -3284,49 +6847,355 @@ paths: content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - playQueueID: - description: The ID of the play queue, which is used in subsequent requests. - type: integer - playQueueLastAddedItemID: - description: Defines where the "Up Next" region starts - type: string - playQueueSelectedItemID: - description: The queue item ID of the currently selected item. - type: integer - playQueueSelectedItemOffset: - description: The offset of the selected item in the play queue, from the beginning of the queue. - type: integer - playQueueSelectedMetadataItemID: - description: The metadata item ID of the currently selected item (matches `ratingKey` attribute in metadata item if the media provider is a library). - type: integer - playQueueShuffled: - description: Whether or not the queue is shuffled. - type: boolean - playQueueSourceURI: - description: The original URI used to create the play queue. - type: string - playQueueTotalCount: - description: The total number of items in the play queue. - type: integer - playQueueVersion: - description: The version of the play queue. It increments every time a change is made to the play queue to assist clients in knowing when to refresh. - type: integer - type: object - type: object + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': - $ref: '#/components/responses/400' - /security/resources: + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/matches: get: - summary: Get Source Connection Information - operationId: getSourceConnectionInformation - description: 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. + operationId: getLibraryMatches + summary: Get library matches tags: - - General + - Library + description: |- + The matches endpoint is used to match content external to the library with content inside the library. This is done by passing a series of semantic "hints" about the content (its type, name, or release year). Each type (e.g. movie) has a canonical set of minimal required hints. + This ability to match content is useful in a variety of scenarios. For example, in the DVR, the EPG uses the endpoint to match recording rules against airing content. And in the cloud, the UMP uses the endpoint to match up a piece of media with rich metadata. + The endpoint response can including multiple matches, if there is ambiguity, each one containing a `score` from 0 to 100. For somewhat historical reasons, anything over 85 is considered a positive match (we prefer false negatives over false positives in general for matching). + The `guid` hint is somewhat special, in that it generally represents a unique identity for a piece of media (e.g. the IMDB `ttXXX`) identifier, in contrast with other hints which can be much more ambiguous (e.g. a title of `Jane Eyre`, which could refer to the 1943 or the 2011 version). + Episodes require either a season/episode pair, or an air date (or both). Either the path must be sent, or the show title parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -3339,75 +7208,433 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: source - description: The source identifier with an included prefix. + - $ref: "#/components/parameters/type" + - $ref: "#/components/parameters/title" + - name: includeFullMetadata + description: Include full metadata in the response in: query - required: true schema: - type: string - - name: refresh - description: Force refresh + $ref: "#/components/schemas/BoolInt" + description: Whether or not to include full metadata on a positive match. When set, and the best match exceeds a score threshold of 85, metadata as rich as possible is sent back. + - name: includeAncestorMetadata + description: Include ancestor metadata in the response + in: query + schema: + $ref: "#/components/schemas/BoolInt" + description: Whether or not to include metadata for the item's ancestor (e.g. show and season data for an episode). + - name: includeAlternateMetadataSources + description: Include alternate metadata sources in the response in: query schema: $ref: "#/components/schemas/BoolInt" + description: Whether or not to return all sources for each metadata field, which results in a different structure being passed back. + - name: guid + description: Used for movies, shows, artists, albums, and tracks. Allowed for various URI schemes, to be defined. + in: query + schema: + type: string + - name: year + description: Used for movies shows, and albums. Optional. + in: query + schema: + type: integer + - name: path + description: Used for movies, episodes, and tracks. The full path to the media file, used for "cloud-scanning" an item. + in: query + schema: + type: string + - name: grandparentTitle + description: Used for episodes and tracks. The title of the show/artist. Required if `path` isn't passed. + in: query + schema: + type: string + - name: grandparentYear + description: Used for episodes. The year of the show. + in: query + schema: + type: integer + - name: parentIndex + description: Used for episodes and tracks. The season/album number. + in: query + schema: + type: integer + - name: index + description: Used for episodes and tracks. The episode/tracks number in the season/album. + in: query + schema: + type: integer + - name: originallyAvailableAt + description: Used for episodes. In the format `YYYY-MM-DD`. + in: query + schema: + type: string + - name: parentTitle + description: Used for albums and tracks. The artist name for albums or the album name for tracks. + in: query + schema: + type: string responses: '200': description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Device: - properties: - accessToken: - type: string - clientIdentifier: - type: string - Connection: - items: - properties: - address: - type: string - local: - description: Indicates if the connection is the server's LAN address - type: boolean - port: - type: integer - protocol: - type: string - relay: - description: Indicates the connection is over a relayed connection - type: boolean - uri: - type: string - type: object - type: array - name: - type: string - type: object - type: object - type: object + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': - description: A query param is missing or the wrong value + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - '403': - description: Invalid or no token provided or a transient token could not be created + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - text/html: {} - /security/token: - post: - summary: Get Transient Tokens - operationId: getTransientToken - description: |- - 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. - Note: This endpoint responds to all HTTP verbs but POST in preferred + text/html: + schema: + type: string + /library/optimize: + get: + operationId: optimizeLibrary + summary: Get Optimize Library tags: - - General + - Library + description: Optimize the database globally across all library sections. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -3420,53 +7647,38 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: type - description: The value `delegation` is the only supported `type` parameter. - in: query - required: true - schema: - type: string - enum: - - delegation - - name: scope - description: The value `all` is the only supported `scope` parameter. - in: query - required: true - schema: - type: string - enum: - - all responses: '200': description: OK content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - token: - description: The transient token - type: string - type: object - type: object + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': - description: A query param is missing or the wrong value + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - '403': - description: Invalid or no token provided or a transient token could not be created + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - text/html: {} - /services/ultrablur/colors: - get: - summary: Get UltraBlur Colors - operationId: getColors - description: Retrieves the four colors extracted from an image for clients to use to generate an ultrablur image. + text/html: + schema: + type: string + post: + operationId: optimizeLibraryPost + summary: Optimize Library tags: - - UltraBlur + - Library + description: Optimize the database globally across all library sections. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -3479,60 +7691,41 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: url - description: Url for image which requires color extraction. Can be relative PMS library path or absolute url. - in: query - schema: - type: string - example: /library/metadata/217745/art/1718931408 responses: '200': description: OK content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - UltraBlurColors: - items: - properties: - bottomLeft: - description: The color (hex) for the bottom left quadrant. - type: string - bottomRight: - description: The color (hex) for the bottom right quadrant. - type: string - topLeft: - description: The color (hex) for the top left quadrant. - type: string - topRight: - description: The color (hex) for the top right quadrant. - type: string - type: object - type: array - type: object - type: object - '404': - description: The image url could not be found. + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - '500': - description: The server was unable to successfully extract the UltraBlur colors. + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - text/html: {} - /services/ultrablur/image: - get: - summary: Get UltraBlur Image - operationId: getImage - description: Retrieves a server-side generated UltraBlur image based on the provided color inputs. Clients should always call this via the photo transcoder endpoint. - tags: - - UltraBlur - parameters: - - $ref: "#/components/parameters/accepts" - - $ref: "#/components/parameters/X-Plex-Client-Identifier" + text/html: + schema: + type: string + put: + operationId: optimizeDatabase + summary: Optimize the Database + tags: + - Library + description: Initiate optimize on the database. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" - $ref: "#/components/parameters/X-Plex-Product" - $ref: "#/components/parameters/X-Plex-Version" - $ref: "#/components/parameters/X-Plex-Platform" @@ -3542,176 +7735,471 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: topLeft - description: The base color (hex) for the top left quadrant. - in: query - schema: - type: string - example: 3f280a - - name: topRight - description: The base color (hex) for the top right quadrant. - in: query - schema: - type: string - example: 6b4713 - - name: bottomRight - description: The base color (hex) for the bottom right quadrant. - in: query - schema: - type: string - example: 0f2a43 - - name: bottomLeft - description: The base color (hex) for the bottom left quadrant. - in: query - schema: - type: string - example: 1c425d - - name: width - description: Width in pixels for the image. - in: query - schema: - maximum: 3840 - minimum: 320 - type: integer - example: 1920 - - name: height - description: Height in pixels for the image. - in: query - schema: - maximum: 2160 - minimum: 240 - type: integer - example: 1080 - - name: noise - description: Whether to add noise to the ouput image. Noise can reduce color banding with the gradients. Image sizes with noise will be larger. + - name: async + description: If set, don't wait for completion but return an activity in: query schema: $ref: "#/components/schemas/BoolInt" - example: 1 responses: '200': - description: OK + $ref: "#/components/responses/200" + description: Successfully updated optimize the database content: - image/png: + application/json: schema: - format: binary - type: string + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': - description: Requested width and height parameters are out of bounds (maximum 3840 x 2160) + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - /status/sessions: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/randomArtwork: get: - summary: List Sessions - operationId: listSessions - description: List all current playbacks on this server + operationId: getRandomArtwork + summary: Get random artwork tags: - - Status - security: - - token: - - admin + - Library + description: |- + Get random artwork across sections. This is commonly used for a screensaver. + + This retrieves 100 random artwork paths in the specified sections and returns them. Restrictions are put in place to not return artwork for items the user is not allowed to access. Artwork will be for Movies, Shows, and Artists only. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sections + description: The sections for which to fetch artwork. + in: query + explode: false + schema: + type: array + items: + type: integer + example: + - 5 + - 6 responses: '200': description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts + content: + application/json: schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available + $ref: "#/components/schemas/MediaContainerWithArtwork" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - {} + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: schema: - type: integer + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - application/json: + text/html: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Metadata: - items: - allOf: - - properties: - Player: - $ref: '#/components/schemas/Player' - Session: - $ref: '#/components/schemas/Session' - User: - $ref: '#/components/schemas/User' - type: object - - $ref: '#/components/schemas/Metadata' - type: array - type: object - type: object - /status/sessions/background: + type: string + /library/recentlyAdded: get: - summary: Get background tasks - operationId: getBackgroundTasks - description: Get the list of all background tasks + operationId: getRecentlyAddedGlobal + summary: Get Global Recently Added tags: - - Status + - Library + description: Get recently added items across all library sections. security: - token: - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" responses: '200': - description: OK + description: Recently added items content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - TranscodeJob: - items: - properties: - generatorID: - type: integer - key: - type: string - progress: - maximum: 100 - minimum: 0 - type: number - ratingKey: - type: string - remaining: - description: The number of seconds remaining in this job - type: integer - size: - description: The size of the result so far - type: integer - speed: - description: The speed of the transcode; 1.0 means real-time - type: number - targetTagID: - description: The tag associated with the job. This could be the tag containing the optimizer settings. - type: integer - thumb: - type: string - title: - type: string - type: - enum: - - transcode - type: string - type: object - type: array - type: object - type: object - /status/sessions/history/all: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/search: get: - summary: List Playback History - operationId: listPlaybackHistory - description: |- - List all playback history (Admin can see all users, others can only see their own). - Pagination should be used on this endpoint. Additionally this endpoint supports `includeFields`, `excludeFields`, `includeElements`, and `excludeElements` parameters. + operationId: searchDiscover + summary: Search Discover tags: - - Status + - Provider + description: Search movies and shows in Plex Discover. + servers: + - url: https://discover.provider.plex.tv parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -3724,101 +8212,524 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: accountID - description: The account id to restrict view history + - name: query + description: The search query string in: query schema: - type: integer - - name: viewedAt - description: The time period to restrict history (typically of the form `viewedAt>=12456789`) + type: string + - name: limit + description: Maximum number of items to return in: query schema: type: integer - - name: librarySectionID - description: The library section id to restrict view history + default: 10 + - name: searchTypes + description: Types of content to search for in: query schema: - type: integer - - name: metadataItemID - description: The metadata item to restrict view history (can provide the id for a show to see all of that show's view history). Note this is translated to `metadata_items.id`, `parents.id`, or `grandparents.id` internally depending on the metadata type. + type: string + example: movies,tv + - name: searchProviders + description: Providers to include in the search in: query schema: - type: integer - - name: sort - description: The field on which to sort. Multiple orderings can be specified separated by `,` and the direction specified following a `:` (`desc` or `asc`; `asc` is assumed if not provided). Note `metadataItemID` may not be used here. + type: string + example: discover,PLEXAVOD,PLEXTVOD + - name: includeMetadata + description: Include metadata in the search results in: query schema: - type: array - items: - type: string - example: viewedAt:desc,accountID + type: integer + default: 1 responses: '200': description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available - schema: - type: integer content: application/json: schema: - properties: - MediaContainer: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/: + get: + operationId: getLibrarySectionsFallback + summary: Get Library Sections (Fallback) + tags: + - Library + description: Fallback for non-owners to list library sections. + security: + - token: + - admin + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/all: + get: + operationId: getSections + summary: Get library sections (main Media Provider Only) + tags: + - Library + description: |- + 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). + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + $ref: "#/components/headers/X-Plex-Container-Start" + X-Plex-Container-Total-Size: + $ref: "#/components/headers/X-Plex-Container-Total-Size" + content: + application/json: + schema: + type: object + properties: + MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Metadata: - items: - properties: - accountID: - description: The account id of this playback - type: integer - deviceID: - description: The device id which played the item - type: integer - historyKey: - description: The key for this individual history item - type: string - key: - description: The metadata key for the item played - type: string - librarySectionID: - description: The library section id containing the item played - type: string - originallyAvailableAt: - description: The originally available at of the item played - type: string - ratingKey: - description: The rating key for the item played - type: string - thumb: - description: The thumb of the item played - type: string - title: - description: The title of the item played - type: string - type: - description: The metadata type of the item played - type: string - viewedAt: - description: The time when the item was played - type: integer - type: object + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + allowSync: + $ref: "#/components/schemas/AllowSync" + Directory: type: array - type: object - type: object - /status/sessions/terminate: + items: + $ref: "#/components/schemas/LibrarySection" + title1: + description: Typically just "Plex Library" + type: string + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + allowSync: true + Directory: + - title: string value + type: movie + agent: string value + allowSync: true + art: string value + composite: string value + content: true + contentChangedAt: 1 + createdAt: 1 + directory: true + filters: true + hidden: true + key: string value + language: string value + Location: + - id: 1 + refreshing: true + scannedAt: 1 + scanner: string value + thumb: string value + updatedAt: 1 + uuid: string value + title1: example + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string post: - summary: Terminate a session - operationId: terminateSession - description: Terminate a playback session kicking off the user + operationId: addSection + summary: Add a library section tags: - - Status + - Library + description: Add a new library section to the server security: - token: - admin @@ -3834,86 +8745,127 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: sessionId - description: The session id (found in the `Session` element in [/status/sessions](#tag/Status/operation/statusGetSlash)) + - name: name + description: The name of the new section in: query required: true schema: type: string - example: cdefghijklmnopqrstuvwxyz - - name: reason - description: The reason to give to the user (typically displayed in the client) + - name: type + description: The type of library section + in: query + required: true + schema: + type: integer + x-speakeasy-name-override: mediaType + - name: scanner + description: The scanner this section should use in: query schema: type: string - example: Stop Playing + - name: agent + description: The agent this section should use for metadata + in: query + required: true + schema: + type: string + - name: metadataAgentProviderGroupId + description: The agent group id for this section + in: query + schema: + type: string + - name: language + description: The language of this section + in: query + required: true + schema: + type: string + - name: locations + description: The locations on disk to add to this section + in: query + schema: + type: array + items: + type: string + example: + - O:\fatboy\Media\Ripped\Music + - O:\fatboy\Media\My Music + - name: prefs + description: The preferences for this section + in: query + style: deepObject + schema: + type: object + example: + collectionMode: 2 + hidden: 0 + - name: relative + description: If set, paths are relative to `Media Upload` path + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: importFromiTunes + description: If set, import media from iTunes. + in: query + schema: + $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/200' - '401': - description: Server does not have the feature enabled - content: - text/html: {} - '403': - description: sessionId is empty + $ref: "#/components/responses/slash-get-responses-200" + description: Successfully created/executed add a library section content: - text/html: {} - '404': - description: Session not found + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + description: Section cannot be created due to bad parameters in request content: - text/html: {} - /updater/apply: - put: - summary: Applying updates - operationId: applyUpdates - description: Apply any downloaded updates. Note that the two parameters `tonight` and `skip` are effectively mutually exclusive. The `tonight` parameter takes precedence and `skip` will be ignored if `tonight` is also passed. + text/html: + schema: + type: string + /library/sections/all/refresh: + delete: + operationId: stopAllRefreshes + summary: Stop refresh tags: - - Updater + - Library + description: Stop all refreshes across all sections security: - token: - admin - parameters: - - $ref: "#/components/parameters/accepts" - - $ref: "#/components/parameters/X-Plex-Client-Identifier" - - $ref: "#/components/parameters/X-Plex-Product" - - $ref: "#/components/parameters/X-Plex-Version" - - $ref: "#/components/parameters/X-Plex-Platform" - - $ref: "#/components/parameters/X-Plex-Platform-Version" - - $ref: "#/components/parameters/X-Plex-Device" - - $ref: "#/components/parameters/X-Plex-Model" - - $ref: "#/components/parameters/X-Plex-Device-Vendor" - - $ref: "#/components/parameters/X-Plex-Device-Name" - - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: tonight - description: Indicate that you want the update to run during the next Butler execution. Omitting this or setting it to false indicates that the update should install immediately. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: skip - description: Indicate that the latest version should be marked as skipped. The entry for this version will have the `state` set to `skipped`. - in: query - schema: - $ref: "#/components/schemas/BoolInt" responses: '200': - description: The update process started correctly + $ref: "#/components/responses/LibrarySections" + description: Successfully deleted stop refresh content: - text/html: {} + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': - description: This system cannot install updates + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - '500': - description: The update process failed to start + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - text/html: {} - /updater/check: - put: - summary: Checking for updates - operationId: checkUpdates - description: Perform an update check and potentially download + text/html: + schema: + type: string + /library/sections/prefs: + get: + operationId: getSectionsPrefs + summary: Get section prefs tags: - - Updater + - Library + description: Get a section's preferences for a metadata type security: - token: - admin @@ -3929,102 +8881,629 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: download - description: Indicate that you want to start download any updates found. + - name: type + description: The metadata type in: query + required: true schema: - $ref: "#/components/schemas/BoolInt" + type: integer + x-speakeasy-name-override: mediaType + - name: agent + description: The metadata agent in use + in: query + schema: + type: string responses: '200': - $ref: '#/components/responses/200' - /updater/status: - get: - summary: Querying status of updates - operationId: getUpdatesStatus - description: Get the status of updating the server + $ref: "#/components/responses/LibrarySections" + description: Successfully retrieved get section prefs + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithSettings" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Setting: + - type: bool + default: string value + advanced: true + enumValues: string value + group: string value + hidden: true + id: string value + label: string value + summary: string value + value: string value + '400': + description: type not provided or not an integer + content: + text/html: + schema: + type: string + /library/sections/refresh: + post: + operationId: refreshSectionsMetadata + summary: Refresh all sections tags: - - Updater + - Library + description: Tell PMS to refresh all section metadata security: - token: - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: force + description: Force refresh of metadata + in: query + schema: + type: boolean + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully created/executed refresh all sections + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '503': + description: Server cannot refresh a music library when not signed in + content: + text/html: + schema: + type: string + /library/sections/watchlist/all: + get: + operationId: getWatchlist + summary: Get Watchlist + tags: + - Provider + description: Get the user's Plex Discover watchlist. + servers: + - url: https://discover.provider.plex.tv + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: Watchlist items + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/tags: + get: + operationId: getTags + summary: Get all library tags of a type + tags: + - Library + description: Get all library tags of a type + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/type" responses: '200': description: OK content: application/json: schema: + type: object properties: MediaContainer: allOf: - - properties: - autoUpdateVersion: - description: The version of the updater (currently `1`) - type: integer - canInstall: - description: Indicates whether this install can be updated through these endpoints (typically only on MacOS and Windows) - type: boolean - checkedAt: - description: The last time a check for updates was performed - type: integer - downloadURL: - description: The URL where the update is available - type: string - Release: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Directory: + type: array items: + type: object properties: - added: - description: A list of what has been added in this version - type: string - downloadURL: - description: The URL of where this update is available - type: string - fixed: - description: A list of what has been fixed in this version + filter: + description: The filter string to view metadata wit this tag type: string - key: - description: The URL key of the update + id: + type: integer + tag: + description: The name of the tag type: string - state: - description: | - The status of this update. - - - available - This release is available - - downloading - This release is downloading - - downloaded - This release has been downloaded - - installing - This release is installing - - tonight - This release will be installed tonight - - skipped - This release has been skipped - - error - This release has an error - - notify - This release is only notifying it is available (typically because it cannot be installed on this setup) - - done - This release is complete - enum: - - available - - downloading - - downloaded - - installing - - tonight - - skipped - - error - - notify - - done + tagKey: + description: The key of this tag. This is a universal key across all PMS instances and plex.tv services type: string - version: - description: The version available + tagType: + description: The type of the tag + type: integer + thumb: + description: The URL to a thumbnail for this tag type: string - type: object - type: array - status: - description: The current error code (`0` means no error) - type: integer - type: object - type: object - /{transcodeType}/:/transcode/universal/decision: + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - filter: example + id: 1 + tag: example + tagKey: example + tagType: 1 + thumb: example + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /livetv/dvrs: get: - summary: Make a decision on media playback - operationId: makeDecision - description: Make a decision on media playback based on client profile, and requested settings such as bandwidth and resolution. + operationId: listDVRs + summary: Get DVRs tags: - - Transcoder + - DVRs + description: Get the list of all available DVRs + parameters: + - name: uuid + description: Filter by DVR UUID. + in: query + schema: + type: string + - name: lineup + description: Filter by lineup. + in: query + schema: + type: string + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + $ref: "#/components/schemas/DVRResponse" + example: + MediaContainer: + DVR: + - Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value + key: string value + language: string value + lineup: string value + uuid: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + post: + operationId: createDVR + summary: Create a DVR + tags: + - DVRs + description: Creation of a DVR, after creation of a device and a lineup is selected + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -4037,285 +9516,57 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - $ref: '#/components/parameters/transcodeType' - - $ref: '#/components/parameters/transcodeSessionId' - - $ref: '#/components/parameters/advancedSubtitles' - - name: audioBoost - description: Percentage of original audio loudness to use when transcoding (100 is equivalent to original volume, 50 is half, 200 is double, etc) + - name: lineup + description: The EPG lineup. in: query schema: - minimum: 1 - type: integer - example: 50 - - name: audioChannelCount - description: Target video number of audio channels. + type: string + example: lineup://tv.plex.providers.epg.onconnect/USA-HI51418-DEFAULT + - name: device + description: The device. in: query schema: - maximum: 8 - minimum: 1 - type: integer - example: 5 - - name: autoAdjustQuality - description: Indicates the client supports ABR. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: autoAdjustSubtitle - description: Indicates if the server should adjust subtitles based on Voice Activity Data. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: directPlay - description: Indicates the client supports direct playing the indicated content. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: directStream - description: Indicates the client supports direct streaming the video of the indicated content. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: directStreamAudio - description: Indicates the client supports direct streaming the audio of the indicated content. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: disableResolutionRotation - description: Indicates if resolution should be adjusted for orientation. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: hasMDE - description: Ignore client profiles when determining if direct play is possible. Only has an effect when directPlay=1 and both mediaIndex and partIndex are specified and neither are -1 - in: query - schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: location - description: Network type of the client, can be used to help determine target bitrate. - in: query - schema: - type: string - enum: - - lan - - wan - - cellular - example: wan - - name: mediaBufferSize - description: Buffer size used in playback (in KB). Clients should specify a lower bound if not known exactly. This value could make the difference between transcoding and direct play on bandwidth constrained networks. - in: query - schema: - type: integer - example: 102400 - - name: mediaIndex - description: Index of the media to transcode. -1 or not specified indicates let the server choose. - in: query - schema: - type: integer - example: 0 - - name: musicBitrate - description: Target bitrate for audio only files (in kbps, used to transcode). - in: query - schema: - minimum: 0 - type: integer - example: 5000 - - name: offset - description: Offset from the start of the media (in seconds). - in: query - schema: - type: number - example: 90.5 - - name: partIndex - description: Index of the part to transcode. -1 or not specified indicates the server should join parts together in a transcode - in: query - schema: - type: integer - example: 0 - - name: path - description: Internal PMS path of the media to transcode. - in: query - schema: - type: string - example: /library/metadata/151671 - - name: peakBitrate - description: Maximum bitrate (in kbps) to use in ABR. - in: query - schema: - minimum: 0 - type: integer - example: 12000 - - name: photoResolution - description: Target photo resolution. - in: query - schema: - type: string - pattern: ^\d[x:]\d$ - example: 1080x1080 - - name: protocol - description: | - Indicates the network streaming protocol to be used for the transcode session: * 'http' - include the file in the http response such as MKV streaming * 'hls' - hls stream (RFC 8216) * 'dash' - dash stream (ISO/IEC 23009-1:2022) - in: query - schema: - type: string - enum: - - http - - hls - - dash - example: dash - - name: secondsPerSegment - description: Number of seconds to include in each transcoded segment - in: query - schema: - type: integer - example: 5 - - name: subtitleSize - description: Percentage of original subtitle size to use when burning subtitles (100 is equivalent to original size, 50 is half, ect) - in: query - schema: - minimum: 1 - type: integer - example: 50 - - name: subtitles - description: | - Indicates how subtitles should be included: * 'auto' - Compute the appropriate subtitle setting automatically * 'burn' - Burn the selected subtitle; auto if no selected subtitle * 'none' - Ignore all subtitle streams * 'sidecar' - The selected subtitle should be provided as a sidecar * 'embedded' - The selected subtitle should be provided as an embedded stream * 'segmented' - The selected subtitle should be provided as a segmented stream - in: query - schema: - type: string - enum: - - auto - - burn - - none - - sidecar - - embedded - - segmented - - unknown - example: Burn - - name: videoBitrate - description: Target video bitrate (in kbps). - in: query - schema: - minimum: 0 - type: integer - example: 12000 - - name: videoQuality - description: Target photo quality. - in: query - schema: - maximum: 99 - minimum: 0 - type: integer - example: 50 - - name: videoResolution - description: Target maximum video resolution. + type: array + items: + type: string + example: device[]=device://tv.plex.grabbers.hdhomerun/1053C0CA + - name: language + description: The language. in: query schema: type: string - pattern: ^\d[x:]\d$ - example: 1080x1080 - - name: X-Plex-Client-Identifier - description: Unique per client. - in: header - required: true - schema: - type: string - - name: X-Plex-Client-Profile-Extra - description: See [Profile Augmentations](#section/API-Info/Profile-Augmentations) . - in: header - schema: - type: string - example: add-limitation(scope=videoCodec&scopeName=*&type=upperBound&name=video.frameRate&value=60&replace=true)+append-transcode-target-codec(type=videoProfile&context=streaming&videoCodec=h264%2Chevc&audioCodec=aac&protocol=dash) - - name: X-Plex-Client-Profile-Name - description: Which built in Client Profile to use in the decision. Generally should only be used to specify the Generic profile. - in: header - schema: - type: string - example: generic - - name: X-Plex-Device - description: Device the client is running on - in: header - schema: - type: string - example: Windows - - name: X-Plex-Model - description: Model of the device the client is running on - in: header - schema: - type: string - example: standalone - - name: X-Plex-Platform - description: Client Platform - in: header - schema: - type: string - example: Chrome - - name: X-Plex-Platform-Version - description: Client Platform Version - in: header - schema: - type: string - example: 135 - - name: X-Plex-Session-Identifier - description: Unique per client playback session. Used if a client can playback multiple items at a time (such as a browser with multiple tabs) - in: header - schema: - type: string + example: eng responses: '200': - description: OK + $ref: "#/components/responses/dvrRequestHandler_slash-get-responses-200" + description: Successfully created/executed create a dvr content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithDecision' - /{transcodeType}/:/transcode/universal/fallback: - post: - summary: Manually trigger a transcoder fallback - operationId: triggerFallback - description: 'Manually trigger a transcoder fallback ex: HEVC to h.264 or hw to sw' - tags: - - Transcoder - parameters: - - $ref: "#/components/parameters/accepts" - - $ref: "#/components/parameters/X-Plex-Client-Identifier" - - $ref: "#/components/parameters/X-Plex-Product" - - $ref: "#/components/parameters/X-Plex-Version" - - $ref: "#/components/parameters/X-Plex-Platform" - - $ref: "#/components/parameters/X-Plex-Platform-Version" - - $ref: "#/components/parameters/X-Plex-Device" - - $ref: "#/components/parameters/X-Plex-Model" - - $ref: "#/components/parameters/X-Plex-Device-Vendor" - - $ref: "#/components/parameters/X-Plex-Device-Name" - - $ref: "#/components/parameters/X-Plex-Marketplace" - - $ref: '#/components/parameters/transcodeType' - - $ref: '#/components/parameters/transcodeSessionId' - responses: - '200': - $ref: '#/components/responses/200' - '404': - description: Session ID does not exist - content: - text/html: {} - '412': - description: Transcode could not fallback + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - '500': - description: Transcode failed to fallback + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - text/html: {} - /{transcodeType}/:/transcode/universal/subtitles: + text/html: + schema: + type: string + /livetv/epg/channelmap: get: - summary: Transcode subtitles - operationId: transcodeSubtitles - description: Only transcode subtitle streams. + operationId: computeChannelMap + summary: Compute the best channel map tags: - - Transcoder + - EPG + description: Compute the best channel map, given device and lineup parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -4328,256 +9579,85 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - $ref: '#/components/parameters/transcodeType' - - $ref: '#/components/parameters/transcodeSessionId' - - $ref: '#/components/parameters/advancedSubtitles' - - name: audioBoost - description: Percentage of original audio loudness to use when transcoding (100 is equivalent to original volume, 50 is half, 200 is double, etc) - in: query - schema: - minimum: 1 - type: integer - example: 50 - - name: audioChannelCount - description: Target video number of audio channels. - in: query - schema: - maximum: 8 - minimum: 1 - type: integer - example: 5 - - name: autoAdjustQuality - description: Indicates the client supports ABR. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: autoAdjustSubtitle - description: Indicates if the server should adjust subtitles based on Voice Activity Data. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: directPlay - description: Indicates the client supports direct playing the indicated content. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: directStream - description: Indicates the client supports direct streaming the video of the indicated content. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: directStreamAudio - description: Indicates the client supports direct streaming the audio of the indicated content. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: disableResolutionRotation - description: Indicates if resolution should be adjusted for orientation. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: hasMDE - description: Ignore client profiles when determining if direct play is possible. Only has an effect when directPlay=1 and both mediaIndex and partIndex are specified and neither are -1 - in: query - schema: - $ref: "#/components/schemas/BoolInt" - example: 1 - - name: location - description: Network type of the client, can be used to help determine target bitrate. - in: query - schema: - type: string - enum: - - lan - - wan - - cellular - example: wan - - name: mediaBufferSize - description: Buffer size used in playback (in KB). Clients should specify a lower bound if not known exactly. This value could make the difference between transcoding and direct play on bandwidth constrained networks. - in: query - schema: - type: integer - example: 102400 - - name: mediaIndex - description: Index of the media to transcode. -1 or not specified indicates let the server choose. - in: query - schema: - type: integer - example: 0 - - name: musicBitrate - description: Target bitrate for audio only files (in kbps, used to transcode). - in: query - schema: - minimum: 0 - type: integer - example: 5000 - - name: offset - description: Offset from the start of the media (in seconds). - in: query - schema: - type: number - example: 90.5 - - name: partIndex - description: Index of the part to transcode. -1 or not specified indicates the server should join parts together in a transcode - in: query - schema: - type: integer - example: 0 - - name: path - description: Internal PMS path of the media to transcode. - in: query - schema: - type: string - example: /library/metadata/151671 - - name: peakBitrate - description: Maximum bitrate (in kbps) to use in ABR. - in: query - schema: - minimum: 0 - type: integer - example: 12000 - - name: photoResolution - description: Target photo resolution. - in: query - schema: - type: string - pattern: ^\d[x:]\d$ - example: 1080x1080 - - name: protocol - description: | - Indicates the network streaming protocol to be used for the transcode session: * 'http' - include the file in the http response such as MKV streaming * 'hls' - hls stream (RFC 8216) * 'dash' - dash stream (ISO/IEC 23009-1:2022) - in: query - schema: - type: string - enum: - - http - - hls - - dash - example: dash - - name: secondsPerSegment - description: Number of seconds to include in each transcoded segment - in: query - schema: - type: integer - example: 5 - - name: subtitleSize - description: Percentage of original subtitle size to use when burning subtitles (100 is equivalent to original size, 50 is half, ect) - in: query - schema: - minimum: 1 - type: integer - example: 50 - - name: subtitles - description: | - Indicates how subtitles should be included: * 'auto' - Compute the appropriate subtitle setting automatically * 'burn' - Burn the selected subtitle; auto if no selected subtitle * 'none' - Ignore all subtitle streams * 'sidecar' - The selected subtitle should be provided as a sidecar * 'embedded' - The selected subtitle should be provided as an embedded stream * 'segmented' - The selected subtitle should be provided as a segmented stream + - name: device + description: The URI describing the device in: query + required: true schema: type: string - enum: - - auto - - burn - - none - - sidecar - - embedded - - segmented - - unknown - example: Burn - - name: videoBitrate - description: Target video bitrate (in kbps). - in: query - schema: - minimum: 0 - type: integer - example: 12000 - - name: videoQuality - description: Target photo quality. - in: query - schema: - maximum: 99 - minimum: 0 - type: integer - example: 50 - - name: videoResolution - description: Target maximum video resolution. + - name: lineup + description: The URI describing the lineup in: query - schema: - type: string - pattern: ^\d[x:]\d$ - example: 1080x1080 - - name: X-Plex-Client-Identifier - description: Unique per client. - in: header required: true schema: type: string - - name: X-Plex-Client-Profile-Extra - description: See [Profile Augmentations](#section/API-Info/Profile-Augmentations) . - in: header - schema: - type: string - example: add-limitation(scope=videoCodec&scopeName=*&type=upperBound&name=video.frameRate&value=60&replace=true)+append-transcode-target-codec(type=videoProfile&context=streaming&videoCodec=h264%2Chevc&audioCodec=aac&protocol=dash) - - name: X-Plex-Client-Profile-Name - description: Which built in Client Profile to use in the decision. Generally should only be used to specify the Generic profile. - in: header - schema: - type: string - example: generic - - name: X-Plex-Device - description: Device the client is running on - in: header - schema: - type: string - example: Windows - - name: X-Plex-Model - description: Model of the device the client is running on - in: header - schema: - type: string - example: standalone - - name: X-Plex-Platform - description: Client Platform - in: header - schema: - type: string - example: Chrome - - name: X-Plex-Platform-Version - description: Client Platform Version - in: header - schema: - type: string - example: 135 - - name: X-Plex-Session-Identifier - description: Unique per client playback session. Used if a client can playback multiple items at a time (such as a browser with multiple tabs) - in: header - schema: - type: string responses: '200': - description: Transcoded subtitle file + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer content: - text/srt: - example: "1\n00:00:02,499 --> 00:00:06,416\n[SERENE MUSIC]\n\n2\n00:00:11,791 --> 00:00:13,958\n[BROOK BABBLES] \n[FLY BUZZES]\n\n3\n00:00:16,166 --> 00:00:17,666\n[BIRD TWEETS]\n\n4\n00:00:17,666 --> 00:00:18,708\n[WINGS FLAP]\n\n5\n00:00:19,833 --> 00:00:20,374\n[BIRD TWEETS] \n[WINGS FLAP]\n\n6\n00:00:20,374 --> 00:00:21,041\n[THUD]\n\n7\n00:00:21,374 --> 00:00:22,249\n[THUD]\n\n8\n00:00:22,249 --> 00:00:23,083\n[SQUIRREL LAUGHS]\n\n9\n00:00:26,249 --> 00:00:27,541\n[SNORES]\n\n10\n00:00:29,416 --> 00:00:30,708\n[SNORES]\n\n11\n00:00:32,749 --> 00:00:34,041\n[BUNNY SNORES]\n\n12\n00:00:35,916 --> 00:00:37,249\n[BUNNY SNORES]\n" - '400': - $ref: '#/components/responses/400' - '403': - $ref: '#/components/responses/403' + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + ChannelMapping: + type: array + items: + type: object + properties: + channelKey: + type: string + deviceIdentifier: + description: The channel description on the device + type: string + favorite: + type: boolean + lineupIdentifier: + description: The channel identifier in the lineup + type: string + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + ChannelMapping: + - channelKey: example + deviceIdentifier: example + favorite: true + lineupIdentifier: example '404': - $ref: '#/components/responses/404' - /user: + description: No device or provider with the identifier was found + content: + text/html: + schema: + type: string + '500': + description: Failed to compute channel map + content: + text/html: + schema: + type: string + /livetv/epg/channels: get: - servers: - - url: 'https://plex.tv/api/v2' + operationId: getChannels + summary: Get channels for a lineup tags: - - Authentication - summary: Get Token Details - description: Get the User data from the provided X-Plex-Token - operationId: getTokenDetails + - EPG + description: Get channels for a lineup within an EPG provider parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -4590,76 +9670,531 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: lineup + description: The URI describing the lineup + in: query + required: true + schema: + type: string + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + $ref: "#/components/schemas/ChannelResponse" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Channel: + - title: string value + callSign: string value + channelVcn: string value + drm: true + favorite: true + hd: true + identifier: string value + key: string value + language: string value + signalQuality: 1 + signalStrength: 1 + thumb: string value + '404': + description: No provider with the identifier was found + content: + text/html: + schema: + type: string + /livetv/epg/countries: + get: + operationId: getCountries + summary: Get all countries + tags: + - EPG + description: This endpoint returns a list of countries which EPG data is available for. There are three flavors, as specfied by the `flavor` attribute + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Country: + type: array + items: + $ref: "#/components/schemas/EPGCountry" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Country: + - title: string value + type: string value + example: string value + code: string value + flavor: 1 + key: string value + language: string value + languageTitle: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /livetv/epg/guide: + get: + operationId: getEPGGuide + summary: Get EPG Guide + tags: + - EPG + description: Fetch the global electronic program guide. security: - token: - admin responses: '200': - description: Logged in user details + description: OK content: application/json: schema: - $ref: '#/components/schemas/UserPlexAccount' + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': - description: 'Bad Request - A parameter was not specified, or was specified incorrectly.' + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - application/json: + text/html: schema: - x-speakeasy-name-override: BadRequest - type: object - properties: - errors: - type: array - items: - type: object - properties: - code: - type: integer - format: int32 - example: 1000 - message: - type: string - x-speakeasy-error-message: true - example: X-Plex-Client-Identifier is missing - status: - type: integer - format: int32 - example: 400 + type: string '401': - description: Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /livetv/epg/languages: + get: + operationId: getAllLanguages + summary: Get all languages + tags: + - EPG + description: Returns a list of all possible languages for EPG data. + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer content: application/json: schema: - x-speakeasy-name-override: Unauthorized type: object properties: - errors: - type: array - items: - type: object - properties: - code: - type: integer - format: int32 - example: 1001 - message: - type: string - x-speakeasy-error-message: true - example: User could not be authenticated - status: - type: integer - format: int32 - example: 401 - /users/signin: - post: - servers: - - url: 'https://plex.tv/api/v2' - security: [] + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Language: + type: array + items: + $ref: "#/components/schemas/EPGLanguage" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Language: + - title: string value + code: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /livetv/epg/lineup: + get: + operationId: getLineup + summary: Compute the best lineup tags: - - Authentication - summary: Get User Sign In Data - description: Sign in user with username and password and return user data with Plex authentication token - operationId: post-users-sign-in-data + - EPG + description: Compute the best lineup, given lineup group and device parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -4672,199 +10207,503 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - requestBody: - content: - application/x-www-form-urlencoded: - schema: - type: object - required: - - login - - password - properties: - login: - type: string - format: email - example: username@email.com - password: - type: string - format: password - example: password123 - rememberMe: - type: boolean - default: false - verificationCode: - type: string - example: 123456 - description: Login credentials + - name: device + description: The URI describing the device + in: query + required: true + schema: + type: string + - name: lineupGroup + description: The URI describing the lineupGroup + in: query + required: true + schema: + type: string responses: - '201': - description: Returns the user account data with a valid auth token + '200': + description: OK + headers: + X-Plex-Activity: + description: The activity of the reload process + schema: + type: string content: application/json: schema: - allOf: - - $ref: '#/components/schemas/UserPlexAccount' - - type: object - required: - - pastSubscriptions - - trials - properties: - pastSubscriptions: - type: array - items: - title: PastSubscription - type: object - required: - - id - - mode - - renewsAt - - endsAt - - canceled - - gracePeriod - - onHold - - canReactivate - - canUpgrade - - canDowngrade - - canConvert - - type - - transfer - - state - - billing - properties: - id: - type: - - string - - 'null' - mode: - type: - - string - - 'null' - renewsAt: - oneOf: - - $ref: '#/components/schemas/PlexDateTime' - - type: 'null' - endsAt: - oneOf: - - $ref: '#/components/schemas/PlexDateTime' - - type: 'null' - canceled: - type: boolean - example: false - default: false - gracePeriod: - type: boolean - example: false - default: false - onHold: - type: boolean - example: false - default: false - canReactivate: - type: boolean - example: false - default: false - canUpgrade: - type: boolean - example: false - default: false - canDowngrade: - type: boolean - example: false - default: false - canConvert: - type: boolean - example: false - default: false - type: - type: string - example: plexpass - transfer: - type: - - string - - 'null' - state: - example: ended - x-speakeasy-unknown-values: allow - enum: - - ended - billing: - type: object - required: - - internalPaymentMethod - - paymentMethodId - properties: - internalPaymentMethod: - type: object - paymentMethodId: - type: - - integer - - 'null' - trials: - type: array - items: - type: object - '400': - description: 'Bad Request - A parameter was not specified, or was specified incorrectly.' + $ref: "#/components/schemas/MediaContainerWithLineup" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Lineup: + - title: string value + type: string value + identifier: string value + key: string value + lineupType: 1 + location: string value + uuid: string value + uuid: example + '404': + description: No device or provider with the identifier was found + content: + text/html: + schema: + type: string + '500': + description: Could not get device's channels + content: + text/html: + schema: + type: string + /livetv/epg/lineupchannels: + get: + operationId: getLineupChannels + summary: Get the channels for multiple lineups + tags: + - EPG + description: Get the channels across multiple lineups + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: lineup + description: The URIs describing the lineups + in: query + required: true + schema: + type: array + items: + type: string + responses: + '200': + description: OK content: application/json: schema: - x-speakeasy-name-override: BadRequest type: object properties: - errors: - type: array - items: - type: object - properties: - code: - type: integer - format: int32 - example: 1000 - message: - type: string - x-speakeasy-error-message: true - example: X-Plex-Client-Identifier is missing - status: - type: integer - format: int32 - example: 400 - '401': - description: Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Lineup: + type: array + items: + allOf: + - $ref: "#/components/schemas/Lineup" + - type: object + properties: + Channel: + type: array + items: + $ref: "#/components/schemas/Channel" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Lineup: + - title: string value + type: string value + identifier: string value + key: string value + lineupType: 1 + location: string value + uuid: string value + '404': + description: No provider with the identifier was found + content: + text/html: + schema: + type: string + /livetv/epg/search: + get: + operationId: searchEPG + summary: Search EPG + tags: + - EPG + description: Search the electronic program guide for upcoming airings. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK content: application/json: schema: - x-speakeasy-name-override: Unauthorized - type: object - properties: - errors: - type: array - items: - type: object - properties: - code: - type: integer - format: int32 - example: 1001 - message: - type: string - x-speakeasy-error-message: true - example: User could not be authenticated - status: - type: integer - format: int32 - example: 401 - /users: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /livetv/recordings: get: - servers: - - url: 'https://plex.tv/api' + operationId: getDVRRecordings + summary: Get DVR Recordings tags: - - Users + - Live TV + description: List completed DVR recordings. security: - token: - admin - summary: Get list of all connected users - description: Get list of all users that are friends and have library access with the provided Plex authentication token - operationId: get-users parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -4879,125 +10718,8397 @@ paths: - $ref: "#/components/parameters/X-Plex-Marketplace" responses: '200': - description: Successful response with media container data in JSON + description: OK content: application/json: schema: - type: object - properties: - MediaContainer: - type: object - description: Container holding user and server details. - required: - - friendlyName - - identifier - - machineIdentifier - - totalSize - - size - - User - properties: - friendlyName: - type: string - description: The friendly name of the Plex instance. - example: myPlex - identifier: - type: string - example: com.plexapp.plugins.myplex - machineIdentifier: - type: string - description: Unique Machine identifier of the Plex server. - example: 3dff4c4da3b1229a649aa574a9e2b419a684a20e - totalSize: - type: integer - description: Total number of users. - example: 30 - size: - type: integer - description: Number of users in the current response. - example: 30 - User: - type: array - description: List of users with access to the Plex server. - items: - type: object - required: - - id - - title - - username - - email - - thumb - - protected - - home - - allowTuners - - allowSync - - allowCameraUpload - - allowChannels - - allowSubtitleAdmin - - restricted - - Server - properties: - id: - type: integer - description: User's unique ID. - example: 22526914 + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /livetv/sessions: + get: + operationId: getSessions + summary: Get all sessions + tags: + - Live TV + description: Get all livetv sessions and metadata + parameters: + - name: dvrId + description: Filter by DVR ID. + in: query + schema: + type: integer + - name: channel + description: Filter by channel ID. + in: query + schema: + type: integer + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /log: + post: + operationId: writeLog + summary: Logging a multi-line message to the Plex Media Server log + tags: + - Log + description: 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 PUT endpoint as a linefeed-separated block of POST data. The parameters for each query string match as above. + security: + - token: + - admin + requestBody: + description: Line separated list of log items + required: true + content: + text/plain: + example: + level: DEBUG + message: string value + source: string value + schema: + $ref: "#/components/schemas/LogMessageRequest" + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully created/executed logging a multi-line message to the plex media server log + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + put: + operationId: writeMessage + summary: Logging a single-line message to the Plex Media Server log + tags: + - Log + description: |- + This endpoint will write a single-line log message, including a level and source to the main Plex Media Server log. + + Note: This endpoint responds to all HTTP verbs **except POST** but PUT is preferred + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: level + description: |- + An integer log level to write to the PMS log with. + - 0: Error + - 1: Warning + - 2: Info + - 3: Debug + - 4: Verbose + in: query + schema: + type: integer + enum: + - 0 + - 1 + - 2 + - 3 + - 4 + - name: message + description: The text of the message to write to the log. + in: query + schema: + type: string + - name: source + description: A string indicating the source of the message. + in: query + schema: + type: string + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully updated logging a single-line message to the plex media server log + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /log/networked: + post: + operationId: enablePapertrail + summary: Enabling Papertrail + tags: + - Log + description: |- + This endpoint will enable all Plex Media Server logs to be sent to the Papertrail networked logging site for a period of time + + Note: This endpoint responds to all HTTP verbs but POST is preferred + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: minutes + description: The number of minutes logging should be sent to Papertrail + in: query + schema: + type: integer + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully created/executed enabling papertrail + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '403': + description: User doesn't have permission + content: + text/html: + schema: + type: string + /media/grabbers: + get: + operationId: getAvailableGrabbers + summary: Get available grabbers + tags: + - Devices + description: Get available grabbers visible to the server + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: protocol + description: Only return grabbers providing this protocol. + in: query + schema: + type: string + example: livetv + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + MediaGrabber: + type: array + items: + $ref: "#/components/schemas/MediaGrabber" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + MediaGrabber: + - title: string value + identifier: string value + protocol: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /media/grabbers/devices: + get: + operationId: listDevices + summary: Get all devices + tags: + - Devices + description: Get the list of all devices present + security: + - token: + - admin + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDevice" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + post: + operationId: addDevice + summary: Add a device + tags: + - Devices + description: This endpoint adds a device to an existing grabber. The device is identified, and added to the correct grabber. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: uri + description: The URI of the device. + in: query + schema: + type: string + example: http://10.0.0.5 + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDevice" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + /media/grabbers/devices/discover: + get: + operationId: discoverDevices + summary: Tell grabbers to discover devices + tags: + - Devices + description: Tell grabbers to discover devices + security: + - token: + - admin + parameters: + - name: protocol + description: Protocol to filter discovery. + in: query + schema: + type: string + enum: + - stream + - download + - livetv + - name: grabberIdentifier + description: Targeted grabber identifier. + in: query + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDevice" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /media/providers: + get: + operationId: listProviders + summary: Get the list of available media providers + tags: + - Provider + description: Get the list of all available media providers for this PMS. This will generally include the library provider and possibly EPG if DVR is set up. + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - type: object + properties: + MediaContainer: + type: object + properties: + Provider: + type: array + items: + $ref: "#/components/schemas/Provider" + - $ref: "#/components/schemas/ProviderFeature" + example: + MediaContainer: + Provider: + - title: string value + identifier: string value + Protocol: string value + types: string value + title: string value + type: string value + key: search + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + post: + operationId: addProvider + summary: Add a media provider + tags: + - Provider + description: This endpoint registers a media provider with the server. Once registered, the media server acts as a reverse proxy to the provider, allowing both local and remote providers to work. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: url + description: The URL of the media provider to add. + in: query + required: true + schema: + type: string + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully created/executed add a media provider + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + /media/providers/refresh: + post: + operationId: refreshProviders + summary: Refresh media providers + tags: + - Provider + description: Refresh all known media providers. This is useful in case a provider has updated features. + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully created/executed refresh media providers + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /media/subscriptions: + get: + operationId: getAllSubscriptions + summary: Get all subscriptions + tags: + - Subscriptions + description: Get all subscriptions and potentially the grabs too + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: includeGrabs + description: Indicates whether the active grabs should be included as well + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeStorage + description: Compute the storage of recorded items desired by this subscription + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: X-Plex-Container-Start + description: Pagination start offset. + in: query + schema: + type: integer + - name: X-Plex-Container-Size + description: Pagination page size. + in: query + schema: + type: integer + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithSubscription" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + MediaSubscription: + - title: string value + type: 1 + airingsType: New Airings Only + createdAt: 1 + Directory: {} + durationTotal: 1 + key: string value + librarySectionTitle: string value + locationPath: string value + MediaGrabOperation: + - currentSize: 1 + grabberIdentifier: string value + grabberProtocol: string value + id: string value + key: string value + mediaIndex: 1 + mediaSubscriptionID: 1 + Metadata: + title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + percent: 1 + provider: string value + status: inactive + Playlist: {} + Setting: + - type: bool + default: string value + advanced: true + enumValues: string value + group: string value + hidden: true + id: string value + label: string value + summary: string value + value: string value + storageTotal: 1 + targetLibrarySectionID: 1 + targetSectionLocationID: 1 + Video: {} + '403': + description: User cannot access DVR on this server + content: + text/html: + schema: + type: string + post: + operationId: createSubscription + summary: Create a subscription + tags: + - Subscriptions + description: Create a subscription. The query parameters should be mostly derived from the [template](#tag/Subscriptions/operation/mediaSubscriptionsGetTemplate) + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: targetLibrarySectionID + description: The library section into which we'll grab the media. Not actually required when the subscription is to a playlist. + in: query + schema: + type: integer + example: 1 + - name: targetSectionLocationID + description: The section location into which to grab. + in: query + schema: + type: integer + example: 3 + - name: type + description: The type of the thing we're subscribing too (e.g. show, season). + in: query + schema: + type: integer + example: 2 + x-speakeasy-name-override: mediaType + - name: hints + description: "Hints describing what we're looking for. Note: The hint `ratingKey` is required for downloading from a PMS remote." + in: query + style: deepObject + schema: + type: object + example: + title: Family Guy + - name: prefs + description: Subscription preferences. + in: query + style: deepObject + schema: + type: object + example: + minVideoQuality: 720 + - name: params + description: |- + Subscription parameters. + - `mediaProviderID`: Required for downloads to indicate which MP the subscription will download into + - `source`: Required for downloads to indicate the source of the downloaded content. + in: query + style: deepObject + schema: + type: object + example: + mediaProviderID: 1 + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + MediaSubscription: + type: array + items: + $ref: "#/components/schemas/MediaSubscription" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + MediaSubscription: + - title: string value + type: 1 + airingsType: New Airings Only + createdAt: 1 + Directory: {} + durationTotal: 1 + key: string value + librarySectionTitle: string value + locationPath: string value + MediaGrabOperation: + - currentSize: 1 + grabberIdentifier: string value + grabberProtocol: string value + id: string value + key: string value + mediaIndex: 1 + mediaSubscriptionID: 1 + Metadata: + title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + percent: 1 + provider: string value + status: inactive + Playlist: {} + Setting: + - type: bool + default: string value + advanced: true + enumValues: string value + group: string value + hidden: true + id: string value + label: string value + summary: string value + value: string value + storageTotal: 1 + targetLibrarySectionID: 1 + targetSectionLocationID: 1 + Video: {} + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '403': + description: User cannot access DVR on this server + content: + text/html: + schema: + type: string + '409': + description: An subscription with the same parameters already exists + content: + text/html: + schema: + type: string + /media/subscriptions/process: + post: + operationId: processSubscriptions + summary: Process all subscriptions + tags: + - Subscriptions + description: Process all subscriptions asynchronously + responses: + '200': + description: OK + headers: + X-Plex-Activity: + description: The activity of the process + schema: + type: string + content: + text/html: + schema: + $ref: "#/components/schemas/SuccessResponse" + '403': + description: User cannot access DVR on this server + content: + text/html: + schema: + type: string + /media/subscriptions/scheduled: + get: + operationId: getScheduledRecordings + summary: Get all scheduled recordings + tags: + - Subscriptions + description: Get all scheduled recordings across all subscriptions + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMediaGrabOperation" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + MediaGrabOperation: + - currentSize: 1 + grabberIdentifier: string value + grabberProtocol: string value + id: string value + key: string value + mediaIndex: 1 + mediaSubscriptionID: 1 + Metadata: + title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + percent: 1 + provider: string value + status: inactive + '403': + description: User cannot access DVR on this server + content: + text/html: + schema: + type: string + /media/subscriptions/template: + get: + operationId: getTemplate + summary: Get the subscription template + tags: + - Subscriptions + description: Get the templates for a piece of media which could include fetching one airing, season, the whole show, etc. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: guid + description: The guid of the item for which to get the template + in: query + schema: + type: string + example: plex://episode/5fc70265c40548002d539d23 + - name: type + description: Subscription type. + in: query + schema: + type: string + x-speakeasy-name-override: mediaType + - name: targetLibrarySectionID + description: Target library section ID. + in: query + schema: + type: integer + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + SubscriptionTemplate: + type: array + items: + type: object + properties: + MediaSubscription: + type: array + items: + allOf: + - $ref: "#/components/schemas/MediaSubscription" + - type: object + properties: + title: + description: The title of this subscription type + type: string + example: This Episode + type: + description: Metadata type number + type: integer + airingsType: + type: string + librarySectionTitle: + type: string + locationPath: + type: string + parameters: + description: Parameter string for creating this subscription + type: string + selected: + type: boolean + targetLibrarySectionID: + description: Where this subscription will record to + type: integer + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + SubscriptionTemplate: + - MediaSubscription: [] + '403': + description: User cannot access DVR on this server + content: + text/html: + schema: + type: string + /music/:/transcode: + get: + operationId: transcodeMusic + summary: Transcode Music + tags: + - Transcoder + description: Audio transcode endpoint for music playback. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /myplex/account: + get: + operationId: getMyPlexAccount + summary: Get MyPlex Account + tags: + - Users + description: Get linked MyPlex account info on PMS. + security: + - token: + - admin + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/UserPlexAccount" + example: + title: string value + adsConsentReminderAt: 1 + adsConsentSetAt: 1 + authToken: string value + backupCodesCreated: false + confirmed: false + country: string value + email: user@example.com + emailOnlyAuth: false + entitlements: + - string value + experimentalFeatures: false + friendlyName: string value + guest: false + hasPassword: true + home: false + homeAdmin: false + homeSize: 1 + id: 1 + joinedAt: 1 + mailingListActive: false + mailingListStatus: active + maxHomeSize: 1 + pin: string value + profile: + autoSelectAudio: true + protected: false + rememberExpiresAt: 1 + restricted: false + roles: + - string value + scrobbleTypes: string value + services: + - endpoint: https://plex.tv + identifier: string value + status: online + subscription: + active: true + features: + - string value + status: Inactive + subscriptions: + - active: true + features: + - string value + status: Inactive + thumb: https://plex.tv + twoFactorEnabled: false + username: string value + uuid: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /myplex/claim: + post: + operationId: claimServer + summary: Claim Server + tags: + - General + description: Claim the local PMS server using a claim token obtained from plex.tv. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/ClaimTokenResponse" + example: + token: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /myplex/refreshReachability: + put: + operationId: refreshReachability + summary: Refresh Reachability + tags: + - General + description: Refresh remote access port mapping. + security: + - token: + - admin + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /photo/:/transcode: + get: + operationId: transcodeImage + summary: Transcode an image + tags: + - Transcoder + description: Transcode an image, possibly changing format or size + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: url + description: The source URL for the image to transcode. Note, if this URL requires a token such as `X-Plex-Token`, it should be given as a query parameter to this url. + in: query + schema: + type: string + example: /library/metadata/265/thumb/1715112705 + - name: format + description: The output format for the image; defaults to jpg + in: query + required: false + schema: + type: string + enum: + - jpg + - jpeg + - png + - ppm + - name: width + description: The desired width of the output image + in: query + schema: + type: integer + - name: height + description: The desired height of the output image + in: query + schema: + type: integer + - name: quality + description: The desired quality of the output. -1 means the highest quality. Defaults to -1 + in: query + required: false + schema: + type: integer + minimum: -1 + maximum: 127 + - name: background + description: The background color to apply before painting the image. Only really applicable if image has transparency. Defaults to none + in: query + required: false + schema: + type: string + example: '#ff5522' + - name: upscale + description: Indicates if image should be upscaled to the desired width/height. Defaults to false + in: query + required: false + schema: + $ref: "#/components/schemas/BoolInt" + - name: minSize + description: Indicates if image should be scaled to fit the smaller dimension. By default (false) the image is scaled to fit within the width/height specified but if this parameter is true, it will allow overflowing one dimension to fit the other. Essentially it is making the width/height minimum sizes of the image or sizing the image to fill the entire width/height even if it overflows one dimension. + in: query + required: false + schema: + $ref: "#/components/schemas/BoolInt" + - name: rotate + description: Obey the rotation values specified in EXIF data. Defaults to true. + in: query + required: false + schema: + $ref: "#/components/schemas/BoolInt" + - name: blur + description: Apply a blur to the image, Defaults to 0 (none) + in: query + required: false + schema: + type: integer + - name: saturation + description: Scale the image saturation by the specified percentage. Defaults to 100 + in: query + required: false + schema: + type: integer + minimum: 0 + maximum: 100 + - name: opacity + description: Render the image at the specified opacity percentage. Defaults to 100 + in: query + required: false + schema: + type: integer + minimum: 0 + maximum: 100 + - name: chromaSubsampling + description: |- + Use the specified chroma subsambling. + - 0: 411 + - 1: 420 + - 2: 422 + - 3: 444 + Defaults to 3 (444) + in: query + required: false + schema: + type: integer + enum: + - 0 + - 1 + - 2 + - 3 + - name: blendColor + description: The color to blend with the image. Defaults to none + in: query + required: false + schema: + type: string + example: '#ff5522' + responses: + '200': + description: The resulting image + content: + image/jpeg: + schema: + type: string + format: binary + image/png: + schema: + type: string + format: binary + image/x-portable-pixmap: + schema: + type: string + format: binary + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '403': + $ref: "#/components/responses/403" + description: Forbidden - User does not have permission to access this resource + content: + text/html: + schema: + type: string + '404': + $ref: "#/components/responses/404" + description: Not Found - The requested resource does not exist + content: + text/html: + schema: + type: string + /ping: + get: + operationId: ping + summary: Ping the server + tags: + - Authentication + description: Health / latency check. No authentication required. + security: [] + servers: + - url: https://plex.tv/api/v2 + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /pins: + post: + operationId: createOAuthPin + summary: Create OAuth PIN + tags: + - Authentication + description: Create a 4-character PIN for device linking via OAuth. The user must visit https://plex.tv/link and enter the PIN to authorize the device. + security: + - clientIdentifier: [] + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: PIN created successfully + content: + application/json: + schema: + type: object + properties: + authToken: + type: + - string + - 'null' + clientIdentifier: + type: string + code: + type: string + createdAt: + type: string + expiresAt: + type: string + expiresIn: + type: integer + id: + type: integer + newRegistration: + type: boolean + product: + type: string + qr: + type: string + trusted: + type: boolean + example: + clientIdentifier: example + code: example + createdAt: example + expiresAt: example + expiresIn: 1 + id: 1 + newRegistration: true + product: example + qr: example + trusted: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + x-speakeasy-retries: + backoff: + exponent: 2 + initialInterval: 1000 + maxElapsedTime: 300000 + maxInterval: 30000 + retryConnectionErrors: true + statusCodes: + - '429' + strategy: backoff + /pins.xml: + post: + operationId: createLegacyPin + summary: Create Legacy PIN + tags: + - Authentication + description: Legacy PIN creation (XML). + servers: + - url: https://plex.tv + responses: + '200': + description: OK + content: + application/xml: + schema: + $ref: "#/components/schemas/LegacyPinResponse" + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + x-speakeasy-retries: + backoff: + exponent: 2 + initialInterval: 1000 + maxElapsedTime: 300000 + maxInterval: 30000 + retryConnectionErrors: true + statusCodes: + - '429' + strategy: backoff + /pins/link: + put: + operationId: linkOAuthPin + summary: Link OAuth PIN + tags: + - Authentication + description: Link a PIN to an account (OAuth completion). + servers: + - url: https://plex.tv/api/v2 + requestBody: + content: + application/json: + example: + authToken: example + pin: example + schema: + type: object + properties: + authToken: + type: string + pin: + type: string + application/x-www-form-urlencoded: + example: + authToken: example + pin: example + schema: + type: object + properties: + authToken: + type: string + pin: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + x-speakeasy-retries: + backoff: + exponent: 2 + initialInterval: 1000 + maxElapsedTime: 300000 + maxInterval: 30000 + retryConnectionErrors: true + statusCodes: + - '429' + strategy: backoff + /player/playback/audioStream: + post: + operationId: playerAudioStream + summary: Player Audio Stream + tags: + - Playback + description: Change the active audio stream. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + - name: streamID + description: The unique identifier of the stream + in: query + schema: + type: integer + responses: + '200': + description: OK + content: + application/octet-stream: + schema: + $ref: "#/components/schemas/BinaryResponse" + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /player/playback/mute: + post: + operationId: playerMute + summary: Player Mute + tags: + - Playback + description: Mute the client audio + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /player/playback/pause: + post: + operationId: playerPause + summary: Player Pause + tags: + - Playback + description: Pause playback on the client + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /player/playback/play: + post: + operationId: playerPlay + summary: Player Play + tags: + - Playback + description: Start playback on the client + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /player/playback/playMedia: + post: + operationId: playerPlayMedia + summary: Player Play Media + tags: + - Playback + description: Play a specific media item on the client. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + - name: key + description: The key of the media item to play + in: query + schema: + type: string + - name: offset + description: The byte offset for stream seeking + in: query + schema: + type: integer + - name: machineIdentifier + description: The machine identifier of the target device + in: query + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /player/playback/refreshPlayQueue: + post: + operationId: playerRefreshplayqueue + summary: Player Refresh Play Queue + tags: + - Playback + description: Refresh the play queue on the client + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /player/playback/seek: + post: + operationId: playerSeek + summary: Player Seek + tags: + - Playback + description: Seek to a specific time in the current playback. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + - name: offset + description: Target offset in milliseconds + in: query + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /player/playback/setParameters: + post: + operationId: playerSetParameters + summary: Player Set Parameters + tags: + - Playback + description: Set shuffle, repeat, and volume parameters. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + - name: shuffle + description: Whether to enable shuffle mode + in: query + schema: + type: integer + enum: + - 0 + - 1 + - name: repeat + description: The repeat mode to set + in: query + schema: + type: integer + enum: + - 0 + - 1 + - 2 + - name: volume + description: The volume level to set + in: query + schema: + type: integer + minimum: 0 + maximum: 100 + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /player/playback/setRating: + post: + operationId: playerSetRating + summary: Player Set Rating + tags: + - Playback + description: Rate the currently playing item. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + - name: rating + description: The rating value to set + in: query + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /player/playback/setState: + post: + operationId: playerSetState + summary: Player Set State + tags: + - Playback + description: Set the playback state directly. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + - name: state + description: The desired playback state + in: query + schema: + type: string + enum: + - playing + - paused + - stopped + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /player/playback/setStreams: + post: + operationId: playerSetStreams + summary: Player Set Streams + tags: + - Playback + description: Set active audio, subtitle, and video streams. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + - name: audioStreamID + description: The unique identifier of the audiostream + in: query + schema: + type: integer + - name: subtitleStreamID + description: The unique identifier of the subtitlestream + in: query + schema: + type: integer + - name: videoStreamID + description: The unique identifier of the videostream + in: query + schema: + type: integer + responses: + '200': + description: OK + content: + application/octet-stream: + schema: + $ref: "#/components/schemas/BinaryResponse" + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /player/playback/setTextStream: + post: + operationId: playerSetTextStream + summary: Player Set Text Stream + tags: + - Playback + description: Set the active text stream. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + - name: streamID + description: The unique identifier of the stream + in: query + schema: + type: integer + responses: + '200': + description: OK + content: + application/octet-stream: + schema: + $ref: "#/components/schemas/BinaryResponse" + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /player/playback/setViewOffset: + post: + operationId: playerSetViewOffset + summary: Player Set View Offset + tags: + - Playback + description: Set the resume offset for the current item. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + - name: offset + description: The byte offset for stream seeking + in: query + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /player/playback/skipBy: + post: + operationId: playerSkipBy + summary: Player Skip By + tags: + - Playback + description: Skip forward or backward by a number of items. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + - name: offset + description: Number of items to skip (positive for forward, negative for backward) + in: query + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /player/playback/skipTo: + post: + operationId: playerSkipTo + summary: Player Skip To + tags: + - Playback + description: Skip to a specific item in the play queue. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + - name: key + description: The key of the item to skip to + in: query + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /player/playback/stepBack: + post: + operationId: playerStepback + summary: Player Step Back + tags: + - Playback + description: Step back one frame + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /player/playback/stepForward: + post: + operationId: playerStepforward + summary: Player Step Forward + tags: + - Playback + description: Step forward one frame + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /player/playback/stop: + post: + operationId: playerStop + summary: Player Stop + tags: + - Playback + description: Stop playback on the client + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /player/playback/subtitleStream: + post: + operationId: playerSubtitleStream + summary: Player Subtitle Stream + tags: + - Playback + description: Change the active subtitle stream. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + - name: streamID + description: The unique identifier of the stream + in: query + schema: + type: integer + responses: + '200': + description: OK + content: + application/octet-stream: + schema: + $ref: "#/components/schemas/BinaryResponse" + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /player/playback/unmute: + post: + operationId: playerUnmute + summary: Player Unmute + tags: + - Playback + description: Unmute the client audio + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /player/playback/videoStream: + post: + operationId: playerVideoStream + summary: Player Video Stream + tags: + - Playback + description: Change the active video stream. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + - name: streamID + description: The unique identifier of the stream + in: query + schema: + type: integer + responses: + '200': + description: OK + content: + application/octet-stream: + schema: + $ref: "#/components/schemas/BinaryResponse" + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /player/playback/volume: + post: + operationId: playerVolume + summary: Player Volume + tags: + - Playback + description: Set the client volume. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + - name: level + description: The level + in: query + schema: + type: integer + minimum: 0 + maximum: 100 + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /player/resources: + get: + operationId: getClientResources + summary: Get Client Resources + tags: + - Playback + description: Get client capabilities and device info. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDevice" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /player/timeline/poll: + get: + operationId: playerPollTimeline + summary: Player Poll Timeline + tags: + - Playback + description: Poll the client for current playback timeline. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Target-Client-Identifier + description: The client identifier of the target device to control. If omitted, the command is sent to the default/active client. + in: header + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /playlists: + delete: + operationId: deletePlaylistByRatingKey + summary: Delete Playlist + tags: + - Playlists + description: Delete a playlist. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ratingKey + description: The rating key of the playlist to delete. + in: query + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + get: + operationId: listPlaylists + summary: List playlists + tags: + - Playlist + description: Gets a list of playlists and playlist folders for a user. General filters are permitted, such as `sort=lastViewedAt:desc`. A flat playlist list can be retrieved using `type=15` to limit the collection to just playlists. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/smart" + - name: playlistType + description: Limit to a type of playlist + in: query + schema: + type: string + enum: + - audio + - video + - photo + - name: type + description: Filter by playlist type. Use 42 for optimized/conversion items. + in: query + schema: + type: integer + x-speakeasy-name-override: mediaType + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + post: + operationId: createPlaylist + summary: Create a Playlist + tags: + - Library Playlists + description: Create a new playlist. By default the playlist is blank. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: uri + description: The content URI for what we're playing (e.g. `library://...`). + in: query + schema: + type: string + - name: playQueueID + description: To create a playlist from an existing play queue. + in: query + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + /playlists/upload: + post: + operationId: uploadPlaylist + summary: Upload media art + tags: + - Library Playlists + description: 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. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: path + description: 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. + in: query + schema: + type: string + example: /home/barkley/playlist.m3u + - name: force + description: 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. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully created/executed upload media art + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '403': + $ref: "#/components/responses/200" + description: Forbidden - User does not have permission to access this resource + content: + text/html: + schema: + type: string + '500': + description: The playlist could not be imported + content: + text/html: + schema: + type: string + /playQueues: + post: + operationId: createPlayQueue + summary: Create a play queue + tags: + - Play Queue + description: |- + Makes a new play queue for a device. The source of the playqueue can either be a URI, or a playlist. The response is a media container with the initial items in the queue. Each item in the queue will be a regular item but with `playQueueItemID` - a unique ID since the queue could have repeated items with the same `ratingKey`. + Note: Either `uri` or `playlistID` must be specified + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: uri + description: The content URI for what we're playing. + in: query + schema: + type: string + - name: playlistID + description: the ID of the playlist we're playing. + in: query + schema: + type: integer + - name: type + description: The type of play queue to create + in: query + required: true + schema: + type: string + enum: + - audio + - video + - photo + x-speakeasy-name-override: mediaType + - name: key + description: The key of the first item to play, defaults to the first in the play queue. + in: query + schema: + type: string + - name: shuffle + description: Whether to shuffle the playlist, defaults to 0. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: repeat + description: If the PQ is bigger than the window, fill any empty space with wraparound items, defaults to 0. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: continuous + description: Whether to create a continuous play queue (e.g. from an episode), defaults to 0. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: extrasPrefixCount + description: Number of trailers to prepend a movie with not including the pre-roll. If omitted the pre-roll will not be returned in the play queue. When resuming a movie `extrasPrefixCount` should be omitted as a parameter instead of passing 0. + in: query + schema: + type: integer + - name: recursive + description: Only applies to queues of type photo, whether to retrieve all descendent photos from an album or section, defaults to 1. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: onDeck + description: Only applies to queues of type show or seasons, whether to return a queue that is started on the On Deck episode if one exists. Otherwise begins the play queue on the beginning of the show or season. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithPlayQueue" + example: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + playQueueID: 42 + playQueueLastAddedItemID: 123 + playQueueSelectedItemID: 1 + playQueueSelectedItemOffset: 0 + playQueueSelectedMetadataItemID: 456 + playQueueShuffled: false + playQueueSourceURI: library://abc123/item/%2Flibrary%2Fmetadata%2F1 + playQueueTotalCount: 50 + playQueueVersion: 3 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + /playQueues/1: + get: + operationId: getConversionQueue + summary: Get Conversion Queue + tags: + - Timeline + description: Get the conversion/optimization queue. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithPlayQueue" + example: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + playQueueID: 42 + playQueueLastAddedItemID: 123 + playQueueSelectedItemID: 1 + playQueueSelectedItemOffset: 0 + playQueueSelectedMetadataItemID: 456 + playQueueShuffled: false + playQueueSourceURI: library://abc123/item/%2Flibrary%2Fmetadata%2F1 + playQueueTotalCount: 50 + playQueueVersion: 3 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /resources: + get: + operationId: getServerResources + summary: Get Server Resources + tags: + - Plex + description: Get Plex server access tokens and server connections + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - name: includeHttps + description: Include Https entries in the results + in: query + schema: + allOf: + - $ref: "#/components/schemas/BoolInt" + - type: integer + default: 0 + example: 1 + - name: includeRelay + description: |- + Include Relay addresses in the results + E.g: https://10-0-0-25.bbf8e10c7fa20447cacee74cd9914cde.plex.direct:32400 + in: query + schema: + allOf: + - $ref: "#/components/schemas/BoolInt" + - type: integer + default: 0 + example: 1 + - name: includeIPv6 + description: Include IPv6 entries in the results + in: query + schema: + allOf: + - $ref: "#/components/schemas/BoolInt" + - type: integer + default: 0 + example: 1 + responses: + '200': + description: List of Plex Devices. This includes Plex hosted servers and clients + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/PlexDevice" + example: + - accessToken: string value + clientIdentifier: string value + connections: + - address: string value + IPv6: true + local: true + port: 1 + protocol: http + relay: true + uri: string value + dnsRebindingProtection: true + home: true + httpsRequired: true + name: string value + natLoopbackSupported: true + owned: true + presence: true + product: string value + productVersion: string value + provides: string value + publicAddress: string value + publicAddressMatches: true + relay: true + synced: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + description: Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + content: + application/json: + schema: + $ref: "#/components/schemas/UnauthorizedErrorResponse" + example: + errors: + - code: 1001 + message: User could not be authenticated + status: 401 + /security/resources: + get: + operationId: getSourceConnectionInformation + summary: Get Source Connection Information + tags: + - General + description: 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. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: source + description: The source identifier with an included prefix. + in: query + required: true + schema: + type: string + - name: refresh + description: Force refresh + in: query + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - $ref: "#/components/schemas/ConnectionInfoWrapper" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Device: + accessToken: string value + clientIdentifier: string value + Connection: + - address: string value + local: true + port: 1 + protocol: string value + relay: true + uri: string value + name: string value + '400': + description: A query param is missing or the wrong value + content: + text/html: + schema: + type: string + '403': + description: Invalid or no token provided or a transient token could not be created + content: + text/html: + schema: + type: string + /security/token: + post: + operationId: createTransientToken + summary: Get Transient Tokens + tags: + - General + description: |- + 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. + Note: This endpoint responds to all HTTP verbs but POST in preferred + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: type + description: The value `delegation` is the only supported `type` parameter. + in: query + required: true + schema: + type: string + enum: + - delegation + x-speakeasy-name-override: mediaType + - name: scope + description: The value `all` is the only supported `scope` parameter. + in: query + required: true + schema: + type: string + enum: + - all + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + token: + description: The transient token + type: string + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + token: example + '400': + description: A query param is missing or the wrong value + content: + text/html: + schema: + type: string + '403': + description: Invalid or no token provided or a transient token could not be created + content: + text/html: + schema: + type: string + /server: + get: + operationId: getUserServer + summary: Get User Server Association + tags: + - Users + description: Get server association information for the logged-in user. + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/ConnectionInfo" + example: + accessToken: string value + clientIdentifier: string value + Connection: + - address: string value + local: true + port: 1 + protocol: string value + relay: true + uri: string value + name: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /server/access_tokens: + get: + operationId: getServerAccessTokens + summary: Get Server Access Tokens + tags: + - Authentication + description: List access tokens for the server. + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/ServerAccessTokensResponse" + example: + accessTokens: + - expiresAt: string value + scope: string value + token: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /server/users/features: + get: + operationId: getServerUserFeatures + summary: Get Server User Features + tags: + - Users + description: Get features enabled per shared user for the server. + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/ServerUserFeaturesResponse" + example: + features: + - type: string value + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + key: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /servers: + get: + operationId: getLocalServers + summary: Get Local Servers + tags: + - General + description: Get a list of local servers. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /services/browse: + get: + operationId: browseFilesystem + summary: Browse Filesystem + tags: + - General + description: Browse filesystem paths accessible to the server. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: includeFiles + description: Include files in browse results + in: query + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /services/ultrablur/colors: + get: + operationId: getColors + summary: Get UltraBlur Colors + tags: + - UltraBlur + description: Retrieves the four colors extracted from an image for clients to use to generate an ultrablur image. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: url + description: Url for image which requires color extraction. Can be relative PMS library path or absolute url. + in: query + schema: + type: string + example: /library/metadata/217745/art/1718931408 + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + UltraBlurColors: + type: array + items: + $ref: "#/components/schemas/UltraBlurColors" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + UltraBlurColors: + - bottomLeft: string value + bottomRight: string value + topLeft: string value + topRight: string value + '404': + description: The image url could not be found. + content: + text/html: + schema: + type: string + '500': + description: The server was unable to successfully extract the UltraBlur colors. + content: + text/html: + schema: + type: string + /services/ultrablur/image: + get: + operationId: getImage + summary: Get UltraBlur Image + tags: + - UltraBlur + description: Retrieves a server-side generated UltraBlur image based on the provided color inputs. Clients should always call this via the photo transcoder endpoint. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: topLeft + description: The base color (hex) for the top left quadrant. + in: query + schema: + type: string + example: 3f280a + - name: topRight + description: The base color (hex) for the top right quadrant. + in: query + schema: + type: string + example: 6b4713 + - name: bottomRight + description: The base color (hex) for the bottom right quadrant. + in: query + schema: + type: string + example: 0f2a43 + - name: bottomLeft + description: The base color (hex) for the bottom left quadrant. + in: query + schema: + type: string + example: 1c425d + - name: width + description: Width in pixels for the image. + in: query + schema: + type: integer + minimum: 320 + maximum: 3840 + example: 1920 + - name: height + description: Height in pixels for the image. + in: query + schema: + type: integer + minimum: 240 + maximum: 2160 + example: 1080 + - name: noise + description: Whether to add noise to the ouput image. Noise can reduce color banding with the gradients. Image sizes with noise will be larger. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + responses: + '200': + description: OK + content: + image/png: + schema: + type: string + format: binary + '400': + description: Requested width and height parameters are out of bounds (maximum 3840 x 2160) + content: + text/html: + schema: + type: string + /shared_servers: + post: + operationId: shareServer + summary: Share Server + tags: + - Users + description: Share a server with a friend or managed user. + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /statistics/bandwidth: + get: + operationId: getBandwidthStatistics + summary: Get Bandwidth Statistics + tags: + - General + description: Get dashboard bandwidth data. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: timespan + description: Dashboard timespan (1-6) + in: query + schema: + type: integer + minimum: 1 + maximum: 6 + - name: accountID + description: Filter by account ID + in: query + schema: + type: integer + - name: deviceID + description: Filter by device ID + in: query + schema: + type: integer + - name: lan + description: Filter to LAN-only traffic + in: query + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /statistics/resources: + get: + operationId: getResourceStatistics + summary: Get Resource Statistics + tags: + - General + description: Get dashboard resource data. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /status/sessions: + get: + operationId: listSessions + summary: List Sessions + tags: + - Status + description: List all current playbacks on this server + security: + - token: + - admin + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Metadata: + type: array + items: + allOf: + - type: object + properties: + Player: + $ref: "#/components/schemas/Player" + Session: + $ref: "#/components/schemas/Session" + User: + $ref: "#/components/schemas/User" + - $ref: "#/components/schemas/Metadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /status/sessions/background: + get: + operationId: getBackgroundTasks + summary: Get background tasks + tags: + - Status + description: Get the list of all background tasks + security: + - token: + - admin + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + TranscodeJob: + type: array + items: + $ref: "#/components/schemas/TranscodeJob" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + TranscodeJob: + - title: string value + type: transcode + generatorID: 1 + key: string value + progress: 1 + ratingKey: string value + remaining: 1 + size: 1 + speed: 1 + targetTagID: 1 + thumb: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /status/sessions/history/all: + get: + operationId: listPlaybackHistory + summary: List Playback History + tags: + - Status + description: |- + List all playback history (Admin can see all users, others can only see their own). + Pagination should be used on this endpoint. Additionally this endpoint supports `includeFields`, `excludeFields`, `includeElements`, and `excludeElements` parameters. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: X-Plex-Container-Start + description: Pagination start offset + in: query + schema: + type: integer + - name: X-Plex-Container-Size + description: Pagination page size + in: query + schema: + type: integer + - name: accountID + description: The account id to restrict view history + in: query + schema: + type: integer + - name: viewedAt + description: The time period to restrict history (typically of the form `viewedAt>=12456789`) + in: query + schema: + type: integer + - name: librarySectionID + description: The library section id to restrict view history + in: query + schema: + type: integer + - name: metadataItemID + description: The metadata item to restrict view history (can provide the id for a show to see all of that show's view history). Note this is translated to `metadata_items.id`, `parents.id`, or `grandparents.id` internally depending on the metadata type. + in: query + schema: + type: integer + - name: sort + description: The field on which to sort. Multiple orderings can be specified separated by `,` and the direction specified following a `:` (`desc` or `asc`; `asc` is assumed if not provided). Note `metadataItemID` may not be used here. + in: query + schema: + type: array + items: + type: string + example: viewedAt:desc,accountID + - name: excludeElements + description: Comma-separated list of elements to exclude from the response + in: query + schema: + type: string + - name: excludeFields + description: Comma-separated list of fields to exclude from the response + in: query + schema: + type: string + - name: includeFields + description: Whitelist of fields to return + in: query + schema: + type: string + - name: includeElements + description: Whitelist of elements to include + in: query + schema: + type: string + - name: viewedAt> + description: Greater-than filter for viewedAt timestamp + in: query + schema: + type: integer + - name: viewedAt< + description: Less-than filter for viewedAt timestamp + in: query + schema: + type: integer + - name: deviceID + description: Filter by device ID + in: query + schema: + type: integer + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Metadata: + type: array + items: + $ref: "#/components/schemas/PlaybackHistoryMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + accountID: 1 + deviceID: 1 + grandparentRatingKey: string value + grandparentTitle: string value + historyKey: string value + index: 1 + key: string value + librarySectionID: string value + originallyAvailableAt: string value + parentIndex: 1 + parentTitle: string value + ratingKey: string value + thumb: string value + viewedAt: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /status/sessions/terminate: + post: + operationId: terminateSession + summary: Terminate a session + tags: + - Status + description: Terminate a playback session kicking off the user + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sessionId + description: The session id (found in the `Session` element in [/status/sessions](#tag/Status/operation/statusGetSlash)) + in: query + required: true + schema: + type: string + example: cdefghijklmnopqrstuvwxyz + - name: reason + description: The reason to give to the user (typically displayed in the client) + in: query + schema: + type: string + example: Stop Playing + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully created/executed terminate a session + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '401': + description: Server does not have the feature enabled + content: + text/html: + schema: + type: string + '403': + description: sessionId is empty + content: + text/html: + schema: + type: string + '404': + description: Session not found + content: + text/html: + schema: + type: string + /sync: + get: + operationId: getSyncStatus + summary: Get Sync Status + tags: + - General + description: Get sync status overview. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithStatus" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + status: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /sync/items: + get: + operationId: getSyncItems + summary: Get Sync Items + tags: + - General + description: Get sync items list. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /sync/queue: + get: + operationId: getSyncQueue + summary: Get Sync Queue + tags: + - General + description: Get sync queue. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /sync/refreshContent: + put: + operationId: refreshSyncContent + summary: Refresh Sync Content + tags: + - General + description: Force PMS to refresh content for known SyncLists. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /sync/refreshSynclists: + put: + operationId: refreshSyncLists + summary: Refresh Sync Lists + tags: + - General + description: Force PMS to download new SyncList from plex.tv. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /sync/transcodeQueue: + get: + operationId: getSyncTranscodeQueue + summary: Get Sync Transcode Queue + tags: + - General + description: Get sync transcode queue status. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /system/agents: + get: + operationId: getMetadataAgents + summary: Get Metadata Agents + tags: + - General + description: Get a list of available metadata agents. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /system/settings: + get: + operationId: getSystemSettings + summary: Get System Settings + tags: + - General + description: Get system-level settings. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /system/updates: + get: + operationId: checkForSystemUpdates + summary: Check for System Updates + tags: + - General + description: Check for available PMS updates. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /transcode/sessions: + get: + operationId: getTranscodeSessions + summary: Get Transcode Sessions + tags: + - Transcoder + description: Get active transcode sessions. + security: + - token: + - admin + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /updater/apply: + put: + operationId: applyUpdates + summary: Applying updates + tags: + - Updater + description: Apply any downloaded updates. Note that the two parameters `tonight` and `skip` are effectively mutually exclusive. The `tonight` parameter takes precedence and `skip` will be ignored if `tonight` is also passed. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: tonight + description: Indicate that you want the update to run during the next Butler execution. Omitting this or setting it to false indicates that the update should install immediately. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: skip + description: Indicate that the latest version should be marked as skipped. The entry for this version will have the `state` set to `skipped`. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + description: The update process started correctly + content: + text/html: + schema: + $ref: "#/components/schemas/SuccessResponse" + '400': + description: This system cannot install updates + content: + text/html: + schema: + type: string + '500': + description: The update process failed to start + content: + text/html: + schema: + type: string + /updater/check: + put: + operationId: checkUpdates + summary: Checking for updates + tags: + - Updater + description: Perform an update check and potentially download + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: download + description: Indicate that you want to start download any updates found. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully updated checking for updates + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /updater/status: + get: + operationId: getUpdatesStatus + summary: Querying status of updates + tags: + - Updater + description: Get the status of updating the server + security: + - token: + - admin + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - type: object + properties: + MediaContainer: + type: object + properties: + autoUpdateVersion: + description: The version of the updater (currently `1`) + type: integer + canInstall: + description: Indicates whether this install can be updated through these endpoints (typically only on MacOS and Windows) + type: boolean + checkedAt: + description: The last time a check for updates was performed + type: integer + downloadURL: + description: The URL where the update is available + type: string + Release: + type: array + items: + $ref: "#/components/schemas/Release" + status: + description: The current error code (`0` means no error) + type: integer + - $ref: "#/components/schemas/UpdaterStatus" + example: + MediaContainer: + autoUpdateVersion: 1 + canInstall: true + checkedAt: 1 + downloadURL: example + Release: + - added: string value + downloadURL: string value + fixed: string value + key: string value + state: available + version: string value + status: 1 + checkedAt: 1 + downloadURL: string value + Release: + - added: string value + downloadURL: string value + fixed: string value + key: string value + state: available + version: string value + status: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /user: + get: + operationId: getTokenDetails + summary: Get Token Details + tags: + - Authentication + description: Get the User data from the provided X-Plex-Token + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: Logged in user details + content: + application/json: + schema: + $ref: "#/components/schemas/UserPlexAccount" + example: + title: string value + adsConsentReminderAt: 1 + adsConsentSetAt: 1 + authToken: string value + backupCodesCreated: false + confirmed: false + country: string value + email: user@example.com + emailOnlyAuth: false + entitlements: + - string value + experimentalFeatures: false + friendlyName: string value + guest: false + hasPassword: true + home: false + homeAdmin: false + homeSize: 1 + id: 1 + joinedAt: 1 + mailingListActive: false + mailingListStatus: active + maxHomeSize: 1 + pin: string value + profile: + autoSelectAudio: true + protected: false + rememberExpiresAt: 1 + restricted: false + roles: + - string value + scrobbleTypes: string value + services: + - endpoint: https://plex.tv + identifier: string value + status: online + subscription: + active: true + features: + - string value + status: Inactive + subscriptions: + - active: true + features: + - string value + status: Inactive + thumb: https://plex.tv + twoFactorEnabled: false + username: string value + uuid: string value + '400': + description: Bad Request - A parameter was not specified, or was specified incorrectly. + content: + application/json: + schema: + $ref: "#/components/schemas/BadRequestErrorResponse" + example: + errors: + - code: 1000 + message: X-Plex-Client-Identifier is missing + status: 400 + '401': + description: Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + content: + application/json: + schema: + $ref: "#/components/schemas/UnauthorizedErrorResponse" + example: + errors: + - code: 1001 + message: User could not be authenticated + status: 401 + /user/view_state_sync: + put: + operationId: updateViewStateSync + summary: Update View State Sync + tags: + - Users + description: Enable or disable watch-state sync consent for the logged-in user. + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /users: + get: + operationId: getUsers + summary: Get list of all connected users + tags: + - Users + description: Get list of all users that are friends and have library access with the provided Plex authentication token + servers: + - url: https://plex.tv/api + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: Successful response with media container data in JSON + content: + application/json: + schema: + type: object + properties: + MediaContainer: + description: Container holding user and server details. + type: object + properties: + friendlyName: + description: The friendly name of the Plex instance. + type: string + example: myPlex + identifier: + type: string + example: com.plexapp.plugins.myplex + machineIdentifier: + description: Unique Machine identifier of the Plex server. + type: string + example: 3dff4c4da3b1229a649aa574a9e2b419a684a20e + size: + description: Number of users in the current response. + type: integer + example: 30 + totalSize: + description: Total number of users. + type: integer + example: 30 + User: + description: List of users with access to the Plex server. + type: array + items: + type: object + properties: title: - type: string description: User's display name. - example: Plex User - username: - type: string - description: User's username. - example: zgfuc7krcqfimrmb9lsl5j - email: - type: string - description: User's email address. - example: zgfuc7krcqfimrmb9lsl5j@protonmail.com - recommendationsPlaylistId: - description: ID of the user's recommendation playlist. - type: - - 'null' - - string - example: '' - thumb: type: string - description: URL to the user's avatar image. - example: 'https://plex.tv/users/3346028014e93acd/avatar?c=1731605021' - protected: + example: Plex User + allowCameraUpload: allOf: - - description: Indicates whether the account is protected. + - description: Indicates if the user is allowed to upload from a camera. - type: integer format: int32 enum: - 0 - 1 - example: 1 default: 0 + example: 1 x-speakeasy-enums: - DISABLE - ENABLE - home: + allowChannels: allOf: - - description: Indicates if the user is part of a home group. + - description: Indicates if the user has access to channels. - type: integer format: int32 enum: - 0 - 1 - example: 1 default: 0 + example: 1 x-speakeasy-enums: - DISABLE - ENABLE - allowTuners: + allowSubtitleAdmin: allOf: - - description: Indicates if the user is allowed to use tuners. + - description: Indicates if the user can manage subtitles. - type: integer format: int32 enum: - 0 - 1 - example: 1 default: 0 + example: 1 x-speakeasy-enums: - DISABLE - ENABLE @@ -5009,302 +19120,12885 @@ paths: enum: - 0 - 1 - example: 1 default: 0 + example: 1 x-speakeasy-enums: - DISABLE - ENABLE - allowCameraUpload: + allowTuners: allOf: - - description: Indicates if the user is allowed to upload from a camera. + - description: Indicates if the user is allowed to use tuners. - type: integer format: int32 enum: - 0 - 1 + default: 0 example: 1 + x-speakeasy-enums: + - DISABLE + - ENABLE + email: + description: User's email address. + type: string + example: zgfuc7krcqfimrmb9lsl5j@protonmail.com + filterAll: + description: Filters applied for all content. + type: + - 'null' + - string + example: '' + filterMovies: + description: Filters applied for movies. + type: + - 'null' + - string + example: '' + filterMusic: + description: Filters applied for music. + type: + - 'null' + - string + example: '' + filterPhotos: + description: Filters applied for photos. + type: + - 'null' + - string + example: '' + filterTelevision: + description: Filters applied for television. + type: string + example: '' + home: + allOf: + - description: Indicates if the user is part of a home group. + - type: integer + format: int32 + enum: + - 0 + - 1 default: 0 + example: 1 x-speakeasy-enums: - DISABLE - ENABLE - allowChannels: + id: + description: User's unique ID. + type: integer + example: 22526914 + protected: allOf: - - description: Indicates if the user has access to channels. + - description: Indicates whether the account is protected. - type: integer format: int32 enum: - 0 - 1 - example: 1 default: 0 + example: 1 x-speakeasy-enums: - DISABLE - ENABLE - allowSubtitleAdmin: + recommendationsPlaylistId: + description: ID of the user's recommendation playlist. + type: + - 'null' + - string + example: '' + restricted: allOf: - - description: Indicates if the user can manage subtitles. + - description: Indicates if the user has restricted access. - type: integer format: int32 enum: - 0 - 1 - example: 1 default: 0 + example: 1 x-speakeasy-enums: - DISABLE - ENABLE - filterAll: + Server: + description: List of servers owned by the user. + type: array + items: + type: object + properties: + allLibraries: + allOf: + - description: Indicates if the user has access to all libraries. + - type: integer + format: int32 + enum: + - 0 + - 1 + default: 0 + example: 1 + x-speakeasy-enums: + - DISABLE + - ENABLE + id: + description: Unique ID of the server of the connected user + type: integer + example: 907759180 + lastSeenAt: + $ref: "#/components/schemas/PlexDateTime" + machineIdentifier: + description: Machine identifier of the Plex server. + type: string + example: fbb8aa6be6e0c997c6268bc2b4431c8807f70a3 + name: + description: Name of the Plex server of the connected user. + type: string + example: ConnectedUserFlix + numLibraries: + description: Number of libraries in the server this user has access to. + type: integer + example: 16 + owned: + allOf: + - description: Indicates if the user owns the server. + - type: integer + format: int32 + enum: + - 0 + - 1 + default: 0 + example: 1 + x-speakeasy-enums: + - DISABLE + - ENABLE + pending: + allOf: + - description: Indicates if the server is pending approval. + - type: integer + format: int32 + enum: + - 0 + - 1 + default: 0 + example: 1 + x-speakeasy-enums: + - DISABLE + - ENABLE + serverId: + description: ID of the actual Plex server. + type: integer + example: 9999999 + required: + - id + - serverId + - machineIdentifier + - name + - lastSeenAt + - numLibraries + - allLibraries + - owned + - pending + thumb: + description: URL to the user's avatar image. + type: string + example: https://plex.tv/users/3346028014e93acd/avatar?c=1731605021 + username: + description: User's username. + type: string + example: zgfuc7krcqfimrmb9lsl5j + required: + - id + - title + - username + - email + - thumb + - protected + - home + - allowTuners + - allowSync + - allowCameraUpload + - allowChannels + - allowSubtitleAdmin + - restricted + - Server + required: + - friendlyName + - identifier + - machineIdentifier + - totalSize + - size + - User + example: + MediaContainer: + friendlyName: myPlex + identifier: com.plexapp.plugins.myplex + machineIdentifier: 3dff4c4da3b1229a649aa574a9e2b419a684a20e + size: 30 + totalSize: 30 + '400': + description: Bad Request - A parameter was not specified, or was specified incorrectly. + content: + application/json: + schema: + $ref: "#/components/schemas/BadRequestErrorResponse" + example: + errors: + - code: 1000 + message: X-Plex-Client-Identifier is missing + status: 400 + '401': + description: Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + content: + application/json: + schema: + $ref: "#/components/schemas/UnauthorizedErrorResponse" + example: + errors: + - code: 1001 + message: User could not be authenticated + status: 401 + /users/account: + get: + operationId: getAccountXML + summary: Get Account (XML) + tags: + - Users + description: Get the logged-in user's account details in XML format (legacy v1 endpoint). + servers: + - url: https://plex.tv + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/xml: + schema: + $ref: "#/components/schemas/UserPlexAccount" + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /users/account.json: + get: + operationId: getAccountJSON + summary: Get Account (JSON) + tags: + - Users + description: Get the logged-in user's account details in JSON format (legacy v1 endpoint). + servers: + - url: https://plex.tv + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/UserPlexAccount" + example: + title: string value + adsConsentReminderAt: 1 + adsConsentSetAt: 1 + authToken: string value + backupCodesCreated: false + confirmed: false + country: string value + email: user@example.com + emailOnlyAuth: false + entitlements: + - string value + experimentalFeatures: false + friendlyName: string value + guest: false + hasPassword: true + home: false + homeAdmin: false + homeSize: 1 + id: 1 + joinedAt: 1 + mailingListActive: false + mailingListStatus: active + maxHomeSize: 1 + pin: string value + profile: + autoSelectAudio: true + protected: false + rememberExpiresAt: 1 + restricted: false + roles: + - string value + scrobbleTypes: string value + services: + - endpoint: https://plex.tv + identifier: string value + status: online + subscription: + active: true + features: + - string value + status: Inactive + subscriptions: + - active: true + features: + - string value + status: Inactive + thumb: https://plex.tv + twoFactorEnabled: false + username: string value + uuid: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /users/password: + post: + operationId: changePassword + summary: Change Password + tags: + - Authentication + description: Change or reset the logged-in user's password. + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /users/signin: + post: + operationId: postUsersSignInData + summary: Get User Sign In Data + tags: + - Authentication + description: Sign in user with username and password and return user data with Plex authentication token + security: [] + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + requestBody: + description: Login credentials + content: + application/x-www-form-urlencoded: + example: + login: username@email.com + password: password123 + rememberMe: true + verificationCode: '123456' + schema: + type: object + properties: + login: + type: string + format: email + example: username@email.com + password: + type: string + format: password + example: password123 + rememberMe: + type: boolean + default: false + verificationCode: + type: string + example: '123456' + required: + - login + - password + responses: + '201': + description: Returns the user account data with a valid auth token + content: + application/json: + schema: + allOf: + - $ref: "#/components/schemas/UserPlexAccount" + - type: object + properties: + pastSubscriptions: + type: array + items: + title: PastSubscription + type: object + properties: + type: + type: string + example: plexpass + billing: + type: object + properties: + internalPaymentMethod: + type: object + paymentMethodId: + type: + - integer + - 'null' + required: + - internalPaymentMethod + - paymentMethodId + canceled: + type: boolean + default: false + example: false + canConvert: + type: boolean + default: false + example: false + canDowngrade: + type: boolean + default: false + example: false + canReactivate: + type: boolean + default: false + example: false + canUpgrade: + type: boolean + default: false + example: false + endsAt: + oneOf: + - $ref: "#/components/schemas/PlexDateTime" + - type: 'null' + gracePeriod: + type: boolean + default: false + example: false + id: type: - - 'null' - string - description: Filters applied for all content. - example: '' - filterMovies: - type: - 'null' - - string - description: Filters applied for movies. - example: '' - filterMusic: + mode: type: - - 'null' - string - description: Filters applied for music. - example: '' - filterPhotos: - type: - 'null' - - string - description: Filters applied for photos. - example: '' - filterTelevision: + onHold: + type: boolean + default: false + example: false + renewsAt: + oneOf: + - $ref: "#/components/schemas/PlexDateTime" + - type: 'null' + state: type: string - description: Filters applied for television. - example: '' - restricted: - allOf: - - description: Indicates if the user has restricted access. - - type: integer - format: int32 - enum: - - 0 - - 1 - example: 1 - default: 0 - x-speakeasy-enums: - - DISABLE - - ENABLE - Server: - type: array - description: List of servers owned by the user. - items: - type: object - required: - - id - - serverId - - machineIdentifier - - name - - lastSeenAt - - numLibraries - - allLibraries - - owned - - pending - properties: - id: - type: integer - description: Unique ID of the server of the connected user - example: 907759180 - serverId: - type: integer - description: ID of the actual Plex server. - example: 9999999 - machineIdentifier: - type: string - description: Machine identifier of the Plex server. - example: fbb8aa6be6e0c997c6268bc2b4431c8807f70a3 - name: - type: string - description: Name of the Plex server of the connected user. - example: ConnectedUserFlix - lastSeenAt: - $ref: '#/components/schemas/PlexDateTime' - numLibraries: - type: integer - description: Number of libraries in the server this user has access to. - example: 16 - allLibraries: - allOf: - - description: Indicates if the user has access to all libraries. - - type: integer - format: int32 - enum: - - 0 - - 1 - example: 1 - default: 0 - x-speakeasy-enums: - - DISABLE - - ENABLE - owned: - allOf: - - description: Indicates if the user owns the server. - - type: integer - format: int32 - enum: - - 0 - - 1 - example: 1 - default: 0 - x-speakeasy-enums: - - DISABLE - - ENABLE - pending: - allOf: - - description: Indicates if the server is pending approval. - - type: integer - format: int32 - enum: - - 0 - - 1 - example: 1 - default: 0 - x-speakeasy-enums: - - DISABLE - - ENABLE + enum: + - ended + example: ended + x-speakeasy-unknown-values: allow + transfer: + type: + - string + - 'null' + required: + - id + - mode + - renewsAt + - endsAt + - canceled + - gracePeriod + - onHold + - canReactivate + - canUpgrade + - canDowngrade + - canConvert + - type + - transfer + - state + - billing + trials: + type: array + items: + type: object + required: + - pastSubscriptions + - trials + example: + title: string value + adsConsentReminderAt: 1 + adsConsentSetAt: 1 + authToken: string value + backupCodesCreated: false + confirmed: false + country: string value + email: user@example.com + emailOnlyAuth: false + entitlements: + - string value + experimentalFeatures: false + friendlyName: string value + guest: false + hasPassword: true + home: false + homeAdmin: false + homeSize: 1 + id: 1 + joinedAt: 1 + mailingListActive: false + mailingListStatus: active + maxHomeSize: 1 + pin: string value + profile: + autoSelectAudio: true + protected: false + rememberExpiresAt: 1 + restricted: false + roles: + - string value + scrobbleTypes: string value + services: + - endpoint: https://plex.tv + identifier: string value + status: online + subscription: + active: true + features: + - string value + status: Inactive + subscriptions: + - active: true + features: + - string value + status: Inactive + thumb: https://plex.tv + twoFactorEnabled: false + username: string value + uuid: string value + pastSubscriptions: + - type: plexpass + billing: + internalPaymentMethod: {} + canceled: false + canConvert: false + canDowngrade: false + canReactivate: false + canUpgrade: false + endsAt: 1556281940 + gracePeriod: false + onHold: false + renewsAt: 1556281940 + state: ended + trials: + - {} + '400': + description: Bad Request - A parameter was not specified, or was specified incorrectly. + content: + application/json: + schema: + $ref: "#/components/schemas/BadRequestErrorResponse" + example: + errors: + - code: 1000 + message: X-Plex-Client-Identifier is missing + status: 400 + '401': + description: Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + content: + application/json: + schema: + $ref: "#/components/schemas/UnauthorizedErrorResponse" + example: + errors: + - code: 1001 + message: User could not be authenticated + status: 401 + /users/signout: + delete: + operationId: signOut + summary: Sign Out + tags: + - Authentication + description: Invalidate the current authentication token. + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + /webhooks: + get: + operationId: getWebhooks + summary: Get Webhooks + tags: + - General + description: List configured webhook URLs for the logged-in user. + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/WebhookPayload" + example: + Account: + title: string value + id: 1 + thumb: string value + event: media.play + Metadata: {} + owner: true + Player: + title: string value + local: true + publicAddress: string value + uuid: string value + Server: + title: string value + uuid: string value + user: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + post: + operationId: addWebhook + summary: Add Webhook + tags: + - General + description: Add a webhook URL for the logged-in user. + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /{transcodeType}/:/transcode/universal/decision: + get: + operationId: makeDecision + summary: Make a decision on media playback + tags: + - Transcoder + description: Make a decision on media playback based on client profile, and requested settings such as bandwidth and resolution. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/transcodeType" + - $ref: "#/components/parameters/transcodeSessionId" + - $ref: "#/components/parameters/advancedSubtitles" + - name: platform + description: Client platform (some clients send this in addition to headers). + in: query + schema: + type: string + - name: audioBoost + description: Percentage of original audio loudness to use when transcoding (100 is equivalent to original volume, 50 is half, 200 is double, etc) + in: query + schema: + type: integer + minimum: 1 + example: 50 + - name: audioChannelCount + description: Target video number of audio channels. + in: query + schema: + type: integer + minimum: 1 + maximum: 8 + example: 5 + - name: autoAdjustQuality + description: Indicates the client supports ABR. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + - name: autoAdjustSubtitle + description: Indicates if the server should adjust subtitles based on Voice Activity Data. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + - name: directPlay + description: Indicates the client supports direct playing the indicated content. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + - name: directStream + description: Indicates the client supports direct streaming the video of the indicated content. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + - name: directStreamAudio + description: Indicates the client supports direct streaming the audio of the indicated content. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + - name: disableResolutionRotation + description: Indicates if resolution should be adjusted for orientation. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + - name: hasMDE + description: Ignore client profiles when determining if direct play is possible. Only has an effect when directPlay=1 and both mediaIndex and partIndex are specified and neither are -1 + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + - name: location + description: Network type of the client, can be used to help determine target bitrate. + in: query + schema: + type: string + enum: + - lan + - wan + - cellular + example: wan + - name: mediaBufferSize + description: Buffer size used in playback (in KB). Clients should specify a lower bound if not known exactly. This value could make the difference between transcoding and direct play on bandwidth constrained networks. + in: query + schema: + type: integer + example: 102400 + - name: mediaIndex + description: Index of the media to transcode. -1 or not specified indicates let the server choose. + in: query + schema: + type: integer + example: 0 + - name: musicBitrate + description: Target bitrate for audio only files (in kbps, used to transcode). + in: query + schema: + type: integer + minimum: 0 + example: 5000 + - name: offset + description: Offset from the start of the media (in seconds). + in: query + schema: + type: number + example: 90.5 + - name: partIndex + description: Index of the part to transcode. -1 or not specified indicates the server should join parts together in a transcode + in: query + schema: + type: integer + example: 0 + - name: path + description: Internal PMS path of the media to transcode. + in: query + schema: + type: string + example: /library/metadata/151671 + - name: peakBitrate + description: Maximum bitrate (in kbps) to use in ABR. + in: query + schema: + type: integer + minimum: 0 + example: 12000 + - name: photoResolution + description: Target photo resolution. + in: query + schema: + type: string + pattern: ^\d[x:]\d$ + example: 1080x1080 + - name: protocol + description: "Indicates the network streaming protocol to be used for the transcode session: * 'http' - include the file in the http response such as MKV streaming * 'hls' - hls stream (RFC 8216) * 'dash' - dash stream (ISO/IEC 23009-1:2022)" + in: query + schema: + type: string + enum: + - http + - hls + - dash + example: dash + - name: secondsPerSegment + description: Number of seconds to include in each transcoded segment + in: query + schema: + type: integer + example: 5 + - name: subtitleSize + description: Percentage of original subtitle size to use when burning subtitles (100 is equivalent to original size, 50 is half, ect) + in: query + schema: + type: integer + minimum: 1 + example: 50 + - name: subtitles + description: "Indicates how subtitles should be included: * 'auto' - Compute the appropriate subtitle setting automatically * 'burn' - Burn the selected subtitle; auto if no selected subtitle * 'none' - Ignore all subtitle streams * 'sidecar' - The selected subtitle should be provided as a sidecar * 'embedded' - The selected subtitle should be provided as an embedded stream * 'segmented' - The selected subtitle should be provided as a segmented stream" + in: query + schema: + type: string + enum: + - auto + - burn + - none + - sidecar + - embedded + - segmented + - unknown + example: burn + - name: maxVideoBitrate + description: Client-side maximum video bitrate cap in kbps + in: query + schema: + type: integer + - name: videoResolution + description: Cap resolution string (e.g. 1920x1080) + in: query + schema: + type: string + - name: copyts + description: Copy timestamps instead of re-encoding them + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: videoBitrate + description: Target video bitrate (in kbps). + in: query + schema: + type: integer + minimum: 0 + example: 12000 + - name: videoQuality + description: Target photo quality. + in: query + schema: + type: integer + minimum: 0 + maximum: 99 + example: 50 + - name: X-Plex-Client-Identifier + description: Unique per client. + in: header + required: true + schema: + type: string + - name: X-Plex-Client-Profile-Extra + description: See [Profile Augmentations](#section/API-Info/Profile-Augmentations) . + in: header + schema: + type: string + example: add-limitation(scope=videoCodec&scopeName=*&type=upperBound&name=video.frameRate&value=60&replace=true)+append-transcode-target-codec(type=videoProfile&context=streaming&videoCodec=h264%2Chevc&audioCodec=aac&protocol=dash) + - name: X-Plex-Client-Profile-Name + description: Which built in Client Profile to use in the decision. Generally should only be used to specify the Generic profile. + in: header + schema: + type: string + example: generic + - name: X-Plex-Device + description: Device the client is running on + in: header + schema: + type: string + example: Windows + - name: X-Plex-Model + description: Model of the device the client is running on + in: header + schema: + type: string + example: standalone + - name: X-Plex-Platform + description: Client Platform + in: header + schema: + type: string + example: Chrome + - name: X-Plex-Platform-Version + description: Client Platform Version + in: header + schema: + type: string + example: 135 + - name: X-Plex-Session-Identifier + description: Unique per client playback session. Used if a client can playback multiple items at a time (such as a browser with multiple tabs) + in: header + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDecision" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + availableBandwidth: 1 + directPlayDecisionCode: 1 + directPlayDecisionText: example + generalDecisionCode: 1 + generalDecisionText: example + mdeDecisionCode: 1 + mdeDecisionText: example + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + transcodeDecisionCode: 1 + transcodeDecisionText: example + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /{transcodeType}/:/transcode/universal/fallback: + post: + operationId: triggerFallback + summary: Manually trigger a transcoder fallback + tags: + - Transcoder + description: 'Manually trigger a transcoder fallback ex: HEVC to h.264 or hw to sw' + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/transcodeType" + - $ref: "#/components/parameters/transcodeSessionId" + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully created/executed manually trigger a transcoder fallback + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '404': + description: Session ID does not exist + content: + text/html: + schema: + type: string + '412': + description: Transcode could not fallback + content: + text/html: + schema: + type: string + '500': + description: Transcode failed to fallback + content: + text/html: + schema: + type: string + /{transcodeType}/:/transcode/universal/subtitles: + get: + operationId: transcodeSubtitles + summary: Transcode subtitles + tags: + - Transcoder + description: Only transcode subtitle streams. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/transcodeType" + - $ref: "#/components/parameters/transcodeSessionId" + - $ref: "#/components/parameters/advancedSubtitles" + - name: platform + description: Client platform (some clients send this in addition to headers). + in: query + schema: + type: string + - name: audioBoost + description: Percentage of original audio loudness to use when transcoding (100 is equivalent to original volume, 50 is half, 200 is double, etc) + in: query + schema: + type: integer + minimum: 1 + example: 50 + - name: audioChannelCount + description: Target video number of audio channels. + in: query + schema: + type: integer + minimum: 1 + maximum: 8 + example: 5 + - name: autoAdjustQuality + description: Indicates the client supports ABR. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + - name: autoAdjustSubtitle + description: Indicates if the server should adjust subtitles based on Voice Activity Data. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + - name: directPlay + description: Indicates the client supports direct playing the indicated content. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + - name: directStream + description: Indicates the client supports direct streaming the video of the indicated content. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + - name: directStreamAudio + description: Indicates the client supports direct streaming the audio of the indicated content. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + - name: disableResolutionRotation + description: Indicates if resolution should be adjusted for orientation. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + - name: hasMDE + description: Ignore client profiles when determining if direct play is possible. Only has an effect when directPlay=1 and both mediaIndex and partIndex are specified and neither are -1 + in: query + schema: + $ref: "#/components/schemas/BoolInt" + example: 1 + - name: location + description: Network type of the client, can be used to help determine target bitrate. + in: query + schema: + type: string + enum: + - lan + - wan + - cellular + example: wan + - name: mediaBufferSize + description: Buffer size used in playback (in KB). Clients should specify a lower bound if not known exactly. This value could make the difference between transcoding and direct play on bandwidth constrained networks. + in: query + schema: + type: integer + example: 102400 + - name: mediaIndex + description: Index of the media to transcode. -1 or not specified indicates let the server choose. + in: query + schema: + type: integer + example: 0 + - name: musicBitrate + description: Target bitrate for audio only files (in kbps, used to transcode). + in: query + schema: + type: integer + minimum: 0 + example: 5000 + - name: offset + description: Offset from the start of the media (in seconds). + in: query + schema: + type: number + example: 90.5 + - name: partIndex + description: Index of the part to transcode. -1 or not specified indicates the server should join parts together in a transcode + in: query + schema: + type: integer + example: 0 + - name: path + description: Internal PMS path of the media to transcode. + in: query + schema: + type: string + example: /library/metadata/151671 + - name: peakBitrate + description: Maximum bitrate (in kbps) to use in ABR. + in: query + schema: + type: integer + minimum: 0 + example: 12000 + - name: photoResolution + description: Target photo resolution. + in: query + schema: + type: string + pattern: ^\d[x:]\d$ + example: 1080x1080 + - name: protocol + description: "Indicates the network streaming protocol to be used for the transcode session: * 'http' - include the file in the http response such as MKV streaming * 'hls' - hls stream (RFC 8216) * 'dash' - dash stream (ISO/IEC 23009-1:2022)" + in: query + schema: + type: string + enum: + - http + - hls + - dash + example: dash + - name: secondsPerSegment + description: Number of seconds to include in each transcoded segment + in: query + schema: + type: integer + example: 5 + - name: subtitleSize + description: Percentage of original subtitle size to use when burning subtitles (100 is equivalent to original size, 50 is half, ect) + in: query + schema: + type: integer + minimum: 1 + example: 50 + - name: subtitles + description: "Indicates how subtitles should be included: * 'auto' - Compute the appropriate subtitle setting automatically * 'burn' - Burn the selected subtitle; auto if no selected subtitle * 'none' - Ignore all subtitle streams * 'sidecar' - The selected subtitle should be provided as a sidecar * 'embedded' - The selected subtitle should be provided as an embedded stream * 'segmented' - The selected subtitle should be provided as a segmented stream" + in: query + schema: + type: string + enum: + - auto + - burn + - none + - sidecar + - embedded + - segmented + - unknown + example: burn + - name: maxVideoBitrate + description: Client-side maximum video bitrate cap in kbps + in: query + schema: + type: integer + - name: videoResolution + description: Cap resolution string (e.g. 1920x1080) + in: query + schema: + type: string + - name: copyts + description: Copy timestamps instead of re-encoding them + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: videoBitrate + description: Target video bitrate (in kbps). + in: query + schema: + type: integer + minimum: 0 + example: 12000 + - name: videoQuality + description: Target photo quality. + in: query + schema: + type: integer + minimum: 0 + maximum: 99 + example: 50 + - name: X-Plex-Client-Identifier + description: Unique per client. + in: header + required: true + schema: + type: string + - name: X-Plex-Client-Profile-Extra + description: See [Profile Augmentations](#section/API-Info/Profile-Augmentations) . + in: header + schema: + type: string + example: add-limitation(scope=videoCodec&scopeName=*&type=upperBound&name=video.frameRate&value=60&replace=true)+append-transcode-target-codec(type=videoProfile&context=streaming&videoCodec=h264%2Chevc&audioCodec=aac&protocol=dash) + - name: X-Plex-Client-Profile-Name + description: Which built in Client Profile to use in the decision. Generally should only be used to specify the Generic profile. + in: header + schema: + type: string + example: generic + - name: X-Plex-Device + description: Device the client is running on + in: header + schema: + type: string + example: Windows + - name: X-Plex-Model + description: Model of the device the client is running on + in: header + schema: + type: string + example: standalone + - name: X-Plex-Platform + description: Client Platform + in: header + schema: + type: string + example: Chrome + - name: X-Plex-Platform-Version + description: Client Platform Version + in: header + schema: + type: string + example: 135 + - name: X-Plex-Session-Identifier + description: Unique per client playback session. Used if a client can playback multiple items at a time (such as a browser with multiple tabs) + in: header + schema: + type: string + responses: + '200': + description: Transcoded subtitle file + content: + text/srt: + schema: + $ref: "#/components/schemas/BinaryResponse" + example: | + 1 + 00:00:02,499 --> 00:00:06,416 + [SERENE MUSIC] + + 2 + 00:00:11,791 --> 00:00:13,958 + [BROOK BABBLES] + [FLY BUZZES] + + 3 + 00:00:16,166 --> 00:00:17,666 + [BIRD TWEETS] + + 4 + 00:00:17,666 --> 00:00:18,708 + [WINGS FLAP] + + 5 + 00:00:19,833 --> 00:00:20,374 + [BIRD TWEETS] + [WINGS FLAP] + + 6 + 00:00:20,374 --> 00:00:21,041 + [THUD] + + 7 + 00:00:21,374 --> 00:00:22,249 + [THUD] + + 8 + 00:00:22,249 --> 00:00:23,083 + [SQUIRREL LAUGHS] + + 9 + 00:00:26,249 --> 00:00:27,541 + [SNORES] + + 10 + 00:00:29,416 --> 00:00:30,708 + [SNORES] + + 11 + 00:00:32,749 --> 00:00:34,041 + [BUNNY SNORES] + + 12 + 00:00:35,916 --> 00:00:37,249 + [BUNNY SNORES] + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '403': + $ref: "#/components/responses/403" + description: Forbidden - User does not have permission to access this resource + content: + text/html: + schema: + type: string + '404': + $ref: "#/components/responses/404" + description: Not Found - The requested resource does not exist + content: + text/html: + schema: + type: string + /activities/{activityId}: + delete: + operationId: cancelActivity + summary: Cancel a running activity + tags: + - Activities + description: Cancel a running activity. Admins can cancel all activities but other users can only cancel their own + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: activityId + description: The UUID of the activity to cancel. + in: path + required: true + schema: + type: string + example: d6199ba1-fb5e-4cae-bf17-1a5369c1cf1e + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully deleted cancel a running activity + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + description: Activity is not cancellable + content: + text/html: + schema: + type: string + '404': + description: No activity with the provided id is found + content: + text/html: + schema: + type: string + /butler/{butlerTask}: + delete: + operationId: stopTask + summary: Stop a single Butler task + tags: + - Butler + description: This endpoint will stop a currently running task by name, or remove it from the list of scheduled tasks if it exists + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: butlerTask + description: The task name + in: path + required: true + schema: + type: string + enum: + - AutomaticUpdates + - BackupDatabase + - ButlerTaskGenerateAdMarkers + - ButlerTaskGenerateCreditsMarkers + - ButlerTaskGenerateIntroMarkers + - ButlerTaskGenerateVoiceActivity + - CleanOldBundles + - CleanOldCacheFiles + - DeepMediaAnalysis + - GarbageCollectBlobs + - GarbageCollectLibraryMedia + - GenerateBlurHashes + - GenerateChapterThumbs + - GenerateMediaIndexFiles + - LoudnessAnalysis + - MusicAnalysis + - OptimizeDatabase + - RefreshEpgGuides + - RefreshLibraries + - RefreshLocalMedia + - RefreshPeriodicMetadata + - UpgradeMediaAnalysis + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully deleted stop a single butler task + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '404': + description: No task with this name was found or no task with this name was running + content: + text/html: + schema: + type: string + post: + operationId: startTask + summary: Start a single Butler task + tags: + - Butler + description: This endpoint will attempt to start a specific Butler task by name. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: butlerTask + description: The task name + in: path + required: true + schema: + type: string + enum: + - AutomaticUpdates + - BackupDatabase + - ButlerTaskGenerateAdMarkers + - ButlerTaskGenerateCreditsMarkers + - ButlerTaskGenerateIntroMarkers + - ButlerTaskGenerateVoiceActivity + - CleanOldBundles + - CleanOldCacheFiles + - DeepMediaAnalysis + - GarbageCollectBlobs + - GarbageCollectLibraryMedia + - GenerateBlurHashes + - GenerateChapterThumbs + - GenerateMediaIndexFiles + - LoudnessAnalysis + - MusicAnalysis + - OptimizeDatabase + - RefreshEpgGuides + - RefreshLibraries + - RefreshLocalMedia + - RefreshPeriodicMetadata + - UpgradeMediaAnalysis + responses: + '200': + description: Task started + content: + text/html: + schema: + $ref: "#/components/schemas/SuccessResponse" + '202': + description: Task is already running + content: + text/html: + schema: + type: string + '404': + description: No task with this name was found + content: + text/html: + schema: + type: string + /downloadQueue/{queueId}: + get: + operationId: getDownloadQueue + summary: Get a download queue + tags: + - Download Queue + description: |- + Available: 0.2.0 + + Get a download queue by its id + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: queueId + description: The queue id + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + DownloadQueue: + type: array + items: + $ref: "#/components/schemas/DownloadQueue" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + DownloadQueue: + - id: 1 + itemCount: 1 + status: deciding + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /downloadQueue/{queueId}/add: + post: + operationId: addDownloadQueueItems + summary: Add to download queue + tags: + - Download Queue + description: |- + Available: 0.2.0 + + Add items to the download queue + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/advancedSubtitles" + - $ref: "#/components/parameters/audioBoost" + - $ref: "#/components/parameters/audioChannelCount" + - $ref: "#/components/parameters/autoAdjustQuality" + - $ref: "#/components/parameters/autoAdjustSubtitle" + - $ref: "#/components/parameters/directPlay" + - $ref: "#/components/parameters/directStream" + - $ref: "#/components/parameters/directStreamAudio" + - $ref: "#/components/parameters/disableResolutionRotation" + - $ref: "#/components/parameters/hasMDE" + - $ref: "#/components/parameters/location" + - $ref: "#/components/parameters/mediaBufferSize" + - $ref: "#/components/parameters/mediaIndex" + - $ref: "#/components/parameters/musicBitrate" + - $ref: "#/components/parameters/offset" + - $ref: "#/components/parameters/partIndex" + - $ref: "#/components/parameters/path" + - $ref: "#/components/parameters/peakBitrate" + - $ref: "#/components/parameters/photoResolution" + - $ref: "#/components/parameters/protocol" + - $ref: "#/components/parameters/secondsPerSegment" + - $ref: "#/components/parameters/subtitleSize" + - $ref: "#/components/parameters/subtitles" + - $ref: "#/components/parameters/videoBitrate" + - $ref: "#/components/parameters/videoQuality" + - $ref: "#/components/parameters/videoResolution" + - name: queueId + description: The queue id + in: path + required: true + schema: + type: integer + - name: keys + description: Keys to add + in: query + required: true + explode: false + schema: + type: array + items: + type: string + example: + - /library/metadata/3 + - /library/metadata/6 + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + AddedQueueItems: + type: array + items: + $ref: "#/components/schemas/AddedQueueItem" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + AddedQueueItems: + - id: 1 + key: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /downloadQueue/{queueId}/items: + get: + operationId: listDownloadQueueItems + summary: Get download queue items + tags: + - Download Queue + description: |- + Available: 0.2.0 + + Get items from a download queue + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: queueId + description: The queue id + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + DownloadQueueItem: + type: array + items: + $ref: "#/components/schemas/DownloadQueueItem" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + DownloadQueueItem: + - DecisionResult: + availableBandwidth: 1 + directPlayDecisionCode: 1 + directPlayDecisionText: string value + generalDecisionCode: 1 + generalDecisionText: string value + mdeDecisionCode: 1 + mdeDecisionText: string value + transcodeDecisionCode: 1 + transcodeDecisionText: string value + error: string value + id: 1 + key: string value + queueId: 1 + status: deciding + transcode: {} + TranscodeSession: + complete: true + context: string value + duration: 1 + error: true + key: string value + progress: 1 + protocol: string value + size: 1 + sourceAudioCodec: string value + sourceVideoCodec: string value + speed: 1 + throttled: true + transcodeHwFullPipeline: true + transcodeHwRequested: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /downloads/{channel}.json: + get: + operationId: getPlexDownloads + summary: Get Plex Downloads + tags: + - General + description: Get available Plex update downloads for a specific channel (e.g. `plexpass`, `public`). + servers: + - url: https://plex.tv + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: channel + description: The channel identifier + in: path + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/PlexDownloadsResponse" + example: + MediaContainer: + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + size: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /home/users/{id}/switch: + post: + operationId: switchHomeUser + summary: Switch Home User + tags: + - Authentication + description: Switch to a Plex Home user and return a new auth token. + servers: + - url: https://plex.tv/api + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: id + description: The unique identifier of the item + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /home/users/{userId}: + delete: + operationId: deleteHomeUser + summary: Delete Home User + tags: + - Users + description: Remove a Plex Home user. + servers: + - url: https://plex.tv/api + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: userId + description: The unique identifier of the user + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + put: + operationId: updateHomeUser + summary: Update Home User + tags: + - Users + description: Update a Plex Home user. + servers: + - url: https://plex.tv/api + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: userId + description: The unique identifier of the user + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /home/users/restricted/{userId}: + put: + operationId: updateRestrictedUser + summary: Update Restricted User + tags: + - Users + description: Update restricted (managed) home user settings. + servers: + - url: https://plex.tv/api/v2 + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: userId + description: The unique identifier of the user + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /hubs/metadata/{metadataId}: + get: + operationId: getMetadataHubs + summary: Get hubs for section by metadata item + tags: + - Hubs + description: Get the hubs for a section by metadata item. Currently only for music sections + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/count" + - name: metadataId + description: The metadata ID for the hubs to fetch + in: path + required: true + schema: + type: integer + - name: onlyTransient + description: 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) + in: query + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + $ref: "#/components/responses/responses-200" + description: Successfully retrieved get hubs for section by metadata item + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithHubs" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 + '400': + description: No metadata with that id or permission is denied + content: + text/html: + schema: + type: string + /hubs/metadata/{metadataId}/postplay: + get: + operationId: getPostplayHubs + summary: Get postplay hubs + tags: + - Hubs + description: Get the hubs for a metadata to be displayed in post play + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/count" + - name: metadataId + description: The metadata ID for the hubs to fetch + in: path + required: true + schema: + type: integer + - name: onlyTransient + description: 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) + in: query + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + $ref: "#/components/responses/responses-200" + description: Successfully retrieved get postplay hubs + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithHubs" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 + '400': + description: No metadata with that id or permission is denied + content: + text/html: + schema: + type: string + /hubs/metadata/{metadataId}/related: + get: + operationId: getRelatedHubs + summary: Get related hubs + tags: + - Hubs + description: Get the hubs for a metadata related to the provided metadata item + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/count" + - name: metadataId + description: The metadata ID for the hubs to fetch + in: path + required: true + schema: + type: integer + - name: onlyTransient + description: 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) + in: query + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + $ref: "#/components/responses/responses-200" + description: Successfully retrieved get related hubs + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithHubs" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 + '400': + description: No metadata with that id or permission is denied + content: + text/html: + schema: + type: string + /hubs/sections/{sectionId}: + get: + operationId: getSectionHubs + summary: Get section hubs + tags: + - Hubs + description: Get the hubs for a single section + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/count" + - name: sectionId + description: The section ID for the hubs to fetch + in: path + required: true + schema: + type: integer + - name: onlyTransient + description: 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) + in: query + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithHubs" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 + '400': + description: No section with that id or permission is denied + content: + text/html: + schema: + type: string + /hubs/sections/{sectionId}/manage: + delete: + operationId: resetSectionDefaults + summary: Reset hubs to defaults + tags: + - Hubs + description: Reset hubs for this section to defaults and delete custom hubs + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + description: The section ID for the hubs to reorder + in: path + required: true + schema: + type: integer + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully deleted reset hubs to defaults + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '403': + $ref: "#/components/responses/403" + description: Forbidden - User does not have permission to access this resource + content: + text/html: + schema: + type: string + '404': + description: Section id was not found + content: + text/html: + schema: + type: string + get: + operationId: listHubs + summary: Get hubs + tags: + - Hubs + description: Get the list of hubs including both built-in and custom + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + description: The section ID for the hubs to reorder + in: path + required: true + schema: + type: integer + - name: metadataItemId + description: Restrict hubs to ones relevant to the provided metadata item + in: query + schema: + type: integer + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Hub: + type: array + items: + $ref: "#/components/schemas/ManagedHub" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + homeVisibility: all + identifier: string value + promotedToOwnHome: true + promotedToRecommended: true + promotedToSharedHome: true + recommendationsVisibility: all + '403': + $ref: "#/components/responses/403" + description: Forbidden - User does not have permission to access this resource + content: + text/html: + schema: + type: string + '404': + description: Section id was not found + content: + text/html: + schema: + type: string + post: + operationId: createCustomHub + summary: Create a custom hub + tags: + - Hubs + description: Create a custom hub based on a metadata item + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + description: The section ID for the hubs to reorder + in: path + required: true + schema: + type: integer + - name: metadataItemId + description: The metadata item on which to base this hub. This must currently be a collection + in: query + required: true + schema: + type: integer + - name: promotedToRecommended + description: Whether this hub should be displayed in recommended + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: promotedToOwnHome + description: Whether this hub should be displayed in admin's home + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: promotedToSharedHome + description: Whether this hub should be displayed in shared user's home + in: query + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully created/executed create a custom hub + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + description: A hub could not be created with this metadata item + content: + text/html: + schema: + type: string + '403': + $ref: "#/components/responses/403" + description: Forbidden - User does not have permission to access this resource + content: + text/html: + schema: + type: string + '404': + description: Section id or metadata item was not found + content: + text/html: + schema: + type: string + /hubs/sections/{sectionId}/manage/move: + put: + operationId: moveHub + summary: Move Hub + tags: + - Hubs + description: Changed the ordering of a hub among others hubs + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + description: The section ID for the hubs to reorder + in: path + required: true + schema: + type: integer + - name: identifier + description: The identifier of the hub to move + in: query + required: true + schema: + type: string + - name: after + description: The identifier of the hub to order this hub after (or empty/missing to put this hub first) + in: query + schema: + type: string + responses: + '200': + $ref: "#/components/responses/get-responses-200" + description: Successfully updated move hub + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '403': + $ref: "#/components/responses/403" + description: Forbidden - User does not have permission to access this resource + content: + text/html: + schema: + type: string + '404': + description: Section id was not found + content: + text/html: + schema: + type: string + /library/collections/{collectionId}/items: + get: + operationId: getCollectionItems + summary: Get items in a collection + tags: + - Content + description: Get items in a collection. Note if this collection contains more than 100 items, paging must be used. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: collectionId + description: The collection id + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '404': + description: Collection not found + content: + text/html: + schema: + type: string + put: + operationId: addCollectionItems + summary: Add items to a collection + tags: + - Library Collections + description: Add items to a collection by uri + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: collectionId + description: The collection id + in: path + required: true + schema: + type: integer + - name: uri + description: The URI describing the items to add to this collection + in: query + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '404': + description: Collection not found + content: + text/html: + schema: + type: string + /library/metadata/{id}/arts: + post: + operationId: uploadArt + summary: Upload media art Art + tags: + - Library + description: Upload custom background art for a metadata item. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: id + description: The unique identifier of the item + in: path + required: true + schema: + type: integer + requestBody: + content: + multipart/form-data: + example: + file: example + schema: + type: object + properties: + file: + type: string + format: binary + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{id}/children: + get: + operationId: getMetadataChildren + summary: Get Metadata Children + tags: + - Library + description: Get children of a show, season, artist, or album. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: id + description: The unique identifier of the item + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{id}/computePath: + get: + operationId: computeSonicPath + summary: Compute Sonic Path + tags: + - Library + description: Compute a sonic adventure path from a starting track. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: id + description: The unique identifier of the item + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{id}/grandchildren: + get: + operationId: getMetadataGrandchildren + summary: Get Metadata Grandchildren + tags: + - Library + description: Get grandchildren (e.g. episodes under a show). + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: id + description: The unique identifier of the item + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{id}/grandparent: + get: + operationId: getMetadataGrandparent + summary: Get Metadata Grandparent + tags: + - Library + description: Get grandparent metadata shortcut. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: id + description: The unique identifier of the item + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{id}/nearest: + get: + operationId: getNearestMetadata + summary: Get Nearest Metadata + tags: + - Library + description: Get sonically similar items for a music track. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: id + description: The unique identifier of the item + in: path + required: true + schema: + type: integer + - name: excludeParentID + description: The unique identifier of the excludeparent + in: query + required: false + schema: + type: integer + - name: excludeGrandparentID + description: The unique identifier of the excludegrandparent + in: query + required: false + schema: + type: integer + - name: limit + description: Maximum number of items to return + in: query + required: false + schema: + type: integer + - name: maxDistance + description: The maxDistance + in: query + required: false + schema: + type: number + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{id}/onDeck: + get: + operationId: getMetadataOnDeck + summary: Get Metadata On Deck + tags: + - Library + description: Get On Deck status for a show or season. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: id + description: The unique identifier of the item + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{id}/parent: + get: + operationId: getMetadataParent + summary: Get Metadata Parent + tags: + - Library + description: Get parent metadata shortcut. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: id + description: The unique identifier of the item + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{id}/posters: + post: + operationId: uploadPoster + summary: Upload media art Poster + tags: + - Library + description: Upload a custom poster image for a metadata item. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: id + description: The unique identifier of the item + in: path + required: true + schema: + type: integer + requestBody: + content: + multipart/form-data: + example: + file: example + schema: + type: object + properties: + file: + type: string + format: binary + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{id}/reviews: + get: + operationId: getMetadataReviews + summary: Get Metadata Reviews + tags: + - Library + description: Get user reviews for a metadata item. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: id + description: The unique identifier of the item + in: path + required: true + schema: + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{ids}: + delete: + operationId: deleteMetadataItem + summary: Delete a metadata item + tags: + - Library + description: Delete a single metadata item from the library, deleting media as well + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + description: Comma-separated list of IDs + in: path + required: true + schema: + type: string + - name: proxy + description: Whether proxy items, such as media optimized versions, should also be deleted. Defaults to false. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully deleted delete a metadata item + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + description: Media items could not be deleted + content: + text/html: + schema: + type: string + get: + operationId: getMetadataItem + summary: Get a metadata item + tags: + - Content + description: Get one or more metadata items. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + description: Comma-separated list of IDs + in: path + required: true + schema: + type: array + items: + type: string + - name: asyncCheckFiles + description: Determines if file check should be performed asynchronously. An activity is created to indicate progress. Default is false. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: asyncRefreshLocalMediaAgent + description: Determines if local media agent refresh should be performed asynchronously. An activity is created to indicate progress. Default is false. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: asyncRefreshAnalysis + description: Determines if analysis refresh should be performed asynchronously. An activity is created to indicate progress. Default is false. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: checkFiles + description: Determines if file check should be performed synchronously. Specifying `asyncCheckFiles` will cause this option to be ignored. Default is false. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: skipRefresh + description: Determines if synchronous local media agent and analysis refresh should be skipped. Specifying async versions will cause synchronous versions to be skipped. Default is false. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: checkFileAvailability + description: Determines if file existence check should be performed synchronously. Specifying `checkFiles` will imply this option. Default is false. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: asyncAugmentMetadata + description: Add metadata augmentations. An activity is created to indicate progress. Option will be ignored if specified by non-admin or if multiple metadata items are requested. Default is false. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: augmentCount + description: Number of augmentations to add. Requires `asyncAugmentMetadata` to be specified. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeMarkers + description: Include intro/credits markers in the response + in: query + schema: + type: boolean + - name: includeGuids + description: Include external GUIDs (e.g. TMDB, TVDB) in the response + in: query + schema: + type: boolean + - name: includeChapters + description: Include chapter data in the response + in: query + schema: + type: boolean + - name: includeExternalMedia + description: Include external/online media in the response + in: query + schema: + type: boolean + - name: includeExtras + description: Include trailers, behind-the-scenes, and other extras + in: query + schema: + type: boolean + - name: includeRelated + description: Include related items in the response + in: query + schema: + type: boolean + - name: includeOnDeck + description: Include On Deck status in the response + in: query + schema: + type: boolean + - name: includePopularLeaves + description: Include popular episodes in the response + in: query + schema: + type: boolean + - name: includeReviews + description: Include user reviews in the response + in: query + schema: + type: boolean + - name: includeStations + description: Include radio station data in the response + in: query + schema: + type: boolean + - name: excludeElements + description: Comma-separated list of elements to exclude from the response + in: query + schema: + type: string + - name: excludeFields + description: Comma-separated list of fields to exclude from the response + in: query + schema: + type: string + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + put: + operationId: editMetadataItem + summary: Edit a metadata item + tags: + - Library + description: Edit metadata items setting fields + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + description: Comma-separated list of IDs + in: path + required: true + schema: + type: array + items: + type: string + - name: args + description: The new values for the metadata item + in: query + schema: + type: object + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully updated edit a metadata item + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + description: Media items could not be deleted + content: + text/html: + schema: + type: string + /library/metadata/{ids}/addetect: + put: + operationId: detectAds + summary: Ad-detect an item + tags: + - Library + description: Start the detection of ads in a metadata item + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + description: Comma-separated list of IDs + in: path + required: true + schema: + type: string + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully updated ad-detect an item + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{ids}/allLeaves: + get: + operationId: getAllItemLeaves + summary: Get the leaves of an item + tags: + - Library + description: Get the leaves for a metadata item such as the episodes in a show + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + description: Comma-separated list of IDs + in: path + required: true + schema: + type: string + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{ids}/analyze: + put: + operationId: analyzeMetadata + summary: Analyze an item + tags: + - Library + description: Start the analysis of a metadata item + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + description: Comma-separated list of IDs + in: path + required: true + schema: + type: string + - name: thumbOffset + description: Set the offset to be used for thumbnails + in: query + required: false + schema: + type: number + - name: artOffset + description: Set the offset to be used for artwork + in: query + required: false + schema: + type: number + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully updated analyze an item + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{ids}/chapterThumbs: + put: + operationId: generateThumbs + summary: Generate thumbs of chapters for an item + tags: + - Library + description: Start the chapter thumb generation for an item + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + description: Comma-separated list of IDs + in: path + required: true + schema: + type: string + - name: force + description: Force the operation even if conditions are not met + in: query + required: false + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully updated generate thumbs of chapters for an item + content: + application/octet-stream: + schema: + $ref: "#/components/schemas/BinaryResponse" + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{ids}/credits: + put: + operationId: detectCredits + summary: Credit detect a metadata item + tags: + - Library + description: Start credit detection on a metadata item + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + description: Comma-separated list of IDs + in: path + required: true + schema: + type: string + - name: force + description: Force the operation even if conditions are not met + in: query + required: false + schema: + $ref: "#/components/schemas/BoolInt" + - name: manual + description: Whether to perform the operation manually + in: query + required: false + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully updated credit detect a metadata item + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{ids}/extras: + get: + operationId: getExtras + summary: Get an item's extras + tags: + - Library + description: Get the extras for a metadata item + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + description: Comma-separated list of IDs + in: path + required: true + schema: + type: string + responses: + '200': + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + post: + operationId: addExtras + summary: Add to an item's extras + tags: + - Library + description: Add an extra to a metadata item + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/title" + - name: ids + description: Comma-separated list of IDs + in: path + required: true + schema: + type: string + - name: extraType + description: The metadata type of the extra + in: query + schema: + type: integer + - name: url + description: The URL of the extra + in: query + required: true + schema: + type: string + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully created/executed add to an item's extras + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '404': + description: Either the metadata item is not present or the extra could not be added + content: + text/html: + schema: + type: string + /library/metadata/{ids}/file: + get: + operationId: getFile + summary: Get a file from a metadata or media bundle + tags: + - Library + description: Get a bundle file for a metadata or media item. This is either an image or a mp3 (for a show's theme) + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + description: Comma-separated list of IDs + in: path + required: true + schema: + type: string + - name: url + description: The bundle url, typically starting with `metadata://` or `media://` + in: query + schema: + type: string + responses: + '200': + description: OK + content: + audio/mpeg3: + schema: + type: string + format: binary + image/jpeg: + schema: + type: string + format: binary + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{ids}/index: + put: + operationId: startBifGeneration + summary: Start BIF generation of an item + tags: + - Library + description: Start the indexing (BIF generation) of an item + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + description: Comma-separated list of IDs + in: path + required: true + schema: + type: string + - name: force + description: Force the operation even if conditions are not met + in: query + required: false + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully updated start bif generation of an item + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{ids}/intro: + put: + operationId: detectIntros + summary: Intro detect an item + tags: + - Library + description: Start the detection of intros in a metadata item + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + description: Comma-separated list of IDs + in: path + required: true + schema: + type: string + - name: force + description: Indicate whether detection should be re-run + in: query + required: false + schema: + $ref: "#/components/schemas/BoolInt" + - name: threshold + description: The threshold for determining if content is an intro or not + in: query + required: false + schema: + type: number + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully updated intro detect an item + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{ids}/marker: + post: + operationId: createMarker + summary: Create a marker + tags: + - Library + description: Create a marker for this user on the metadata item + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + description: Comma-separated list of IDs + in: path + required: true + schema: + type: string + - name: type + description: The type of marker to edit/create + in: query + required: true + schema: + type: integer + x-speakeasy-name-override: mediaType + - name: startTimeOffset + description: The start time of the marker + in: query + required: true + schema: + type: integer + - name: endTimeOffset + description: The end time of the marker + in: query + schema: + type: integer + - name: attributes + description: The attributes to assign to this marker + in: query + style: deepObject + schema: + type: object + example: + title: My favorite spot + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - $ref: "#/components/schemas/Marker" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + title: string value + type: intro + color: string value + endTimeOffset: 1 + id: 1 + startTimeOffset: 1 + '400': + description: Request parameters are bad, such as an `endTimeOffset` prior to the `startTimeOffset` + content: + text/html: + schema: + type: string + /library/metadata/{ids}/match: + put: + operationId: matchItem + summary: Match a metadata item + tags: + - Library + description: Match a metadata item to a guid + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + description: Comma-separated list of IDs + in: path + required: true + schema: + type: string + - name: guid + description: The guid + in: query + schema: + type: string + - name: name + description: The name + in: query + required: false + schema: + type: string + - name: year + description: The year to filter by + in: query + required: false + schema: + type: integer + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully updated match a metadata item + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{ids}/matches: + put: + operationId: listMatches + summary: Get metadata matches for an item + tags: + - Library + description: Get the list of metadata matches for a metadata item + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + description: Comma-separated list of IDs + in: path + required: true + schema: + type: string + - name: title + description: The title to filter by + in: query + schema: + type: string + - name: parentTitle + description: The parentTitle + in: query + required: false + schema: + type: string + - name: agent + description: The identifier of the metadata agent to use + in: query + required: false + schema: + type: string + - name: language + description: The language code to use + in: query + required: false + schema: + type: string + - name: year + description: The year to filter by + in: query + required: false + schema: + type: integer + - name: manual + description: Whether to perform the operation manually + in: query + required: false + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{ids}/merge: + put: + operationId: mergeItems + summary: Merge a metadata item + tags: + - Library + description: Merge a metadata item with other items + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + description: Comma-separated list of IDs + in: path + required: true + schema: + type: string + - name: ids + description: Comma-separated list of item identifiers + in: query + explode: false + schema: + type: array + items: + type: string + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully updated merge a metadata item + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{ids}/prefs: + put: + operationId: setItemPreferences + summary: Set metadata preferences + tags: + - Library + description: Set the preferences on a metadata item + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + description: Comma-separated list of IDs + in: path + required: true + schema: + type: string + - name: args + description: The args + in: query + schema: + type: object + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully updated set metadata preferences + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{ids}/refresh: + put: + operationId: refreshItemsMetadata + summary: Refresh a metadata item + tags: + - Library + description: Refresh a metadata item from the agent + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + description: Comma-separated list of IDs + in: path + required: true + schema: + type: string + - name: agent + description: The identifier of the metadata agent to use + in: query + required: false + schema: + type: string + - name: markUpdated + description: The markUpdated + in: query + required: false + schema: + $ref: "#/components/schemas/BoolInt" + - name: skipRefresh + description: Skip synchronous refresh + in: query + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully updated refresh a metadata item + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{ids}/related: + get: + operationId: getRelatedItems + summary: Get related items + tags: + - Library + description: Get a hub of related items to a metadata item + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + description: Comma-separated list of IDs + in: path + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithHubs" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{ids}/similar: + get: + operationId: listSimilar + summary: Get similar items + tags: + - Library + description: Get a list of similar items to a metadata item + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/count" + - name: ids + description: Comma-separated list of IDs + in: path + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{ids}/split: + put: + operationId: splitItem + summary: Split a metadata item + tags: + - Library + description: Split a metadata item into multiple items + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + description: Comma-separated list of IDs + in: path + required: true + schema: + type: string + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully updated split a metadata item + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{ids}/subtitles: + get: + operationId: getSubtitles + summary: Get subtitles + tags: + - Library + description: Add a subtitle to a metadata item + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + description: Comma-separated list of IDs + in: path + required: true + schema: + type: string + - name: title + description: The title to filter by + in: query + required: false + schema: + type: string + - name: language + description: The language code to use + in: query + required: false + schema: + type: string + - name: mediaItemID + description: The unique identifier of the mediaitem + in: query + required: false + schema: + type: integer + - name: url + description: The URL of the subtitle. If not provided, the contents of the subtitle must be in the post body + in: query + required: false + schema: + type: string + - name: format + description: The format + in: query + required: false + schema: + type: string + - name: forced + description: The forced + in: query + required: false + schema: + $ref: "#/components/schemas/BoolInt" + - name: hearingImpaired + description: The hearingImpaired + in: query + required: false + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully retrieved get subtitles + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{ids}/tree: + get: + operationId: getItemTree + summary: Get metadata items as a tree + tags: + - Library + description: Get a tree of metadata items, such as the seasons/episodes of a show + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + description: Comma-separated list of IDs + in: path + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithNestedMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + MetadataItem: + - {} + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{ids}/unmatch: + put: + operationId: unmatch + summary: Unmatch a metadata item + tags: + - Library + description: Unmatch a metadata item to info fetched from the agent + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + description: Comma-separated list of IDs + in: path + required: true + schema: + type: string + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully updated unmatch a metadata item + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{ids}/users/top: + get: + operationId: listTopUsers + summary: Get metadata top users + tags: + - Library + description: Get the list of users which have played this item starting with the most + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + description: Comma-separated list of IDs + in: path + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Account: + type: array + items: + $ref: "#/components/schemas/TopUserAccount" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Account: + - globalViewCount: 1 + id: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/{ids}/voiceActivity: + put: + operationId: detectVoiceActivity + summary: Detect voice activity + tags: + - Library + description: Start the detection of voice in a metadata item + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: ids + description: Comma-separated list of IDs + in: path + required: true + schema: + type: string + - name: force + description: Indicate whether detection should be re-run + in: query + required: false + schema: + $ref: "#/components/schemas/BoolInt" + - name: manual + description: Indicate whether detection is manually run + in: query + required: false + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully updated detect voice activity + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': - description: 'Bad Request - A parameter was not specified, or was specified incorrectly.' + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/metadata/augmentations/{augmentationId}: + get: + operationId: getAugmentationStatus + summary: Get augmentation status + tags: + - Library + description: Get augmentation status and potentially wait for completion + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: augmentationId + description: The id of the augmentation + in: path + required: true + schema: + type: string + - name: wait + description: Wait for augmentation completion before returning + in: query + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '204': + $ref: "#/components/responses/204" + description: Successfully completed get augmentation status + '401': + description: This augmentation is not owned by the requesting user + content: + text/html: + schema: + type: string + '404': + description: No augmentation found + content: + text/html: + schema: + type: string + /library/parts/{partId}: + put: + operationId: setStreamSelection + summary: Set stream selection + tags: + - Library + description: Set which streams (audio/subtitle) are selected by this user + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: partId + description: The id of the part to select streams on + in: path + required: true + schema: + type: integer + - name: audioStreamID + description: The id of the audio stream to select in this part + in: query + schema: + type: integer + - name: subtitleStreamID + description: The id of the subtitle stream to select in this part. Specify 0 to select no subtitle + in: query + schema: + type: integer + - name: allParts + description: Perform the same for all parts of this media selecting similar streams in each + in: query + schema: + $ref: "#/components/schemas/BoolInt" + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully updated set stream selection content: application/json: schema: - x-speakeasy-name-override: BadRequest - type: object - properties: - errors: - type: array - items: - type: object - properties: - code: - type: integer - format: int32 - example: 1000 - message: - type: string - x-speakeasy-error-message: true - example: X-Plex-Client-Identifier is missing - status: - type: integer - format: int32 - example: 400 - '401': - description: Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + description: One of the audio or subtitle streams does not belong to this part + content: + text/html: + schema: + type: string + /library/people/{personId}: + get: + operationId: getPerson + summary: Get person details + tags: + - Library + description: Get details for a single actor. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: personId + description: Either the PMS tag `id` of the person or `tagKey` of the actor. Note the `tagKey` is the hex portion of the plex guid for the actor + in: path + required: true + schema: + type: string + responses: + '200': + description: OK content: application/json: schema: - x-speakeasy-name-override: Unauthorized - type: object - properties: - errors: - type: array - items: - type: object - properties: - code: - type: integer - format: int32 - example: 1001 - message: - type: string - x-speakeasy-error-message: true - example: User could not be authenticated - status: - type: integer - format: int32 - example: 401 - /resources: + $ref: "#/components/schemas/MediaContainerWithTags" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + '404': + $ref: "#/components/responses/404" + description: Not Found - The requested resource does not exist + content: + text/html: + schema: + type: string + /library/people/{personId}/media: get: - servers: - - url: 'https://plex.tv/api/v2' + operationId: listPersonMedia + summary: Get media for a person tags: - - Plex + - Library + description: Get all the media for a single actor. + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: personId + description: Either the PMS tag `id` of the person or `tagKey` of the actor. Note the `tagKey` is the hex portion of the plex guid for the actor + in: path + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '404': + $ref: "#/components/responses/404" + description: Not Found - The requested resource does not exist + content: + text/html: + schema: + type: string + /library/sections/{sectionId}: + delete: + operationId: deleteLibrarySection + summary: Delete a library section + tags: + - Library + description: Delete a library section by id security: - token: - admin - summary: Get Server Resources - description: Get Plex server access tokens and server connections - operationId: get-server-resources parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" - - name: includeHttps - in: query - description: Include Https entries in the results + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + description: The section identifier + in: path + required: true schema: - allOf: - - $ref: "#/components/schemas/BoolInt" - - default: 0 - example: 1 - - name: includeRelay + type: string + - name: async + description: If set, response will return an activity with the actual deletion process. Otherwise request will return when deletion is complete in: query - description: | - Include Relay addresses in the results - E.g: https://10-0-0-25.bbf8e10c7fa20447cacee74cd9914cde.plex.direct:32400 schema: - allOf: - - $ref: "#/components/schemas/BoolInt" - - default: 0 - example: 1 - - name: includeIPv6 + $ref: "#/components/schemas/BoolInt" + responses: + '200': + $ref: "#/components/responses/200" + description: Successfully deleted delete a library section + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + get: + operationId: getLibraryDetails + summary: Get a library section by id + tags: + - Library + description: '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. It often contains a list of `Directory` metadata objects: These used to be used by clients to build a menuing system.' + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + description: The section identifier + in: path + required: true + schema: + type: string + - name: includeDetails + description: 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. in: query - description: Include IPv6 entries in the results schema: - allOf: - - $ref: "#/components/schemas/BoolInt" - - default: 0 - example: 1 + $ref: "#/components/schemas/BoolInt" responses: '200': - description: List of Plex Devices. This includes Plex hosted servers and clients + description: OK + content: + application/json: + schema: + type: object + properties: + MediaContainer: + type: object + properties: + allowSync: + oneOf: + - type: boolean + - type: string + enum: + - '0' + - '1' + art: + type: string + content: + description: |- + The 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": true` 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": true` which used to be used to allow clients to build search dialogs on the fly. + type: string + Directory: + type: array + items: + $ref: "#/components/schemas/Metadata" + identifier: + type: string + librarySectionID: + type: integer + mediaTagPrefix: + type: string + mediaTagVersion: + type: integer + size: + type: integer + sortAsc: + type: boolean + thumb: + type: string + title1: + type: string + viewGroup: + type: string + viewMode: + type: integer + example: + MediaContainer: + art: example + content: example + identifier: example + librarySectionID: 1 + mediaTagPrefix: example + mediaTagVersion: 1 + size: 1 + sortAsc: true + thumb: example + title1: example + viewGroup: example + viewMode: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - application/json: + text/html: schema: - type: array - items: - $ref: '#/components/schemas/PlexDevice' - '400': - $ref: '#/components/responses/400' + type: string '401': - description: Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - application/json: + text/html: schema: - x-speakeasy-name-override: Unauthorized - type: object - properties: - errors: - type: array - items: - type: object - properties: - code: - type: integer - format: int32 - example: 1001 - message: - type: string - x-speakeasy-error-message: true - example: User could not be authenticated - status: - type: integer - format: int32 - example: 401 - /activities/{activityId}: - delete: - summary: Cancel a running activity - operationId: cancelActivity - description: Cancel a running activity. Admins can cancel all activities but other users can only cancel their own + type: string + put: + operationId: editSection + summary: Edit a library section tags: - - Activities + - Library + description: Edit a library section by id setting parameters security: - token: - admin @@ -5320,32 +32014,80 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: activityId - description: The UUID of the activity to cancel. + - name: sectionId + description: The section identifier in: path required: true schema: type: string - example: d6199ba1-fb5e-4cae-bf17-1a5369c1cf1e + - name: name + description: The name of the new section + in: query + schema: + type: string + - name: scanner + description: The scanner this section should use + in: query + schema: + type: string + - name: agent + description: The agent this section should use for metadata + in: query + required: true + schema: + type: string + - name: metadataAgentProviderGroupId + description: The agent group id for this section + in: query + schema: + type: string + - name: language + description: The language of this section + in: query + schema: + type: string + - name: locations + description: The locations on disk to add to this section + in: query + schema: + type: array + items: + type: string + example: + - O:\fatboy\Media\Ripped\Music + - O:\fatboy\Media\My Music + - name: prefs + description: The preferences for this section + in: query + style: deepObject + schema: + type: object + example: + collectionMode: 2 + hidden: 0 responses: '200': - $ref: '#/components/responses/200' - '400': - description: Activity is not cancellable + $ref: "#/components/responses/200" + description: Successfully updated edit a library section content: - text/html: {} - '404': - description: No activity with the provided id is found + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + description: Section cannot be created due to bad parameters in request content: - text/html: {} - /butler/{butlerTask}: - delete: - summary: Stop a single Butler task - operationId: stopTask - description: | - This endpoint will stop a currently running task by name, or remove it from the list of scheduled tasks if it exists + text/html: + schema: + type: string + /library/sections/{sectionId}/agents: + get: + operationId: getSectionAgents + summary: Get Section Agents tags: - - Butler + - Library + description: Get available metadata agents for a library section. security: - token: - admin @@ -5361,52 +32103,68 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: butlerTask - description: The task name + - name: sectionId + description: The unique identifier of the library section in: path required: true schema: - type: string - enum: - - AutomaticUpdates - - BackupDatabase - - ButlerTaskGenerateAdMarkers - - ButlerTaskGenerateCreditsMarkers - - ButlerTaskGenerateIntroMarkers - - ButlerTaskGenerateVoiceActivity - - CleanOldBundles - - CleanOldCacheFiles - - DeepMediaAnalysis - - GarbageCollectBlobs - - GarbageCollectLibraryMedia - - GenerateBlurHashes - - GenerateChapterThumbs - - GenerateMediaIndexFiles - - LoudnessAnalysis - - MusicAnalysis - - OptimizeDatabase - - RefreshEpgGuides - - RefreshLibraries - - RefreshLocalMedia - - RefreshPeriodicMetadata - - UpgradeMediaAnalysis + type: integer responses: '200': - $ref: '#/components/responses/200' - '404': - description: No task with this name was found or no task with this name was running + description: OK content: - text/html: {} - post: - summary: Start a single Butler task - operationId: startTask - description: | - This endpoint will attempt to start a specific Butler task by name. + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/albums: + get: + operationId: getAlbums + summary: Set section albums tags: - - Butler - security: - - token: - - admin + - Content + description: Get all albums in a music section parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -5419,58 +32177,90 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: butlerTask - description: The task name + - name: sectionId + description: Section identifier in: path required: true schema: - type: string - enum: - - AutomaticUpdates - - BackupDatabase - - ButlerTaskGenerateAdMarkers - - ButlerTaskGenerateCreditsMarkers - - ButlerTaskGenerateIntroMarkers - - ButlerTaskGenerateVoiceActivity - - CleanOldBundles - - CleanOldCacheFiles - - DeepMediaAnalysis - - GarbageCollectBlobs - - GarbageCollectLibraryMedia - - GenerateBlurHashes - - GenerateChapterThumbs - - GenerateMediaIndexFiles - - LoudnessAnalysis - - MusicAnalysis - - OptimizeDatabase - - RefreshEpgGuides - - RefreshLibraries - - RefreshLocalMedia - - RefreshPeriodicMetadata - - UpgradeMediaAnalysis + type: integer responses: '200': - description: Task started + description: OK content: - text/html: {} - '202': - description: Task is already running + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + content: secondary + allowSync: false + art: /:/resources/artist-fanart.jpg + identifier: com.plexapp.plugins.library + mediaTagPrefix: /system/bundle/media/flags/ + mediaTagVersion: 1680272530 + Metadata: + - addedAt: 1681152176 + allowSync: true + art: /library/metadata/251/art/1716801576 + deletedAt: 1682628386 + Genre: + - tag: Comedy/Spoken + guid: plex://album/5d07c894403c640290c0e196 + index: 1 + key: /library/metadata/265/children + leafCount: 12 + librarySectionID: 3 + librarySectionTitle: Music + librarySectionUUID: d7fd8c81-a345-4e68-8113-92f23cb47e70 + loudnessAnalysisVersion: '2' + originallyAvailableAt: "2014-07-15T00:00:00.000Z" + parentGuid: plex://artist/5d07bbfc403c6402904a60e7 + parentKey: /library/metadata/251 + parentRatingKey: '251' + parentThumb: /library/metadata/251/thumb/1716801576 + parentTitle: “Weird Al” Yankovic + rating: 8 + ratingKey: '265' + studio: RCA + summary: Already accepted as a bona fide talent in the world of parody -- his musicianship, comedic timing, his pop-culture reference awareness, and his great wordplay are all well-documented -- the only thing that matters when it comes to "Weird Al" Yankovic albums is how inspired the king of novelty songs sounds on any given LP. On his 14th studio album, Mandatory Fun, the inspiration meter goes well into the red, something heard instantly as Iggy Azalea's electro-rap "Fancy" does a complete 180 thematically on the opening "Handy," the song now heading toward the local home improvement store where the craftsmen vogue in their orange vests and blow sweet come-ons like "I'll bring you up to code" and "My socket wrenches are second to none." Pharrell's "Happy" becomes "Tacky" and Al's amazing ability to follow an everyday poke ("Wear my Ed Hardy shirt with fluorescent orange pants") with something brainy and reserved ("Got my new résumé, it's printed in Comic Sans") surprises once more, but for end-to-end "wows," it's his brilliant redo of Robin Thicke's "Blurred Lines," now the smug and twerking "Word Crimes," which gives copy editors, English professors, and grammar nerds a reason to hit the dancefloor ("And listen up when I tell you this/I hope you never use quotation marks for emphasis!"). Hardcore and hilarious musical moments start to happen when Imagine Dragons' "Radioactive" becomes "Inactive," a singalong anthem for the sluggish and the slovenly ("Near comatose, no exercise/Don't tag my toe, I'm still alive") with a dubstep-rock bassline that sounds like Galactus burping. Better still is the every-Al-album pop-polka medley, this time called "Now That's What I Call Polka!" which polkas-up Daft Punk ("Get Lucky"), PSY ("Gangnam Style"), and Miley Cyrus ("Wrecking Ball"), and with more Spike Jones-styled sound effects than usual. As for the originals this time out, the "you suck!"-minded "Sports Song" will be unavoidable under Friday night lights once a teen gets hold of it, while the ranting and wonderfully weird "First World Problems" sounds more like the Pixies than anything the Pixies did in 2014. Wonders never cease on Mandatory Fun, and neither do the laughs. ~ David Jeffries + thumb: /library/metadata/265/thumb/1715112705 + title: Mandatory Fun + type: album + updatedAt: 1715112705 + year: 2014 + mixedParents: true + nocache: true + size: 12 + thumb: /:/resources/artist.png + title1: Music + title2: By Album + viewGroup: album + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - '404': - description: No task with this name was found + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - text/html: {} - /downloadQueue/{queueId}: + text/html: + schema: + type: string + /library/sections/{sectionId}/all: get: - summary: Get a download queue - operationId: getDownloadQueue - description: | - Available: 0.2.0 - - Get a download queue by its id + operationId: listContent + summary: Get items in the section tags: - - Download Queue + - Content + description: |- + Get the items in a section, potentially filtering them. + When `includeCollections=1` is passed, the response may also contain `Collection` items. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -5483,58 +32273,615 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: queueId - description: The queue id + - $ref: "#/components/parameters/X-Plex-Container-Start" + - $ref: "#/components/parameters/X-Plex-Container-Size" + - $ref: "#/components/parameters/mediaQuery" + - name: sectionId + description: The id of the section in: path required: true schema: type: integer + - name: type + description: Filter by metadata type (1=movie, 2=show, 3=season, 4=episode, 8=artist, 9=album, 10=track) + in: query + schema: + type: integer + x-speakeasy-name-override: mediaType + - name: sort + description: Sort key and direction (e.g. addedAt:desc, titleSort) + in: query + schema: + type: string + - name: includeMeta + description: Adds the Meta object to the response + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeGuids + description: Adds the Guid object to the response + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeCollections + description: Include collection items in results + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeExternalMedia + description: Include external or online media + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeAdvanced + description: Include advanced settings + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: checkFiles + description: Verify file existence + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeRelated + description: Include related items + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeExtras + description: Include trailers, behind-the-scenes, etc. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includePopularLeaves + description: Include popular episodes + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeConcerts + description: Include concert items + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeOnDeck + description: Include On Deck status + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeChapters + description: Include chapter markers + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includePreferences + description: Include user preferences + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeBandwidths + description: Include bandwidth info + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeLoudnessRamps + description: Include loudness ramp data + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeStations + description: Include radio station data + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeExternalIds + description: Include external GUIDs + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeReviews + description: Include user reviews + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeCredits + description: Include full credits + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeArt + description: Force inclusion of artwork fields + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeThumb + description: Force inclusion of thumbnail fields + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeBanner + description: Force inclusion of banner fields + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeTheme + description: Force inclusion of theme fields + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeFields + description: Whitelist of fields to return + in: query + schema: + type: string + - name: excludeFields + description: Blacklist of fields to omit + in: query + schema: + type: string + - name: asyncAugmentMetadata + description: Async metadata augmentation + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: asyncRefreshLocalMediaAgent + description: Async local media agent refresh + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: nocache + description: Bypass cache + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: skipRefresh + description: Skip synchronous refresh + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: excludeElements + description: Comma-separated list of elements to exclude from the response + in: query + schema: + type: string + - name: filters + description: General filtering expression. + in: query + schema: + type: string + - name: unwatched + description: Filter to unwatched only (1 = true). + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: genre + description: Filter by genre. + in: query + schema: + type: string + - name: studio + description: Filter by studio. + in: query + schema: + type: string + - name: contentRating + description: Filter by content rating. + in: query + schema: + type: string + - name: resolution + description: Filter by resolution. + in: query + schema: + type: string + - name: year + description: Filter by year. + in: query + schema: + type: integer + - name: firstCharacter + description: Filter by first character of title. + in: query + schema: + type: string responses: '200': description: OK + headers: + X-Plex-Container-Start: + $ref: "#/components/headers/X-Plex-Container-Start" + X-Plex-Container-Total-Size: + $ref: "#/components/headers/X-Plex-Container-Total-Size" content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - DownloadQueue: - items: - properties: - id: - type: integer - itemCount: - type: integer - status: - description: | - The state of this queue - - deciding: At least one item is still being decided - - waiting: At least one item is waiting for transcode and none are currently transcoding - - processing: At least one item is being transcoded - - done: All items are available (or potentially expired) - - error: At least one item has encountered an error - enum: - - deciding - - waiting - - processing - - done - - error - type: string - type: object - type: array - type: object - /downloadQueue/{queueId}/add: - post: - summary: Add to download queue - operationId: addDownloadQueueItems - description: | - Available: 0.2.0 + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + put: + operationId: updateItems + summary: Set the fields of the filtered items + tags: + - Library + description: |- + This endpoint takes an large possible set of values. Here are some examples. + - **Parameters, extra documentation** + - artist.title.value + - When used with track, both artist.title.value and album.title.value need to be specified + - title.value usage + - Summary + - Tracks always rename and never merge + - Albums and Artists + - if single item and item without title does not exist, it is renamed. + - if single item and item with title does exist they are merged. + - if multiple they are always merged. + - Tracks + - Works as expected will update the track's title + - Single track: `/library/sections/{id}/all?type=10&id=42&title.value=NewName` + - Multiple tracks: `/library/sections/{id}/all?type=10&id=42,43,44&title.value=NewName` + - All tracks: `/library/sections/{id}/all?type=10&title.value=NewName` + - Albums + - Functionality changes depending on the existence of an album with the same title + - Album exists + - Single album: `/library/sections/{id}/all?type=9&id=42&title.value=Album 2` + - Album with id 42 is merged into album titled "Album 2" + - Multiple/All albums: `/library/sections/{id}/all?type=9&title.value=Moo Album` + - All albums are merged into the existing album titled "Moo Album" + - Album does not exist + - Single album: `/library/sections/{id}/all?type=9&id=42&title.value=NewAlbumTitle` + - Album with id 42 has title modified to "NewAlbumTitle" + - Multiple/All albums: `/library/sections/{id}/all?type=9&title.value=NewAlbumTitle` + - All albums are merged into a new album with title="NewAlbumTitle" + - Artists + - Functionaly changes depending on the existence of an artist with the same title. + - Artist exists + - Single artist: `/library/sections/{id}/all?type=8&id=42&title.value=Artist 2` + - Artist with id 42 is merged into existing artist titled "Artist 2" + - Multiple/All artists: `/library/sections/{id}/all?type=8&title.value=Artist 3` + - All artists are merged into the existing artist titled "Artist 3" + - Artist does not exist + - Single artist: `/library/sections/{id}/all?type=8&id=42&title.value=NewArtistTitle` + - Artist with id 42 has title modified to "NewArtistTitle" + - Multiple/All artists: `/library/sections/{id}/all?type=8&title.value=NewArtistTitle` + - All artists are merged into a new artist with title="NewArtistTitle" - Add items to the download queue - tags: - - Download Queue + - **Notes** + - Technically square brackets are not allowed in an URI except the Internet Protocol Literal Address + - RFC3513: A host identified by an Internet Protocol literal address, version 6 [RFC3513] or later, is distinguished by enclosing the IP literal within square brackets ("[" and "]"). This is the only place where square bracket characters are allowed in the URI syntax. + - Escaped square brackets are allowed, but don't render well parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -5547,83 +32894,113 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: queueId - description: The queue id + - name: sectionId + description: The id of the section in: path required: true schema: - type: integer - - name: keys - description: Keys to add + type: string + - name: type + description: The media type to filter by in: query - required: true - explode: false schema: - type: array - items: - type: string - example: - - /library/metadata/3 - - /library/metadata/6 - - $ref: '#/components/parameters/advancedSubtitles' - - $ref: '#/components/parameters/audioBoost' - - $ref: '#/components/parameters/audioChannelCount' - - $ref: '#/components/parameters/autoAdjustQuality' - - $ref: '#/components/parameters/autoAdjustSubtitle' - - $ref: '#/components/parameters/directPlay' - - $ref: '#/components/parameters/directStream' - - $ref: '#/components/parameters/directStreamAudio' - - $ref: '#/components/parameters/disableResolutionRotation' - - $ref: '#/components/parameters/hasMDE' - - $ref: '#/components/parameters/location' - - $ref: '#/components/parameters/mediaBufferSize' - - $ref: '#/components/parameters/mediaIndex' - - $ref: '#/components/parameters/musicBitrate' - - $ref: '#/components/parameters/offset' - - $ref: '#/components/parameters/partIndex' - - $ref: '#/components/parameters/path' - - $ref: '#/components/parameters/peakBitrate' - - $ref: '#/components/parameters/photoResolution' - - $ref: '#/components/parameters/protocol' - - $ref: '#/components/parameters/secondsPerSegment' - - $ref: '#/components/parameters/subtitleSize' - - $ref: '#/components/parameters/subtitles' - - $ref: '#/components/parameters/videoBitrate' - - $ref: '#/components/parameters/videoQuality' - - $ref: '#/components/parameters/videoResolution' + type: string + x-speakeasy-name-override: mediaType + - name: filters + description: The filters to apply to determine which items should be modified + in: query + schema: + type: string + - name: field.value + description: Set the specified field to a new value + in: query + schema: + type: string + - name: field.locked + description: Set the specified field to locked (or unlocked if set to 0) + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: title.value + description: This field is treated specially by albums or artists and may be used for implicit reparenting. + in: query + schema: + type: string + - name: artist.title.value + description: Reparents set of Tracks or Albums - used with album.title.* in the case of tracks + in: query + schema: + type: string + - name: artist.title.id + description: Reparents set of Tracks or Albums - used with album.title.* in the case of tracks + in: query + schema: + type: string + - name: album.title.value + description: Reparents set of Tracks - Must be used in conjunction with artist.title.value or id + in: query + schema: + type: string + - name: album.title.id + description: Reparents set of Tracks - Must be used in conjunction with artist.title.value or id + in: query + schema: + type: string + - name: tagtype[idx].tag.tag + description: Creates tag and associates it with each item in the set. - [idx] links this and the next parameters together + in: query + schema: + type: string + - name: tagtype[idx].tagging.object + description: Here `object` may be text/thumb/art/theme - Optionally used in conjunction with tag.tag, to update association info across the set. + in: query + schema: + type: string + - name: tagtype[].tag.tag- + description: Remove comma separated tags from the set of items + in: query + schema: + type: string + - name: tagtype[].tag + description: Remove associations of this type (e.g. genre) from the set of items + in: query + schema: + type: string responses: '200': - description: OK + $ref: "#/components/responses/200" + description: Successfully updated set the fields of the filtered items content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - AddedQueueItems: - items: - properties: - id: - description: The queue item id that was added or the existing one if an item already exists in this queue with the same parameters - type: integer - key: - description: The key added to the queue - type: string - type: object - type: array - type: object - /downloadQueue/{queueId}/items: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + description: The set of parameters are inconsistent or invalid values + content: + text/html: + schema: + type: string + '404': + description: A required item could not be found + content: + text/html: + schema: + type: string + '409': + description: Rename of a collection to a name that's already taken + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/allLeaves: get: - summary: Get download queue items - operationId: listDownloadQueueItems - description: | - Available: 0.2.0 - - Get items from a download queue + operationId: getAllLeaves + summary: Set section leaves tags: - - Download Queue + - Content + description: Get all leaves in a section (such as episodes in a show section) parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -5636,8 +33013,8 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: queueId - description: The queue id + - name: sectionId + description: Section identifier in: path required: true schema: @@ -5648,117 +33025,110 @@ paths: content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - DownloadQueueItem: - items: - properties: - DecisionResult: - properties: - availableBandwidth: - description: The maximum bitrate set when item was added - type: integer - directPlayDecisionCode: - type: integer - directPlayDecisionText: - type: string - generalDecisionCode: - type: integer - generalDecisionText: - type: string - mdeDecisionCode: - description: The code indicating the status of evaluation of playback when client indicates `hasMDE=1` - type: integer - mdeDecisionText: - description: Descriptive text for the above code - type: string - transcodeDecisionCode: - type: integer - transcodeDecisionText: - type: string - type: object - error: - description: The error encountered in transcoding or decision - type: string - id: - type: integer - key: - type: string - queueId: - type: integer - status: - description: | - The state of the item: - - deciding: The item decision is pending - - waiting: The item is waiting for transcode - - processing: The item is being transcoded - - available: The item is available for download - - error: The item encountered an error in the decision or transcode - - expired: The transcoded item has timed out and is no longer available - enum: - - deciding - - waiting - - processing - - available - - error - - expired - type: string - transcode: - description: The transcode session object which is not yet documented otherwise it'd be a $ref here. - type: object - TranscodeSession: - $ref: '#/components/schemas/TranscodeSession' - type: object - type: array - type: object - /hubs/metadata/{metadataId}: - get: - summary: Get hubs for section by metadata item - operationId: getMetadataHubs - description: Get the hubs for a section by metadata item. Currently only for music sections - tags: - - Hubs - parameters: - - $ref: "#/components/parameters/accepts" - - $ref: "#/components/parameters/X-Plex-Client-Identifier" - - $ref: "#/components/parameters/X-Plex-Product" - - $ref: "#/components/parameters/X-Plex-Version" - - $ref: "#/components/parameters/X-Plex-Platform" - - $ref: "#/components/parameters/X-Plex-Platform-Version" - - $ref: "#/components/parameters/X-Plex-Device" - - $ref: "#/components/parameters/X-Plex-Model" - - $ref: "#/components/parameters/X-Plex-Device-Vendor" - - $ref: "#/components/parameters/X-Plex-Device-Name" - - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: metadataId - description: The metadata ID for the hubs to fetch - in: path - required: true - schema: - type: integer - - $ref: '#/components/parameters/count' - - name: onlyTransient - description: 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) - in: query - schema: - $ref: "#/components/schemas/BoolInt" - responses: - '200': - $ref: '#/components/responses/responses-200' + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + content: secondary + allowSync: false + art: /:/resources/show-fanart.jpg + identifier: com.plexapp.plugins.library + mediaTagPrefix: /system/bundle/media/flags/ + mediaTagVersion: 1680272530 + Metadata: + - addedAt: 1348327790 + art: /library/metadata/148/art/1715112830 + audienceRating: 7.7 + audienceRatingImage: themoviedb://image.rating + chapterSource: media + contentRating: TV-PG + Director: + - tag: Stephen Furst + duration: 2625089 + grandparentArt: /library/metadata/148/art/1715112830 + grandparentGuid: plex://show/5d9c087202391c001f58a287 + grandparentKey: /library/metadata/148 + grandparentRatingKey: '148' + grandparentSlug: babylon-5 + grandparentTheme: /library/metadata/148/theme/1715112830 + grandparentThumb: /library/metadata/148/thumb/1715112830 + grandparentTitle: Babylon 5 + guid: plex://episode/5d9c1359e264b7001fcb529c + index: 8 + key: /library/metadata/150 + lastViewedAt: 1612468663 + Media: + - aspectRatio: 1.78 + audioChannels: 6 + audioCodec: ac3 + bitrate: 5741 + container: mkv + duration: 2625089 + height: 480 + id: 376 + Part: + - container: mkv + duration: 2625089 + file: /Volumes/Media/TV Shows/Babylon 5/Season 4/Babylon 5 S04E08 The Illusion of Truth.mkv + id: 872 + key: /library/parts/872/1348327790/file.mkv + size: 1883816967 + videoProfile: main + videoCodec: mpeg2video + videoFrameRate: NTSC + videoProfile: main + videoResolution: '480' + width: 720 + originallyAvailableAt: "1997-02-17T00:00:00.000Z" + parentGuid: plex://season/602e691b66dfdb002c0a5034 + parentIndex: 4 + parentKey: /library/metadata/149 + parentRatingKey: '149' + parentThumb: /library/metadata/149/thumb/1681152133 + parentTitle: Season 4 + ratingKey: '150' + Role: + - tag: Hank Delgado + - tag: Diana Morgan + - tag: Jeff Griggs + summary: A team of ISN reporters arrives at the station wanting to do a story about Babylon 5. Sheridan refuses at first, but finally agrees on the theory that at least a small part of their side of the conflict will be shown. + thumb: /library/metadata/150/thumb/1681283788 + title: The Illusion of Truth + titleSort: Illusion of Truth + type: episode + updatedAt: 1681283788 + viewCount: 1 + Writer: + - tag: J. Michael Straczynski + year: 1997 + nocache: true + size: 41 + thumb: /:/resources/show.png + title1: TV Shows + viewGroup: show '400': - description: No metadata with that id or permission is denied + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - /hubs/metadata/{metadataId}/postplay: - get: - summary: Get postplay hubs - operationId: getPostplayHubs - description: Get the hubs for a metadata to be displayed in post play + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/analyze: + put: + operationId: startAnalysis + summary: Analyze a section tags: - - Hubs + - Library + description: Start analysis of all items in a section. If BIF generation is enabled, this will also be started on this section + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -5771,32 +33141,46 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: metadataId - description: The metadata ID for the hubs to fetch + - name: sectionId + description: Section identifier in: path required: true schema: type: integer - - $ref: '#/components/parameters/count' - - name: onlyTransient - description: 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) - in: query - schema: - $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/responses-200' + $ref: "#/components/responses/200" + description: Successfully updated analyze a section + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': - description: No metadata with that id or permission is denied + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - /hubs/metadata/{metadataId}/related: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/artists: get: - summary: Get related hubs - operationId: getRelatedHubs - description: Get the hubs for a metadata related to the provided metadata item + operationId: getSectionArtists + summary: Get Section Artists tags: - - Hubs + - Library + description: Get artists for a music library section. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -5809,32 +33193,362 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: metadataId - description: The metadata ID for the hubs to fetch + - name: sectionId + description: The id of the section in: path required: true schema: type: integer - - $ref: '#/components/parameters/count' - - name: onlyTransient - description: 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) - in: query - schema: - $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/responses-200' + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': - description: No metadata with that id or permission is denied + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - /hubs/sections/{sectionId}: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/arts: get: - summary: Get section hubs - operationId: getSectionHubs - description: Get the hubs for a single section + operationId: getArts + summary: Set section artwork tags: - - Hubs + - Content + description: Get artwork for a library section parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -5848,93 +33562,49 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId - description: The section ID for the hubs to fetch + description: Section identifier in: path required: true schema: type: integer - - $ref: '#/components/parameters/count' - - name: onlyTransient - description: 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) - in: query - schema: - $ref: "#/components/schemas/BoolInt" responses: '200': description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available - schema: - type: integer content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Hub: - items: - $ref: '#/components/schemas/Hub' - type: array - type: object - type: object + $ref: "#/components/schemas/MediaContainerWithArtwork" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - {} '400': - description: No section with that id or permission is denied + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - /hubs/sections/{sectionId}/manage: - delete: - summary: Reset hubs to defaults - operationId: resetSectionDefaults - description: Reset hubs for this section to defaults and delete custom hubs - tags: - - Hubs - security: - - token: - - admin - parameters: - - $ref: "#/components/parameters/accepts" - - $ref: "#/components/parameters/X-Plex-Client-Identifier" - - $ref: "#/components/parameters/X-Plex-Product" - - $ref: "#/components/parameters/X-Plex-Version" - - $ref: "#/components/parameters/X-Plex-Platform" - - $ref: "#/components/parameters/X-Plex-Platform-Version" - - $ref: "#/components/parameters/X-Plex-Device" - - $ref: "#/components/parameters/X-Plex-Model" - - $ref: "#/components/parameters/X-Plex-Device-Vendor" - - $ref: "#/components/parameters/X-Plex-Device-Name" - - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: sectionId - description: The section ID for the hubs to reorder - in: path - required: true - schema: - type: integer - responses: - '200': - $ref: '#/components/responses/200' - '403': - $ref: '#/components/responses/403' - '404': - description: Section id was not found + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - text/html: {} + text/html: + schema: + type: string + /library/sections/{sectionId}/autocomplete: get: - summary: Get hubs - operationId: listHubs - description: Get the list of hubs including both built-in and custom + operationId: autocomplete + summary: Get autocompletions for search tags: - - Hubs - security: - - token: - - admin + - Library + description: |- + The field to autocomplete on is specified by the `{field}.query` parameter. For example `genre.query` or `title.query`. + Returns a set of items from the filtered items whose `{field}` starts with `{field}.query`. In the results, a `{field}.queryRange` will be present to express the range of the match parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -5947,17 +33617,24 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/mediaQuery" - name: sectionId - description: The section ID for the hubs to reorder + description: Section identifier in: path required: true schema: type: integer - - name: metadataItemId - description: Restrict hubs to ones relevant to the provided metadata item + - name: type + description: Item type in: query schema: type: integer + x-speakeasy-name-override: mediaType + - name: field.query + description: The "field" stands in for any field, the value is a partial string for matching + in: query + schema: + type: string responses: '200': description: OK @@ -5973,71 +33650,342 @@ paths: content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Hub: - items: - properties: - homeVisibility: - description: | - Whether this hub is visible on the home screen - - all: Visible to all users - - none: Visible to no users - - admin: Visible to only admin users - - shared: Visible to shared users - enum: - - all - - none - - admin - - shared - type: string - identifier: - description: The identifier for this hub - type: string - promotedToOwnHome: - description: Whether this hub is visible to admin user home - type: boolean - promotedToRecommended: - description: Whether this hub is promoted to all for recommendations - type: boolean - promotedToSharedHome: - description: Whether this hub is visible to shared user's home - type: boolean - recommendationsVisibility: - description: | - The visibility of this hub in recommendations: - - all: Visible to all users - - none: Visible to no users - - admin: Visible to only admin users - - shared: Visible to shared users - enum: - - all - - none - - admin - - shared - type: string - title: - description: The title of this hub - type: string - type: object - type: array - type: object - type: object - '403': - $ref: '#/components/responses/403' - '404': - description: Section id was not found + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + description: A paramater is either invalid or missing content: - text/html: {} - post: - summary: Create a custom hub - operationId: createCustomHub - description: Create a custom hub based on a metadata item + text/html: + schema: + type: string + /library/sections/{sectionId}/byContentRating: + get: + operationId: getByContentRating + summary: Get By Content Rating tags: - - Hubs + - Library + description: Browse items in a library section grouped by content rating. security: - token: - admin @@ -6054,52 +34002,361 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId - description: The section ID for the hubs to reorder + description: The unique identifier of the library section in: path required: true schema: type: integer - - name: metadataItemId - description: The metadata item on which to base this hub. This must currently be a collection - in: query - required: true - schema: - type: integer - - name: promotedToRecommended - description: Whether this hub should be displayed in recommended - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: promotedToOwnHome - description: Whether this hub should be displayed in admin's home - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: promotedToSharedHome - description: Whether this hub should be displayed in shared user's home - in: query - schema: - $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/200' + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': - description: A hub could not be created with this metadata item + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - '403': - $ref: '#/components/responses/403' - '404': - description: Section id or metadata item was not found + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - text/html: {} - /hubs/sections/{sectionId}/manage/move: - put: - summary: Move Hub - operationId: moveHub - description: Changed the ordering of a hub among others hubs + text/html: + schema: + type: string + /library/sections/{sectionId}/byDecade: + get: + operationId: getByDecade + summary: Get By Decade tags: - - Hubs + - Library + description: Browse items in a library section grouped by decade. security: - token: - admin @@ -6116,38 +34373,364 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId - description: The section ID for the hubs to reorder + description: The unique identifier of the library section in: path required: true schema: type: integer - - name: identifier - description: The identifier of the hub to move - in: query - required: true - schema: - type: string - - name: after - description: The identifier of the hub to order this hub after (or empty/missing to put this hub first) - in: query - schema: - type: string responses: '200': - $ref: '#/components/responses/get-responses-200' - '403': - $ref: '#/components/responses/403' - '404': - description: Section id was not found + description: OK content: - text/html: {} - /library/collections/{collectionId}/items: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/byFolder: get: - summary: Get items in a collection - operationId: getCollectionItems - description: Get items in a collection. Note if this collection contains more than 100 items, paging must be used. + operationId: getByFolder + summary: Get By Folder tags: - - Content + - Library + description: Browse items in a library section by underlying filesystem folder. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -6160,8 +34743,8 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: collectionId - description: The collection id + - name: sectionId + description: The unique identifier of the library section in: path required: true schema: @@ -6172,17 +34755,350 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' - '404': - description: Collection not found + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - put: - summary: Add items to a collection - operationId: addCollectionItems - description: Add items to a collection by uri + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/byResolution: + get: + operationId: getByResolution + summary: Get By Resolution tags: - - Library Collections + - Library + description: Browse items in a library section grouped by resolution. security: - token: - admin @@ -6198,36 +35114,362 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: collectionId - description: The collection id + - name: sectionId + description: The unique identifier of the library section in: path required: true schema: type: integer - - name: uri - description: The URI describing the items to add to this collection - in: query - required: true - schema: - type: string responses: '200': description: OK content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' - '404': - description: Collection not found + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - /library/metadata/{ids}: - delete: - summary: Delete a metadata item - operationId: deleteMetadataItem - description: Delete a single metadata item from the library, deleting media as well + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/byYear: + get: + operationId: getByYear + summary: Get By Year tags: - Library + description: Browse items in a library section grouped by year. security: - token: - admin @@ -6243,110 +35485,416 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - name: sectionId + description: The unique identifier of the library section in: path required: true schema: - type: string - - name: proxy - description: Whether proxy items, such as media optimized versions, should also be deleted. Defaults to false. - in: query - schema: - $ref: "#/components/schemas/BoolInt" + type: integer responses: '200': - $ref: '#/components/responses/200' - '400': - description: Media items could not be deleted + description: OK content: - text/html: {} - get: - summary: Get a metadata item - operationId: getMetadataItem - description: Get one or more metadata items. - tags: - - Content - parameters: - - $ref: "#/components/parameters/accepts" - - $ref: "#/components/parameters/X-Plex-Client-Identifier" - - $ref: "#/components/parameters/X-Plex-Product" - - $ref: "#/components/parameters/X-Plex-Version" - - $ref: "#/components/parameters/X-Plex-Platform" - - $ref: "#/components/parameters/X-Plex-Platform-Version" - - $ref: "#/components/parameters/X-Plex-Device" - - $ref: "#/components/parameters/X-Plex-Model" - - $ref: "#/components/parameters/X-Plex-Device-Vendor" - - $ref: "#/components/parameters/X-Plex-Device-Name" - - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids - in: path - required: true - schema: - type: array - items: - type: string - - name: asyncCheckFiles - description: Determines if file check should be performed asynchronously. An activity is created to indicate progress. Default is false. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: asyncRefreshLocalMediaAgent - description: Determines if local media agent refresh should be performed asynchronously. An activity is created to indicate progress. Default is false. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: asyncRefreshAnalysis - description: Determines if analysis refresh should be performed asynchronously. An activity is created to indicate progress. Default is false. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: checkFiles - description: Determines if file check should be performed synchronously. Specifying `asyncCheckFiles` will cause this option to be ignored. Default is false. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: skipRefresh - description: Determines if synchronous local media agent and analysis refresh should be skipped. Specifying async versions will cause synchronous versions to be skipped. Default is false. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: checkFileAvailability - description: Determines if file existence check should be performed synchronously. Specifying `checkFiles` will imply this option. Default is false. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: asyncAugmentMetadata - description: Add metadata augmentations. An activity is created to indicate progress. Option will be ignored if specified by non-admin or if multiple metadata items are requested. Default is false. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: augmentCount - description: Number of augmentations to add. Requires `asyncAugmentMetadata` to be specified. - in: query + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/categories: + get: + operationId: getCategories + summary: Set section categories + tags: + - Content + description: Get categories in a library section + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + description: Section identifier + in: path + required: true schema: - $ref: "#/components/schemas/BoolInt" + type: integer responses: '200': description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts + content: + application/json: schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available + $ref: "#/components/schemas/MediaContainerWithArtwork" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - {} + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: schema: - type: integer + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - application/json: + text/html: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' - put: - summary: Edit a metadata item - operationId: editMetadataItem - description: Edit metadata items setting fields + type: string + /library/sections/{sectionId}/clips: + get: + operationId: getSectionClips + summary: Get Section Clips tags: - Library + description: Get clips for a library section. security: - token: - admin @@ -6362,35 +35910,362 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - name: sectionId + description: The id of the section in: path required: true schema: - type: array - items: - type: string - - name: args - description: The new values for the metadata item - in: query - schema: - type: object + type: integer responses: '200': - $ref: '#/components/responses/200' + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': - description: Media items could not be deleted + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - /library/metadata/{ids}/addetect: - put: - summary: Ad-detect an item - operationId: detectAds - description: Start the detection of ads in a metadata item + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/cluster: + get: + operationId: getCluster + summary: Set section clusters tags: - - Library - security: - - token: - - admin + - Content + description: Get clusters in a library section (typically for photos) parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -6403,21 +36278,48 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - name: sectionId + description: Section identifier in: path required: true schema: - type: string + type: integer responses: '200': - $ref: '#/components/responses/200' - /library/metadata/{ids}/allLeaves: + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithArtwork" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - {} + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/collections: get: - summary: Get the leaves of an item - operationId: getAllItemLeaves - description: Get the leaves for a metadata item such as the episodes in a show + operationId: getCollections + summary: Get collections in a section tags: - Library + description: Get all collections in a section parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -6430,11 +36332,13 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - $ref: "#/components/parameters/mediaQuery" + - name: sectionId + description: Section identifier in: path required: true schema: - type: string + type: integer responses: '200': description: OK @@ -6450,17 +36354,352 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' - /library/metadata/{ids}/analyze: - put: - summary: Analyze an item - operationId: analyzeMetadata - description: Start the analysis of a metadata item + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/common: + get: + operationId: getCommon + summary: Get common fields for items tags: - Library - security: - - token: - - admin + description: |- + Represents a "Common" item. It contains only the common attributes of the items selected by the provided filter + Fields which are not common will be expressed in the `mixedFields` field parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -6473,36 +36712,378 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - $ref: "#/components/parameters/mediaQuery" + - name: sectionId + description: Section identifier in: path required: true schema: - type: string - - name: thumbOffset - description: Set the offset to be used for thumbnails - in: query - required: false - schema: - type: number - - name: artOffset - description: Set the offset to be used for artwork + type: integer + - name: type + description: Item type in: query - required: false schema: - type: number + type: integer + x-speakeasy-name-override: mediaType responses: '200': - $ref: '#/components/responses/200' - /library/metadata/{ids}/chapterThumbs: - put: - summary: Generate thumbs of chapters for an item - operationId: generateThumbs - description: Start the chapter thumb generation for an item + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '404': + $ref: "#/components/responses/404" + description: Not Found - The requested resource does not exist + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/computePath: + get: + operationId: getSonicPath + summary: Similar tracks to transition from one to another tags: - - Library - security: - - token: - - admin + - Content + description: Get a list of audio tracks starting at one and ending at another which are similar across the path parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -6515,26 +37096,380 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - $ref: "#/components/parameters/count" + - name: sectionId + description: Section identifier in: path required: true schema: - type: string - - name: force + type: integer + - name: startID + description: The starting metadata item id in: query - required: false + required: true schema: - $ref: "#/components/schemas/BoolInt" + type: integer + - name: endID + description: The ending metadata item id + in: query + required: true + schema: + type: integer + - name: maxDistance + description: The maximum distance allowed along the path; defaults to 0.25 + in: query + schema: + type: number responses: '200': - $ref: '#/components/responses/200' - /library/metadata/{ids}/credits: - put: - summary: Credit detect a metadata item - operationId: detectCredits - description: Start credit detection on a metadata item + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/edit: + get: + operationId: getSectionEdit + summary: Edit Section tags: - Library + description: Get library section metadata. security: - token: - admin @@ -6550,31 +37485,44 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - name: sectionId + description: The unique identifier of the library section in: path required: true schema: - type: string - - name: force - in: query - required: false - schema: - $ref: "#/components/schemas/BoolInt" - - name: manual - in: query - required: false - schema: - $ref: "#/components/schemas/BoolInt" + type: integer responses: '200': - $ref: '#/components/responses/200' - /library/metadata/{ids}/extras: - get: - summary: Get an item's extras - operationId: getExtras - description: Get the extras for a metadata item + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + put: + operationId: editLibrarySection + summary: Edit Section tags: - Library + description: Update library section metadata. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -6587,33 +37535,45 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - name: sectionId + description: The unique identifier of the library section in: path required: true schema: - type: string + type: integer responses: '200': description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts + content: + application/json: schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: schema: - type: integer + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - application/json: + text/html: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' - post: - summary: Add to an item's extras - operationId: addExtras - description: Add an extra to a metadata item + type: string + /library/sections/{sectionId}/emptyTrash: + get: + operationId: emptyTrash + summary: Get Empty Trash tags: - Library + description: Permanently remove items from the trash for a library section. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -6626,37 +37586,44 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - name: sectionId + description: The unique identifier of the library section in: path required: true - schema: - type: string - - name: extraType - description: The metadata type of the extra - in: query schema: type: integer - - name: url - description: The URL of the extra - in: query - required: true - schema: - type: string - - $ref: '#/components/parameters/title' responses: '200': - $ref: '#/components/responses/200' - '404': - description: Either the metadata item is not present or the extra could not be added + description: OK content: - text/html: {} - /library/metadata/{ids}/file: - get: - summary: Get a file from a metadata or media bundle - operationId: getFile - description: Get a bundle file for a metadata or media item. This is either an image or a mp3 (for a show's theme) + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + post: + operationId: emptyTrashPost + summary: Empty Trash tags: - Library + description: Permanently remove items from the trash for a library section. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -6669,35 +37636,41 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - name: sectionId + description: The unique identifier of the library section in: path required: true schema: - type: string - - name: url - description: The bundle url, typically starting with `metadata://` or `media://` - in: query - schema: - type: string + type: integer responses: '200': description: OK content: - audio/mpeg3: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: schema: - format: binary type: string - image/jpeg: + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: schema: - format: binary type: string - /library/metadata/{ids}/index: put: - summary: Start BIF generation of an item - operationId: startBifGeneration - description: Start the indexing (BIF generation) of an item + operationId: emptyTrashPut + summary: Empty section trash tags: - Library + description: Empty trash in the section, permanently deleting media/metadata for missing media security: - token: - admin @@ -6713,26 +37686,43 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - name: sectionId + description: Section identifier in: path required: true schema: - type: string - - name: force - in: query - required: false - schema: - $ref: "#/components/schemas/BoolInt" + type: integer responses: '200': - $ref: '#/components/responses/200' - /library/metadata/{ids}/intro: - put: - summary: Intro detect an item - operationId: detectIntros - description: Start the detection of intros in a metadata item + $ref: "#/components/responses/200" + description: Successfully updated empty section trash + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/episodes: + get: + operationId: getSectionEpisodes + summary: Get Section Episodes tags: - Library + description: Get episodes for a TV library section. security: - token: - admin @@ -6748,33 +37738,365 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - name: sectionId + description: The id of the section in: path required: true schema: - type: string - - name: force - description: Indicate whether detection should be re-run - in: query - required: false - schema: - $ref: "#/components/schemas/BoolInt" - - name: threshold - description: The threshold for determining if content is an intro or not - in: query - required: false - schema: - type: number + type: integer responses: '200': - $ref: '#/components/responses/200' - /library/metadata/{ids}/marker: - post: - summary: Create a marker - operationId: createMarker - description: Create a marker for this user on the metadata item + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/filters: + get: + operationId: getSectionFilters + summary: Get section filters tags: - Library + description: Get common filters on a section + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -6787,82 +38109,68 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - name: sectionId + description: Section identifier in: path required: true - schema: - type: string - - name: type - description: The type of marker to edit/create - in: query - required: true - schema: - type: integer - - name: startTimeOffset - description: The start time of the marker - in: query - required: true - schema: - type: integer - - name: endTimeOffset - description: The end time of the marker - in: query schema: type: integer - - name: attributes - description: The attributes to assign to this marker - in: query - style: deepObject - schema: - type: object - example: - title: My favorite spot responses: '200': - description: OK + description: The filters on the section content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - additionalProperties: true - properties: - color: - type: string - endTimeOffset: - type: integer - id: - type: integer - startTimeOffset: - type: integer - title: - type: string - type: - enum: - - intro - - commercial - - bookmark - - resume - - credit - type: string - type: object - type: object + $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value '400': - description: Request parameters are bad, such as an `endTimeOffset` prior to the `startTimeOffset` + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - /library/metadata/{ids}/match: - put: - summary: Match a metadata item - operationId: matchItem - description: Match a metadata item to a guid + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/firstCharacters: + get: + operationId: getFirstCharacters + summary: Get list of first characters tags: - Library - security: - - token: - - admin + description: Get list of first characters in this section parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -6875,35 +38183,80 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - $ref: "#/components/parameters/mediaQuery" + - name: sectionId + description: Section identifier in: path required: true schema: - type: string - - name: guid - in: query - schema: - type: string - - name: name + type: integer + - name: type + description: The metadata type to filter on in: query - required: false schema: - type: string - - name: year + type: integer + x-speakeasy-name-override: mediaType + - name: sort + description: The metadata type to filter on in: query - required: false schema: type: integer responses: '200': - $ref: '#/components/responses/200' - /library/metadata/{ids}/matches: - put: - summary: Get metadata matches for an item - operationId: listMatches - description: Get the list of metadata matches for a metadata item + description: OK + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Directory: + type: array + items: + type: object + properties: + title: + type: string + key: + type: string + size: + description: The number of items starting with this character + type: integer + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: example + key: example + size: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/hubs: + get: + operationId: getLibrarySectionHubs + summary: Get Section Hubs tags: - Library + description: Get hubs for a library section. security: - token: - admin @@ -6919,54 +38272,379 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - name: sectionId + description: The unique identifier of the library section in: path required: true - schema: - type: string - - name: title - in: query - schema: - type: string - - name: parentTitle - in: query - required: false - schema: - type: string - - name: agent - in: query - required: false - schema: - type: string - - name: language - in: query - required: false - schema: - type: string - - name: year - in: query - required: false schema: type: integer - - name: manual - in: query - required: false - schema: - $ref: "#/components/schemas/BoolInt" responses: '200': description: OK content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' - /library/metadata/{ids}/merge: - put: - summary: Merge a metadata item - operationId: mergeItems - description: Merge a metadata item with other items + $ref: "#/components/schemas/MediaContainerWithHubs" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Hub: + - title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/indexes: + delete: + operationId: deleteIndexes + summary: Delete section indexes tags: - Library + description: Delete all the indexes in a section security: - token: - admin @@ -6982,28 +38660,46 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - name: sectionId + description: Section identifier in: path required: true schema: - type: string - - name: ids - in: query - explode: false - schema: - type: array - items: - type: string + type: integer responses: '200': - $ref: '#/components/responses/200' - /library/metadata/{ids}/nearest: - get: - summary: Get nearest tracks to metadata item - operationId: listSonicallySimilar - description: Get the nearest tracks, sonically, to the provided track + $ref: "#/components/responses/200" + description: Successfully deleted delete section indexes + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/intros: + delete: + operationId: deleteIntros + summary: Delete section intro markers tags: - Library + description: Delete all the intro markers in a section + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -7016,45 +38712,43 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - name: sectionId + description: Section identifier in: path required: true - schema: - type: string - - name: excludeParentID - in: query - required: false - schema: - type: integer - - name: excludeGrandparentID - in: query - required: false - schema: - type: integer - - name: limit - in: query - required: false schema: type: integer - - name: maxDistance - in: query - required: false - schema: - type: number responses: '200': - description: OK + $ref: "#/components/responses/200" + description: Successfully deleted delete section intro markers content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' - /library/metadata/{ids}/prefs: - put: - summary: Set metadata preferences - operationId: setItemPreferences - description: Set the preferences on a metadata item + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/label: + get: + operationId: getSectionLabels + summary: Get Section Labels tags: - Library + description: Get labels for a library section. security: - token: - admin @@ -7070,28 +38764,57 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - name: sectionId + description: The unique identifier of the library section in: path required: true schema: - type: string - - name: args - in: query - schema: - type: object + type: integer responses: '200': - $ref: '#/components/responses/200' - /library/metadata/{ids}/refresh: - put: - summary: Refresh a metadata item - operationId: refreshItemsMetadata - description: Refresh a metadata item from the agent + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithTags" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/location: + get: + operationId: getFolders + summary: Get all folder locations tags: - - Library - security: - - token: - - admin + - Content + description: Get all folder locations of the media in a section parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -7104,31 +38827,70 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - name: sectionId + description: Section identifier in: path required: true schema: - type: string - - name: agent - in: query - required: false - schema: - type: string - - name: markUpdated - in: query - required: false - schema: - $ref: "#/components/schemas/BoolInt" + type: integer responses: '200': - $ref: '#/components/responses/200' - /library/metadata/{ids}/related: + description: OK + content: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Directory: + type: array + items: + type: object + properties: + title: + type: string + fastKey: + type: string + key: + type: string + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: example + fastKey: example + key: example + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/match: get: - summary: Get related items - operationId: getRelatedItems - description: Get a hub of related items to a metadata item + operationId: matchSectionItems + summary: Match Section Items tags: - Library + description: Match items in a library section against metadata providers. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -7141,35 +38903,42 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - name: sectionId + description: The unique identifier of the library section in: path required: true schema: - type: string + type: integer responses: '200': description: OK content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Hub: - items: - $ref: '#/components/schemas/Hub' - type: array - type: object - type: object - /library/metadata/{ids}/similar: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/moment: get: - summary: Get similar items - operationId: listSimilar - description: Get a list of similar items to a metadata item + operationId: listMoments + summary: Set section moments tags: - - Library + - Content + description: Get moments in a library section (typically for photos) parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -7182,26 +38951,48 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - name: sectionId + description: Section identifier in: path required: true schema: - type: string - - $ref: '#/components/parameters/count' + type: integer responses: '200': description: OK content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' - /library/metadata/{ids}/split: + $ref: "#/components/schemas/MediaContainerWithArtwork" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - {} + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/move: put: - summary: Split a metadata item - operationId: splitItem - description: Split a metadata item into multiple items + operationId: moveSection + summary: Move Section tags: - Library + description: Move library section paths. security: - token: - admin @@ -7217,21 +39008,42 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - name: sectionId + description: The unique identifier of the library section in: path required: true schema: - type: string + type: integer responses: '200': - $ref: '#/components/responses/200' - /library/metadata/{ids}/subtitles: + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/movies: get: - summary: Add subtitles - operationId: addSubtitles - description: Add a subtitle to a metadata item + operationId: getSectionMovies + summary: Get Section Movies tags: - Library + description: Get movies for a movie library section. security: - token: - admin @@ -7247,57 +39059,362 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - name: sectionId + description: The id of the section in: path required: true - schema: - type: string - - name: title - in: query - required: false - schema: - type: string - - name: language - in: query - required: false - schema: - type: string - - name: mediaItemID - in: query - required: false schema: type: integer - - name: url - description: The URL of the subtitle. If not provided, the contents of the subtitle must be in the post body - in: query - required: false - schema: - type: string - - name: format - in: query - required: false - schema: - type: string - - name: forced - in: query - required: false - schema: - $ref: "#/components/schemas/BoolInt" - - name: hearingImpaired - in: query - required: false - schema: - $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/200' - /library/metadata/{ids}/tree: + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/nearest: get: - summary: Get metadata items as a tree - operationId: getItemTree - description: Get a tree of metadata items, such as the seasons/episodes of a show + operationId: getSonicallySimilar + summary: The nearest audio tracks tags: - - Library + - Content + description: Get the nearest audio tracks to a particular analysis parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -7310,25 +39427,389 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - name: sectionId + description: Section identifier in: path required: true schema: - type: string + type: integer + - name: type + description: The metadata type to fetch (should be 10 for audio track) + in: query + schema: + type: integer + x-speakeasy-name-override: mediaType + - name: values + description: The music analysis to center the search. Typically obtained from the `musicAnalysis` of a track + in: query + required: true + explode: false + schema: + type: array + items: + type: integer + minimum: 50 + maximum: 50 + - name: limit + description: The limit of the number of items to fetch; defaults to 50 + in: query + schema: + type: integer + - name: maxDistance + description: The maximum distance to search, defaults to 0.25 + in: query + schema: + type: number responses: '200': description: OK content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithNestedMetadata' - /library/metadata/{ids}/unmatch: - put: - summary: Unmatch a metadata item - operationId: unmatch - description: Unmatch a metadata item to info fetched from the agent + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/newest: + get: + operationId: getNewestForSection + summary: Get Newest for Section tags: - Library + description: Get the newest additions for a specific library section. security: - token: - admin @@ -7344,24 +39825,362 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - name: sectionId + description: The unique identifier of the library section in: path required: true schema: - type: string + type: integer responses: '200': - $ref: '#/components/responses/200' - /library/metadata/{ids}/users/top: + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/onDeck: get: - summary: Get metadata top users - operationId: listTopUsers - description: Get the list of users which have played this item starting with the most + operationId: getOnDeckForSection + summary: Get On Deck for Section tags: - Library - security: - - token: - - admin + description: Get the On Deck items for a specific library section. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -7374,40 +40193,362 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - name: sectionId + description: The unique identifier of the library section in: path required: true schema: - type: string + type: integer responses: '200': - description: OK + description: On Deck items content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Account: - items: - properties: - globalViewCount: - type: integer - id: - type: integer - type: object - type: array - type: object - type: object - /library/metadata/{ids}/voiceActivity: - put: - summary: Detect voice activity - operationId: detectVoiceActivity - description: Start the detection of voice in a metadata item + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/optimize: + get: + operationId: optimizeSection + summary: Get Optimize Section tags: - Library + description: Optimize the database for a specific library section. security: - token: - admin @@ -7423,33 +40564,44 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: ids + - name: sectionId + description: The unique identifier of the library section in: path required: true schema: - type: string - - name: force - description: Indicate whether detection should be re-run - in: query - required: false - schema: - $ref: "#/components/schemas/BoolInt" - - name: manual - description: Indicate whether detection is manually run - in: query - required: false - schema: - $ref: "#/components/schemas/BoolInt" + type: integer responses: '200': - $ref: '#/components/responses/200' - /library/metadata/augmentations/{augmentationId}: - get: - summary: Get augmentation status - operationId: getAugmentationStatus - description: Get augmentation status and potentially wait for completion + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + post: + operationId: optimizeSectionPost + summary: Optimize Section tags: - Library + description: Optimize the database for a specific library section. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -7462,35 +40614,45 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: augmentationId - description: The id of the augmentation + - name: sectionId + description: The unique identifier of the library section in: path required: true schema: - type: string - - name: wait - description: Wait for augmentation completion before returning - in: query - schema: - $ref: "#/components/schemas/BoolInt" + type: integer responses: - '204': - $ref: '#/components/responses/204' - '401': - description: This augmentation is not owned by the requesting user + '200': + description: OK content: - text/html: {} - '404': - description: No augmentation found + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - /library/parts/{partId}: - put: - summary: Set stream selection - operationId: setStreamSelection - description: Set which streams (audio/subtitle) are selected by this user + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/photos: + get: + operationId: getSectionPhotos + summary: Get Section Photos tags: - Library + description: Get photos for a photo library section. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -7503,41 +40665,365 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: partId - description: The id of the part to select streams on + - name: sectionId + description: The id of the section in: path required: true schema: type: integer - - name: audioStreamID - description: The id of the audio stream to select in this part - in: query - schema: - type: integer - - name: subtitleStreamID - description: The id of the subtitle stream to select in this part. Specify 0 to select no subtitle - in: query - schema: - type: integer - - name: allParts - description: Perform the same for all parts of this media selecting similar streams in each - in: query - schema: - $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/200' + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': - description: One of the audio or subtitle streams does not belong to this part + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - /library/people/{personId}: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/playlists: get: - summary: Get person details - operationId: getPerson - description: Get details for a single actor. + operationId: getSectionPlaylists + summary: Get Section Playlists tags: - Library + description: Get playlists belonging to a library section. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -7550,38 +41036,362 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: personId - description: Either the PMS tag `id` of the person or `tagKey` of the actor. Note the `tagKey` is the hex portion of the plex guid for the actor + - name: sectionId + description: The unique identifier of the library section in: path required: true schema: - type: string + type: integer responses: '200': description: OK content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Directory: - items: - $ref: '#/components/schemas/Tag' - type: array - type: object - type: object - '404': - $ref: '#/components/responses/404' - /library/people/{personId}/media: + $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/prefs: get: - summary: Get media for a person - operationId: listPersonMedia - description: Get all the media for a single actor. + operationId: getSectionPreferences + summary: Get section prefs tags: - Library + description: Get the prefs for a section by id and potentially overriding the agent parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -7594,10 +41404,15 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: personId - description: Either the PMS tag `id` of the person or `tagKey` of the actor. Note the `tagKey` is the hex portion of the plex guid for the actor + - name: sectionId + description: Section identifier in: path required: true + schema: + type: integer + - name: agent + description: The identifier of the metadata agent to use + in: query schema: type: string responses: @@ -7606,16 +41421,44 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' - '404': - $ref: '#/components/responses/404' - /library/sections/{sectionId}: - delete: - summary: Delete a library section - operationId: deleteLibrarySection - description: Delete a library section by id + $ref: "#/components/schemas/MediaContainerWithSettings" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Setting: + - type: bool + default: string value + advanced: true + enumValues: string value + group: string value + hidden: true + id: string value + label: string value + summary: string value + value: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + put: + operationId: setSectionPreferences + summary: Set section prefs tags: - Library + description: Set the prefs for a section by id security: - token: - admin @@ -7632,25 +41475,51 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId - description: The section identifier + description: Section identifier in: path required: true schema: - type: string - - name: async - description: If set, response will return an activity with the actual deletion process. Otherwise request will return when deletion is complete + type: integer + - name: prefs + description: The preference key to retrieve or set in: query + required: true schema: - $ref: "#/components/schemas/BoolInt" + type: object + example: + enableCinemaTrailers: 1 + hidden: 0 responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" + description: Successfully updated set section prefs + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/recentlyAdded: get: - summary: Get a library section by id - operationId: getLibraryDetails - description: '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. It often contains a list of `Directory` metadata objects: These used to be used by clients to build a menuing system.' + operationId: getRecentlyAddedForSection + summary: Get Recently Added for Section tags: - Library + description: Get recently added items for a specific library section. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -7664,70 +41533,361 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId - description: The section identifier + description: The unique identifier of the library section in: path required: true schema: - type: string - - name: includeDetails - description: 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. - in: query - schema: - $ref: "#/components/schemas/BoolInt" + type: integer responses: '200': - description: OK + description: Recently added items content: application/json: schema: - properties: - MediaContainer: - properties: - content: - description: |- - The 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": true` 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": true` which used to be used to allow clients to build search dialogs on the fly. - type: string - allowSync: - oneOf: - - type: boolean - - type: string - enum: ["0", "1"] - art: - type: string - Directory: - items: - $ref: '#/components/schemas/Metadata' - type: array - identifier: - type: string - librarySectionID: - type: integer - mediaTagPrefix: - type: string - mediaTagVersion: - type: integer - size: - type: integer - sortAsc: - type: boolean - thumb: - type: string - title1: - type: string - viewGroup: - type: string - viewMode: - type: integer - type: object - put: - summary: Edit a library section - operationId: editSection - description: Edit a library section by id setting parameters + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/refresh: + delete: + operationId: cancelRefresh + summary: Cancel section refresh tags: - Library + description: Cancel the refresh of a section security: - token: - admin @@ -7744,70 +41904,44 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId - description: The section identifier + description: Section identifier in: path required: true schema: - type: string - - name: name - description: The name of the new section - in: query - schema: - type: string - - name: scanner - description: The scanner this section should use - in: query - schema: - type: string - - name: agent - description: The agent this section should use for metadata - in: query - required: true - schema: - type: string - - name: metadataAgentProviderGroupId - description: The agent group id for this section - in: query - schema: - type: string - - name: language - description: The language of this section - in: query - schema: - type: string - - name: locations - description: The locations on disk to add to this section - in: query - schema: - type: array - items: - type: string - example: - - O:\fatboy\Media\Ripped\Music - - O:\fatboy\Media\My Music - - name: prefs - description: The preferences for this section - in: query - style: deepObject - schema: - type: object - example: - collectionMode: 2 - hidden: 0 + type: integer responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" + description: Successfully deleted cancel section refresh + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': - description: Section cannot be created due to bad parameters in request + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - /library/sections/{sectionId}/albums: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string get: - summary: Set section albums - operationId: getAlbums - description: Get all albums in a music section + operationId: refreshSection + summary: Get Refresh Section tags: - - Content + - Library + description: Trigger a metadata refresh for a library section. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -7832,59 +41966,32 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/SuccessResponse" example: - MediaContainer: - content: secondary - allowSync: false - art: /:/resources/artist-fanart.jpg - identifier: com.plexapp.plugins.library - mediaTagPrefix: /system/bundle/media/flags/ - mediaTagVersion: 1680272530 - Metadata: - - addedAt: 1681152176 - allowSync: true - art: /library/metadata/251/art/1716801576 - deletedAt: 1682628386 - Genre: - - tag: Comedy/Spoken - guid: plex://album/5d07c894403c640290c0e196 - index: 1 - key: /library/metadata/265/children - leafCount: 12 - librarySectionID: 3 - librarySectionTitle: Music - librarySectionUUID: d7fd8c81-a345-4e68-8113-92f23cb47e70 - loudnessAnalysisVersion: '2' - originallyAvailableAt: '2014-07-15' - parentGuid: plex://artist/5d07bbfc403c6402904a60e7 - parentKey: /library/metadata/251 - parentRatingKey: '251' - parentThumb: /library/metadata/251/thumb/1716801576 - parentTitle: “Weird Al” Yankovic - rating: 8 - ratingKey: '265' - studio: RCA - summary: Already accepted as a bona fide talent in the world of parody -- his musicianship, comedic timing, his pop-culture reference awareness, and his great wordplay are all well-documented -- the only thing that matters when it comes to "Weird Al" Yankovic albums is how inspired the king of novelty songs sounds on any given LP. On his 14th studio album, Mandatory Fun, the inspiration meter goes well into the red, something heard instantly as Iggy Azalea's electro-rap "Fancy" does a complete 180 thematically on the opening "Handy," the song now heading toward the local home improvement store where the craftsmen vogue in their orange vests and blow sweet come-ons like "I'll bring you up to code" and "My socket wrenches are second to none." Pharrell's "Happy" becomes "Tacky" and Al's amazing ability to follow an everyday poke ("Wear my Ed Hardy shirt with fluorescent orange pants") with something brainy and reserved ("Got my new résumé, it's printed in Comic Sans") surprises once more, but for end-to-end "wows," it's his brilliant redo of Robin Thicke's "Blurred Lines," now the smug and twerking "Word Crimes," which gives copy editors, English professors, and grammar nerds a reason to hit the dancefloor ("And listen up when I tell you this/I hope you never use quotation marks for emphasis!"). Hardcore and hilarious musical moments start to happen when Imagine Dragons' "Radioactive" becomes "Inactive," a singalong anthem for the sluggish and the slovenly ("Near comatose, no exercise/Don't tag my toe, I'm still alive") with a dubstep-rock bassline that sounds like Galactus burping. Better still is the every-Al-album pop-polka medley, this time called "Now That's What I Call Polka!" which polkas-up Daft Punk ("Get Lucky"), PSY ("Gangnam Style"), and Miley Cyrus ("Wrecking Ball"), and with more Spike Jones-styled sound effects than usual. As for the originals this time out, the "you suck!"-minded "Sports Song" will be unavoidable under Friday night lights once a teen gets hold of it, while the ranting and wonderfully weird "First World Problems" sounds more like the Pixies than anything the Pixies did in 2014. Wonders never cease on Mandatory Fun, and neither do the laughs. ~ David Jeffries - thumb: /library/metadata/265/thumb/1715112705 - title: Mandatory Fun - type: album - updatedAt: 1715112705 - year: 2014 - mixedParents: true - nocache: true - size: 12 - thumb: /:/resources/artist.png - title1: Music - title2: By Album - viewGroup: album - /library/sections/{sectionId}/all: - get: - summary: Get items in the section - operationId: listContent - description: Get the items in a section, potentially filtering them + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + post: + operationId: refreshSectionPost + summary: Refresh Section tags: - - Content + - Library + description: Trigger a metadata refresh for a library section. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -7897,91 +42004,56 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - $ref: "#/components/parameters/X-Plex-Container-Start" - - $ref: "#/components/parameters/X-Plex-Container-Size" - - $ref: '#/components/parameters/mediaQuery' - - name: includeMeta - in: query - description: | - Adds the Meta object to the response + - name: sectionId + description: Section identifier + in: path + required: true schema: - $ref: "#/components/schemas/BoolInt" - - name: includeGuids + type: integer + - name: force + description: Whether the update of metadata and items should be performed even if modification dates indicate the items have not change in: query - description: | - Adds the Guid object to the response schema: $ref: "#/components/schemas/BoolInt" - - name: sectionId - description: The id of the section - in: path - required: true + - name: path + description: Restrict refresh to the specified path + in: query schema: type: string - responses: '200': - description: OK - headers: - X-Plex-Container-Start: - $ref: '#/components/headers/X-Plex-Container-Start' - X-Plex-Container-Total-Size: - $ref: '#/components/headers/X-Plex-Container-Total-Size' + $ref: "#/components/responses/200" + description: Successfully created/executed refresh section content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' - put: - summary: Set the fields of the filtered items - operationId: updateItems - description: |- - This endpoint takes an large possible set of values. Here are some examples. - - **Parameters, extra documentation** - - artist.title.value - - When used with track, both artist.title.value and album.title.value need to be specified - - title.value usage - - Summary - - Tracks always rename and never merge - - Albums and Artists - - if single item and item without title does not exist, it is renamed. - - if single item and item with title does exist they are merged. - - if multiple they are always merged. - - Tracks - - Works as expected will update the track's title - - Single track: `/library/sections/{id}/all?type=10&id=42&title.value=NewName` - - Multiple tracks: `/library/sections/{id}/all?type=10&id=42,43,44&title.value=NewName` - - All tracks: `/library/sections/{id}/all?type=10&title.value=NewName` - - Albums - - Functionality changes depending on the existence of an album with the same title - - Album exists - - Single album: `/library/sections/{id}/all?type=9&id=42&title.value=Album 2` - - Album with id 42 is merged into album titled "Album 2" - - Multiple/All albums: `/library/sections/{id}/all?type=9&title.value=Moo Album` - - All albums are merged into the existing album titled "Moo Album" - - Album does not exist - - Single album: `/library/sections/{id}/all?type=9&id=42&title.value=NewAlbumTitle` - - Album with id 42 has title modified to "NewAlbumTitle" - - Multiple/All albums: `/library/sections/{id}/all?type=9&title.value=NewAlbumTitle` - - All albums are merged into a new album with title="NewAlbumTitle" - - Artists - - Functionaly changes depending on the existence of an artist with the same title. - - Artist exists - - Single artist: `/library/sections/{id}/all?type=8&id=42&title.value=Artist 2` - - Artist with id 42 is merged into existing artist titled "Artist 2" - - Multiple/All artists: `/library/sections/{id}/all?type=8&title.value=Artist 3` - - All artists are merged into the existing artist titled "Artist 3" - - Artist does not exist - - Single artist: `/library/sections/{id}/all?type=8&id=42&title.value=NewArtistTitle` - - Artist with id 42 has title modified to "NewArtistTitle" - - Multiple/All artists: `/library/sections/{id}/all?type=8&title.value=NewArtistTitle` - - All artists are merged into a new artist with title="NewArtistTitle" - - - **Notes** - - Technically square brackets are not allowed in an URI except the Internet Protocol Literal Address - - RFC3513: A host identified by an Internet Protocol literal address, version 6 [RFC3513] or later, is distinguished by enclosing the IP literal within square brackets ("[" and "]"). This is the only place where square bracket characters are allowed in the URI syntax. - - Escaped square brackets are allowed, but don't render well + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/search: + get: + operationId: searchSection + summary: Search Section tags: - Library + description: Search within a specific library section. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -7995,97 +42067,415 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId - description: The id of the section + description: The unique identifier of the library section in: path required: true schema: - type: string - - name: type - in: query - schema: - type: string - - name: filters - description: The filters to apply to determine which items should be modified - in: query - schema: - type: string - - name: field.value - description: Set the specified field to a new value - in: query - schema: - type: string - - name: field.locked - description: Set the specified field to locked (or unlocked if set to 0) - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: title.value - description: This field is treated specially by albums or artists and may be used for implicit reparenting. - in: query - schema: - type: string - - name: artist.title.value - description: Reparents set of Tracks or Albums - used with album.title.* in the case of tracks - in: query - schema: - type: string - - name: artist.title.id - description: Reparents set of Tracks or Albums - used with album.title.* in the case of tracks - in: query - schema: - type: string - - name: album.title.value - description: Reparents set of Tracks - Must be used in conjunction with artist.title.value or id - in: query - schema: - type: string - - name: album.title.id - description: Reparents set of Tracks - Must be used in conjunction with artist.title.value or id - in: query - schema: - type: string - - name: tagtype[idx].tag.tag - description: Creates tag and associates it with each item in the set. - [idx] links this and the next parameters together - in: query - schema: - type: string - - name: tagtype[idx].tagging.object - description: Here `object` may be text/thumb/art/theme - Optionally used in conjunction with tag.tag, to update association info across the set. - in: query - schema: - type: string - - name: tagtype[].tag.tag- - description: Remove comma separated tags from the set of items - in: query - schema: - type: string - - name: tagtype[].tag - description: Remove associations of this type (e.g. genre) from the set of items - in: query + type: integer + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/settings: + get: + operationId: getSectionSettings + summary: Get Section Settings + tags: + - Library + description: Get section-specific settings. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: sectionId + description: The unique identifier of the library section + in: path + required: true schema: - type: string + type: integer responses: '200': - $ref: '#/components/responses/200' - '400': - description: The set of parameters are inconsistent or invalid values + description: OK content: - text/html: {} - '404': - description: A required item could not be found + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - '409': - description: Rename of a collection to a name that's already taken + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - text/html: {} - /library/sections/{sectionId}/allLeaves: + text/html: + schema: + type: string + /library/sections/{sectionId}/shows: get: - summary: Set section leaves - operationId: getAllLeaves - description: Get all leaves in a section (such as episodes in a show section) + operationId: getSectionShows + summary: Get Section Shows tags: - - Content + - Library + description: Get shows for a TV library section. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8099,7 +42489,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId - description: Section identifier + description: The id of the section in: path required: true schema: @@ -8110,96 +42500,350 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/MediaContainerWithMetadata" example: MediaContainer: - content: secondary - allowSync: false - art: /:/resources/show-fanart.jpg - identifier: com.plexapp.plugins.library - mediaTagPrefix: /system/bundle/media/flags/ - mediaTagVersion: 1680272530 + identifier: example + offset: 1 + size: 1 + totalSize: 1 Metadata: - - addedAt: 1348327790 - art: /library/metadata/148/art/1715112830 - audienceRating: 7.7 - audienceRatingImage: themoviedb://image.rating - chapterSource: media - contentRating: TV-PG + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value Director: - - tag: Stephen Furst - duration: 2625089 - grandparentArt: /library/metadata/148/art/1715112830 - grandparentGuid: plex://show/5d9c087202391c001f58a287 - grandparentKey: /library/metadata/148 - grandparentRatingKey: '148' - grandparentSlug: babylon-5 - grandparentTheme: /library/metadata/148/theme/1715112830 - grandparentThumb: /library/metadata/148/thumb/1715112830 - grandparentTitle: Babylon 5 - guid: plex://episode/5d9c1359e264b7001fcb529c - index: 8 - key: /library/metadata/150 - lastViewedAt: 1612468663 + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 Media: - - aspectRatio: 1.78 - audioChannels: 6 - audioCodec: ac3 - bitrate: 5741 - container: mkv - duration: 2625089 - height: 480 - id: 376 + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 Part: - - container: mkv - duration: 2625089 - file: /Volumes/Media/TV Shows/Babylon 5/Season 4/Babylon 5 S04E08 The Illusion of Truth.mkv - id: 872 - key: /library/parts/872/1348327790/file.mkv - size: 1883816967 - videoProfile: main - videoCodec: mpeg2video - videoFrameRate: NTSC - videoProfile: main - videoResolution: '480' - width: 720 - originallyAvailableAt: '1997-02-17' - parentGuid: plex://season/602e691b66dfdb002c0a5034 - parentIndex: 4 - parentKey: /library/metadata/149 - parentRatingKey: '149' - parentThumb: /library/metadata/149/thumb/1681152133 - parentTitle: Season 4 - ratingKey: '150' + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value Role: - - tag: Hank Delgado - - tag: Diana Morgan - - tag: Jeff Griggs - summary: A team of ISN reporters arrives at the station wanting to do a story about Babylon 5. Sheridan refuses at first, but finally agrees on the theory that at least a small part of their side of the conflict will be shown. - thumb: /library/metadata/150/thumb/1681283788 - title: The Illusion of Truth - titleSort: Illusion of Truth - type: episode - updatedAt: 1681283788 + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 Writer: - - tag: J. Michael Straczynski - year: 1997 - nocache: true - size: 41 - thumb: /:/resources/show.png - title1: TV Shows - viewGroup: show - /library/sections/{sectionId}/analyze: - put: - summary: Analyze a section - operationId: startAnalysis - description: Start analysis of all items in a section. If BIF generation is enabled, this will also be started on this section + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/sorts: + get: + operationId: getAvailableSorts + summary: Get a section sorts tags: - Library - security: - - token: - - admin + description: Get the sort mechanisms available in a section parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8220,14 +42864,42 @@ paths: type: integer responses: '200': - $ref: '#/components/responses/200' - /library/sections/{sectionId}/arts: + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithSorts" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: [] + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/tags: get: - summary: Set section artwork - operationId: getArts - description: Get artwork for a library section + operationId: getSectionTags + summary: Get Section Tags tags: - - Content + - Library + description: Get tags in a library section. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8241,7 +42913,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId - description: Section identifier + description: The unique identifier of the library section in: path required: true schema: @@ -8252,16 +42924,48 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithArtwork' - /library/sections/{sectionId}/autocomplete: + $ref: "#/components/schemas/MediaContainerWithTags" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/timeline: get: - summary: Get autocompletions for search - operationId: autocomplete - description: |- - The field to autocomplete on is specified by the `{field}.query` parameter. For example `genre.query` or `title.query`. - Returns a set of items from the filtered items whose `{field}` starts with `{field}.query`. In the results, a `{field}.queryRange` will be present to express the range of the match + operationId: getSectionTimeline + summary: Get Section Timeline tags: - Library + description: Get section timeline data. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8275,49 +42979,70 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId - description: Section identifier + description: The unique identifier of the library section in: path required: true schema: type: integer - - name: type - description: Item type - in: query - schema: - type: integer - - name: field.query - description: The "field" stands in for any field, the value is a partial string for matching - in: query - schema: - type: string - - $ref: '#/components/parameters/mediaQuery' responses: '200': description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available - schema: - type: integer content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value '400': - description: A paramater is either invalid or missing + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - /library/sections/{sectionId}/categories: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/sections/{sectionId}/unmatch: get: - summary: Set section categories - operationId: getCategories - description: Get categories in a library section + operationId: unmatchSectionItems + summary: Unmatch Section Items tags: - - Content + - Library + description: Unmatch items in a library section from metadata providers. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8331,7 +43056,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId - description: Section identifier + description: The unique identifier of the library section in: path required: true schema: @@ -8340,16 +43065,35 @@ paths: '200': description: OK content: - application/json: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: schema: - $ref: '#/components/schemas/MediaContainerWithArtwork' - /library/sections/{sectionId}/cluster: + type: string + /library/sections/{sectionId}/unwatched: get: - summary: Set section clusters - operationId: getCluster - description: Get clusters in a library section (typically for photos) + operationId: getUnwatchedForSection + summary: Get Unwatched for Section tags: - - Content + - Library + description: Get unwatched items for a specific library section. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8363,7 +43107,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: sectionId - description: Section identifier + description: The unique identifier of the library section in: path required: true schema: @@ -8374,14 +43118,350 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithArtwork' - /library/sections/{sectionId}/collections: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /library/streams/{streamId}/levels: get: - summary: Get collections in a section - operationId: getCollections - description: Get all collections in a section + operationId: getStreamLevels + summary: Get loudness about a stream in json tags: - Library + description: The the loudness of a stream in db, one entry per 100ms parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8394,38 +43474,67 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: sectionId - description: Section identifier + - name: streamId + description: The id of the stream in: path required: true schema: type: integer - - $ref: '#/components/parameters/mediaQuery' + - name: subsample + description: Subsample result down to return only the provided number of samples + in: query + schema: + type: integer responses: '200': description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts + content: + application/json: schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Level: + type: array + items: + $ref: "#/components/schemas/Level" + totalSamples: + description: The total number of samples (as a string) + type: string + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Level: + - v: 1 + totalSamples: example + '403': + $ref: "#/components/responses/responses-403" + description: Forbidden - User does not have permission to access this resource + content: + text/html: schema: - type: integer + type: string + '404': + $ref: "#/components/responses/responses-404" + description: Not Found - The requested resource does not exist content: - application/json: + text/html: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' - /library/sections/{sectionId}/common: + type: string + /library/streams/{streamId}/loudness: get: - summary: Get common fields for items - operationId: getCommon - description: |- - Represents a "Common" item. It contains only the common attributes of the items selected by the provided filter - Fields which are not common will be expressed in the `mixedFields` field + operationId: getStreamLoudness + summary: Get loudness about a stream tags: - Library + description: The the loudness of a stream in db, one number per line, one entry per 100ms parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8438,45 +43547,46 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: sectionId - description: Section identifier + - name: streamId + description: The id of the stream in: path required: true schema: type: integer - - name: type - description: Item type + - name: subsample + description: Subsample result down to return only the provided number of samples in: query schema: type: integer - - $ref: '#/components/parameters/mediaQuery' responses: '200': description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available + content: + text/plain: schema: - type: integer + type: string + '403': + description: The media is not accessible to the user content: - application/json: + text/html: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' - '400': - $ref: '#/components/responses/400' + type: string '404': - $ref: '#/components/responses/404' - /library/sections/{sectionId}/computePath: - get: - summary: Similar tracks to transition from one to another - operationId: getSonicPath - description: Get a list of audio tracks starting at one and ending at another which are similar across the path + description: The stream doesn't exist, or the loudness feature is not available on this PMS + content: + text/html: + schema: + type: string + /livetv/dvrs/{dvrId}: + delete: + operationId: deleteDVR + summary: Delete a single DVR tags: - - Content + - DVRs + description: Delete a single DVR by its id (key) + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8489,47 +43599,42 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: sectionId - description: Section identifier + - name: dvrId + description: The ID of the DVR. in: path required: true schema: type: integer - - name: startID - description: The starting metadata item id - in: query - required: true - schema: - type: integer - - name: endID - description: The ending metadata item id - in: query - required: true - schema: - type: integer - - $ref: '#/components/parameters/count' - - name: maxDistance - description: The maximum distance allowed along the path; defaults to 0.25 - in: query - schema: - type: number responses: '200': - description: OK + $ref: "#/components/responses/200" + description: Successfully deleted delete a single dvr content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' - /library/sections/{sectionId}/emptyTrash: - put: - summary: Empty section trash - operationId: emptyTrash - description: Empty trash in the section, permanently deleting media/metadata for missing media + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + get: + operationId: getDVR + summary: Get a single DVR tags: - - Library - security: - - token: - - admin + - DVRs + description: Get a single DVR by its id (key) parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8542,22 +43647,82 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: sectionId - description: Section identifier + - name: dvrId + description: The ID of the DVR. in: path required: true schema: type: integer responses: '200': - $ref: '#/components/responses/200' - /library/sections/{sectionId}/filters: - get: - summary: Get section filters - operationId: getSectionFilters - description: Get common filters on a section + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + $ref: "#/components/schemas/DVRResponse" + example: + MediaContainer: + DVR: + - Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value + key: string value + language: string value + lineup: string value + uuid: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + patch: + operationId: patchDVRSettings + summary: Update DVR Settings tags: - - Library + - DVRs + description: Update DVR settings. security: - token: - admin @@ -8573,36 +43738,44 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: sectionId - description: Section identifier + - name: dvrId + description: The ID of the DVR. in: path required: true schema: type: integer responses: '200': - description: The filters on the section + description: OK content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Directory: - items: - $ref: '#/components/schemas/Directory' - type: array - type: object - type: object - /library/sections/{sectionId}/firstCharacters: - get: - summary: Get list of first characters - operationId: getFirstCharacters - description: Get list of first characters in this section + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + put: + operationId: updateDVRSettings + summary: Update DVR Settings tags: - - Library + - DVRs + description: Update DVR settings. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8615,55 +43788,42 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: sectionId - description: Section identifier + - name: dvrId + description: The ID of the DVR. in: path required: true schema: type: integer - - name: type - description: The metadata type to filter on - in: query - schema: - type: integer - - name: sort - description: The metadata type to filter on - in: query - schema: - type: integer - - $ref: '#/components/parameters/mediaQuery' responses: '200': description: OK content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Directory: - items: - properties: - key: - type: string - size: - description: The number of items starting with this character - type: integer - title: - type: string - type: object - type: array - type: object - type: object - /library/sections/{sectionId}/indexes: - delete: - summary: Delete section indexes - operationId: deleteIndexes - description: Delete all the indexes in a section + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /livetv/dvrs/{dvrId}/channels: + get: + operationId: getDVRChannels + summary: Get DVR Channels tags: - - Library + - DVRs + description: List channels directly associated with a DVR. security: - token: - admin @@ -8679,22 +43839,362 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: sectionId - description: Section identifier + - name: dvrId + description: The ID of the DVR. in: path required: true schema: type: integer responses: '200': - $ref: '#/components/responses/200' - /library/sections/{sectionId}/intros: - delete: - summary: Delete section intro markers - operationId: deleteIntros - description: Delete all the intro markers in a section + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /livetv/dvrs/{dvrId}/guide: + get: + operationId: getDVRGuide + summary: Get DVR Guide tags: - - Library + - DVRs + description: Fetch program guide/schedule for a DVR. security: - token: - admin @@ -8710,22 +44210,365 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: sectionId - description: Section identifier + - name: dvrId + description: The ID of the DVR. in: path required: true schema: type: integer responses: '200': - $ref: '#/components/responses/200' - /library/sections/{sectionId}/location: - get: - summary: Get all folder locations - operationId: getFolders - description: Get all folder locations of the media in a section + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /livetv/dvrs/{dvrId}/lineups: + delete: + operationId: deleteLineup + summary: Delete a DVR Lineup tags: - - Content + - DVRs + description: Deletes a DVR device's lineup. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8738,43 +44581,91 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: sectionId - description: Section identifier + - name: dvrId + description: The ID of the DVR. in: path required: true schema: type: integer + - name: lineup + description: The lineup to delete + in: query + required: true + schema: + type: string responses: '200': description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Directory: - items: - properties: - fastKey: - type: string - key: - type: string - title: - type: string - type: object - type: array - type: object - type: object - /library/sections/{sectionId}/moment: - get: - summary: Set section moments - operationId: listMoments - description: Get moments in a library section (typically for photos) + $ref: "#/components/schemas/DVRResponse" + example: + MediaContainer: + DVR: + - Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value + key: string value + language: string value + lineup: string value + uuid: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + put: + operationId: addLineup + summary: Add a DVR Lineup tags: - - Content + - DVRs + description: Add a lineup to a DVR device's set of lineups. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8787,26 +44678,92 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: sectionId - description: Section identifier + - name: dvrId + description: The ID of the DVR. in: path required: true schema: type: integer + - name: lineup + description: The lineup to delete + in: query + required: true + schema: + type: string responses: '200': description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithArtwork' - /library/sections/{sectionId}/nearest: - get: - summary: The nearest audio tracks - operationId: getSonicallySimilar - description: Get the nearest audio tracks to a particular analysis + $ref: "#/components/schemas/DVRResponse" + example: + MediaContainer: + DVR: + - Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value + key: string value + language: string value + lineup: string value + uuid: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /livetv/dvrs/{dvrId}/prefs: + put: + operationId: setDVRPreferences + summary: Set DVR preferences tags: - - Content + - DVRs + description: Set DVR preferences by name and value + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8817,54 +44774,98 @@ paths: - $ref: "#/components/parameters/X-Plex-Device" - $ref: "#/components/parameters/X-Plex-Model" - $ref: "#/components/parameters/X-Plex-Device-Vendor" - - $ref: "#/components/parameters/X-Plex-Device-Name" - - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: sectionId - description: Section identifier - in: path - required: true - schema: - type: integer - - name: type - description: The metadata type to fetch (should be 10 for audio track) - in: query - schema: - type: integer - - name: values - description: The music analysis to center the search. Typically obtained from the `musicAnalysis` of a track - in: query + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: dvrId + description: The ID of the DVR. + in: path required: true - explode: false schema: - type: array - items: - maximum: 50 - minimum: 50 - type: integer - - name: limit - description: The limit of the number of items to fetch; defaults to 50 + type: integer + - name: name + description: Set the `name` preference to the provided value in: query schema: - type: integer - - name: maxDistance - description: The maximum distance to search, defaults to 0.25 + type: string + - name: value + description: Preference value to set. in: query schema: - type: number + type: string responses: '200': description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' - /library/sections/{sectionId}/prefs: + $ref: "#/components/schemas/DVRResponse" + example: + MediaContainer: + DVR: + - Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value + key: string value + language: string value + lineup: string value + uuid: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /livetv/dvrs/{dvrId}/recordings: get: - summary: Get section prefs - operationId: getSectionPreferences - description: Get the prefs for a section by id and potentially overriding the agent + operationId: getDVRRecordingsByDVR + summary: Get DVR Recordings by DVR tags: - - Library + - Live TV + description: List completed DVR recordings for a specific DVR. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -8877,29 +44878,362 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: sectionId - description: Section identifier + - name: dvrId + description: The ID of the DVR. in: path required: true schema: type: integer - - name: agent - in: query - schema: - type: string responses: '200': description: OK content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithSettings' - put: - summary: Set section prefs - operationId: setSectionPreferences - description: Set the prefs for a section by id + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /livetv/dvrs/{dvrId}/reloadGuide: + delete: + operationId: stopDVRReload + summary: Tell a DVR to stop reloading program guide tags: - - Library + - DVRs + description: Tell a DVR to stop reloading program guide security: - token: - admin @@ -8915,30 +45249,42 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: sectionId - description: Section identifier + - name: dvrId + description: The ID of the DVR. in: path required: true schema: type: integer - - name: prefs - in: query - required: true - schema: - type: object - example: - enableCinemaTrailers: 1 - hidden: 0 responses: '200': - $ref: '#/components/responses/200' - /library/sections/{sectionId}/refresh: - delete: - summary: Cancel section refresh - operationId: cancelRefresh - description: Cancel the refresh of a section + $ref: "#/components/responses/200" + description: Successfully deleted tell a dvr to stop reloading program guide + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + post: + operationId: reloadGuide + summary: Tell a DVR to reload program guide tags: - - Library + - DVRs + description: Tell a DVR to reload program guide security: - token: - admin @@ -8954,21 +45300,45 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: sectionId - description: Section identifier + - name: dvrId + description: The ID of the DVR. in: path required: true schema: type: integer responses: '200': - $ref: '#/components/responses/200' - post: - summary: Refresh section - operationId: refreshSection - description: Start a refresh of this section + description: OK + headers: + X-Plex-Activity: + description: The activity of the reload process + schema: + type: string + content: + text/html: + schema: + $ref: "#/components/schemas/SuccessResponse" + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /livetv/sessions/{sessionId}: + delete: + operationId: deleteLiveTVSession + summary: Delete Live TV Session tags: - - Library + - Live TV + description: Terminate a Live TV session. security: - token: - admin @@ -8984,32 +45354,41 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: sectionId - description: Section identifier + - name: sessionId + description: The session id in: path required: true - schema: - type: integer - - name: force - description: Whether the update of metadata and items should be performed even if modification dates indicate the items have not change - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: path - description: Restrict refresh to the specified path - in: query schema: type: string responses: '200': - $ref: '#/components/responses/200' - /library/sections/{sectionId}/sorts: + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string get: - summary: Get a section sorts - operationId: getAvailableSorts - description: Get the sort mechanisms available in a section + operationId: getLiveTVSession + summary: Get a single session tags: - - Library + - Live TV + description: Get a single livetv session and metadata parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -9022,36 +45401,374 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: sectionId - description: Section identifier + - name: sessionId + description: The session id in: path required: true schema: - type: integer + type: string responses: '200': description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Directory: - items: - $ref: '#/components/schemas/Sort' - type: array - type: object - type: object - /library/streams/{streamId}/levels: - get: - summary: Get loudness about a stream in json - operationId: getStreamLevels - description: The the loudness of a stream in db, one entry per 100ms + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /media/grabbers/devices/{deviceId}: + delete: + operationId: removeDevice + summary: Remove a device tags: - - Library + - Devices + description: Remove a devices by its id along with its channel mappings + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -9064,52 +45781,61 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: streamId - description: The id of the stream + - name: deviceId + description: The ID of the device. in: path required: true schema: type: integer - - name: subsample - description: Subsample result down to return only the provided number of samples - in: query - schema: - type: integer responses: '200': description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Level: - items: - properties: - v: - description: The level in db. - type: number - type: object - type: array - totalSamples: - description: The total number of samples (as a string) + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + message: type: string - type: object - type: object - '403': - $ref: '#/components/responses/responses-403' + status: + type: integer + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + message: example + status: 1 '404': - $ref: '#/components/responses/responses-404' - /library/streams/{streamId}/loudness: + description: Device not found + content: + text/html: + schema: + type: string get: - summary: Get loudness about a stream - operationId: getStreamLoudness - description: The the loudness of a stream in db, one number per line, one entry per 100ms + operationId: getDeviceDetails + summary: Get device details tags: - - Library + - Devices + description: Get a device's details by its id + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -9122,39 +45848,64 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: streamId - description: The id of the stream + - name: deviceId + description: The ID of the device. in: path required: true schema: type: integer - - name: subsample - description: Subsample result down to return only the provided number of samples - in: query - schema: - type: integer responses: '200': description: OK content: - text/plain: + application/json: schema: - type: string - '403': - description: The media is not accessible to the user - content: - text/html: {} + $ref: "#/components/schemas/MediaContainerWithDevice" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value '404': - description: The stream doesn't exist, or the loudness feature is not available on this PMS + description: Device not found content: - text/html: {} - /livetv/dvrs/{dvrId}: - delete: - summary: Delete a single DVR - operationId: deleteDVR - description: Delete a single DVR by its id (key) + text/html: + schema: + type: string + put: + operationId: modifyDevice + summary: Enable or disable a device tags: - - DVRs + - Devices + description: Enable or disable a device by its id security: - token: - admin @@ -9170,39 +45921,17 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: dvrId - description: The ID of the DVR. + - name: deviceId + description: The ID of the device. in: path required: true schema: type: integer - responses: - '200': - $ref: '#/components/responses/200' - get: - summary: Get a single DVR - operationId: getDVR - description: Get a single DVR by its id (key) - tags: - - DVRs - parameters: - - $ref: "#/components/parameters/accepts" - - $ref: "#/components/parameters/X-Plex-Client-Identifier" - - $ref: "#/components/parameters/X-Plex-Product" - - $ref: "#/components/parameters/X-Plex-Version" - - $ref: "#/components/parameters/X-Plex-Platform" - - $ref: "#/components/parameters/X-Plex-Platform-Version" - - $ref: "#/components/parameters/X-Plex-Device" - - $ref: "#/components/parameters/X-Plex-Model" - - $ref: "#/components/parameters/X-Plex-Device-Vendor" - - $ref: "#/components/parameters/X-Plex-Device-Name" - - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: dvrId - description: The ID of the DVR. - in: path - required: true + - name: enabled + description: Whether to enable the device + in: query schema: - type: integer + $ref: "#/components/schemas/BoolInt" responses: '200': description: OK @@ -9218,40 +45947,38 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainerWithStatus' - - properties: - DVR: - items: - properties: - Device: - items: - $ref: '#/components/schemas/Device' - type: array - key: - type: string - language: - type: string - lineup: - type: string - uuid: - type: string - type: object - type: array - type: object - type: object - /livetv/dvrs/{dvrId}/lineups: - delete: - summary: Delete a DVR Lineup - operationId: deleteLineup - description: Deletes a DVR device's lineup. + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + message: + type: string + status: + type: integer + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + message: example + status: 1 + '404': + description: Device not found + content: + text/html: + schema: + type: string + /media/grabbers/devices/{deviceId}/channelmap: + put: + operationId: setChannelmap + summary: Set a device's channel mapping tags: - - DVRs - security: - - token: - - admin + - Devices + description: Set a device's channel mapping parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -9264,63 +45991,99 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: dvrId - description: The ID of the DVR. + - name: deviceId + description: The ID of the device. in: path required: true schema: type: integer - - name: lineup - description: The lineup to delete + - name: channelMapping + description: The mapping of changes, passed as a map of device channel to lineup VCN. in: query - required: true + style: deepObject schema: - type: string + type: object + example: + '46.3': 2 + '48.9': 4 + - name: channelMappingByKey + description: The mapping of changes, passed as a map of device channel to lineup key. + in: query + style: deepObject + schema: + type: object + example: + '46.3': 5cc83d73af4a72001e9b16d7-5cab3c634df507001fefcad0 + '48.9': 5cc83d73af4a72001e9b16d7-5cab3c63ec158a001d32db8d + - name: channelsEnabled + description: The channels which are enabled. + in: query + schema: + type: array + items: + type: string + example: 46.1,44.1,45.1 responses: '200': description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts + content: + application/json: schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available + $ref: "#/components/schemas/MediaContainerWithDevice" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: schema: - type: integer + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - application/json: + text/html: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainerWithStatus' - - properties: - DVR: - items: - properties: - Device: - items: - $ref: '#/components/schemas/Device' - type: array - key: - type: string - language: - type: string - lineup: - type: string - uuid: - type: string - type: object - type: array - type: object - type: object - put: - summary: Add a DVR Lineup - operationId: addLineup - description: Add a lineup to a DVR device's set of lineups. + type: string + /media/grabbers/devices/{deviceId}/channels: + get: + operationId: getDevicesChannels + summary: Get a device's channels tags: - - DVRs + - Devices + description: Get a device's channels by its id security: - token: - admin @@ -9336,18 +46099,12 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: dvrId - description: The ID of the DVR. + - name: deviceId + description: The ID of the device. in: path required: true schema: - type: integer - - name: lineup - description: The lineup to delete - in: query - required: true - schema: - type: string + type: integer responses: '200': description: OK @@ -9363,37 +46120,45 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainerWithStatus' - - properties: - DVR: - items: - properties: - Device: - items: - $ref: '#/components/schemas/Device' - type: array - key: - type: string - language: - type: string - lineup: - type: string - uuid: - type: string - type: object + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + DeviceChannel: type: array - type: object - type: object - /livetv/dvrs/{dvrId}/prefs: + items: + $ref: "#/components/schemas/DeviceChannel" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + DeviceChannel: + - drm: true + favorite: true + hd: true + identifier: string value + key: string value + name: string value + signalQuality: 1 + signalStrength: 1 + '404': + description: Device not found + content: + text/html: + schema: + type: string + /media/grabbers/devices/{deviceId}/prefs: put: - summary: Set DVR preferences - operationId: setDVRPreferences - description: Set DVR preferences by name avd value + operationId: setDevicePreferences + summary: Set device preferences tags: - - DVRs + - Devices + description: Set device preferences by its id security: - token: - admin @@ -9409,66 +46174,53 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: dvrId - description: The ID of the DVR. + - name: deviceId + description: The ID of the device. in: path required: true schema: type: integer - name: name - description: Set the `name` preference to the provided value + description: The preference names and values. + in: query + schema: + type: string + - name: value + description: Preference value to set. in: query schema: type: string responses: '200': - description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts + $ref: "#/components/responses/200" + description: Successfully updated set device preferences + content: + application/json: schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: schema: - type: integer + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - application/json: + text/html: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainerWithStatus' - - properties: - DVR: - items: - properties: - Device: - items: - $ref: '#/components/schemas/Device' - type: array - key: - type: string - language: - type: string - lineup: - type: string - uuid: - type: string - type: object - type: array - type: object - type: object - /livetv/dvrs/{dvrId}/reloadGuide: + type: string + /media/grabbers/devices/{deviceId}/scan: delete: - summary: Tell a DVR to stop reloading program guide - operationId: stopDVRReload - description: Tell a DVR to stop reloading program guide + operationId: stopScan + summary: Tell a device to stop scanning for channels tags: - - DVRs - security: - - token: - - admin + - Devices + description: Tell a device to stop scanning for channels parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -9481,24 +46233,72 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: dvrId - description: The ID of the DVR. + - name: deviceId + description: The ID of the device. in: path required: true schema: type: integer responses: '200': - $ref: '#/components/responses/200' + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDevice" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string post: - summary: Tell a DVR to reload program guide - operationId: reloadGuide - description: Tell a DVR to reload program guide + operationId: scan + summary: Tell a device to scan for channels tags: - - DVRs - security: - - token: - - admin + - Devices + description: Tell a device to scan for channels parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -9511,12 +46311,18 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: dvrId - description: The ID of the DVR. + - name: deviceId + description: The ID of the device. in: path required: true schema: type: integer + - name: source + description: A valid source for the scan + in: query + schema: + type: string + example: Cable responses: '200': description: OK @@ -9526,14 +46332,65 @@ paths: schema: type: string content: - text/html: {} - /livetv/sessions/{sessionId}: - get: - summary: Get a single session - operationId: getLiveTVSession - description: Get a single livetv session and metadata + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDevice" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /media/grabbers/operations/{operationId}: + delete: + operationId: cancelGrab + summary: Cancel an existing grab tags: - - Live TV + - Subscriptions + description: |- + Cancels an existing media grab (recording). It can be used to resolve a conflict which exists for a rolling subscription. + Note: This cancellation does not persist across a server restart, but neither does a rolling subscription itself. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -9546,38 +46403,42 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: sessionId - description: The session id + - name: operationId + description: The ID of the operation. in: path required: true schema: type: string responses: '200': - description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts + $ref: "#/components/responses/200" + description: Successfully deleted cancel an existing grab + content: + application/json: schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '403': + description: User is not owner of the grab and not the admin + content: + text/html: schema: - type: integer + type: string + '404': + $ref: "#/components/responses/404" + description: Not Found - The requested resource does not exist content: - application/json: + text/html: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' - /media/grabbers/devices/{deviceId}: + type: string + /media/providers/{provider}: delete: - summary: Remove a device - operationId: removeDevice - description: Remove a devices by its id along with its channel mappings + operationId: deleteMediaProvider + summary: Delete a media provider tags: - - Devices - security: - - token: - - admin + - Provider + description: Deletes a media provider with the given id parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -9590,51 +46451,42 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: deviceId - description: The ID of the device. + - name: provider + description: The ID of the media provider to delete in: path required: true schema: - type: integer + type: string responses: '200': - description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available - schema: - type: integer + $ref: "#/components/responses/200" + description: Successfully deleted delete a media provider content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - message: - type: string - status: - type: integer - type: object - type: object - '404': - description: Device not found + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - get: - summary: Get device details - operationId: getDeviceDetails - description: Get a device's details by its id + text/html: + schema: + type: string + '403': + description: Cannot delete a provider which is a child of another provider + content: + text/html: + schema: + type: string + /media/subscriptions/{subscriptionId}: + delete: + operationId: deleteSubscription + summary: Delete a subscription tags: - - Devices - security: - - token: - - admin + - Subscriptions + description: Delete a subscription, cancelling all of its grabs as well parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -9647,32 +46499,48 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: deviceId - description: The ID of the device. + - name: subscriptionId + description: The unique identifier of the subscription in: path required: true schema: type: integer responses: '200': - description: OK + $ref: "#/components/responses/200" + description: Successfully deleted delete a subscription content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithDevice' + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '403': + description: User cannot access DVR on this server or cannot access this subscription + content: + text/html: + schema: + type: string '404': - description: Device not found + $ref: "#/components/responses/404" + description: Not Found - The requested resource does not exist content: - text/html: {} - put: - summary: Enable or disable a device - operationId: modifyDevice - description: Enable or disable a device by its id + text/html: + schema: + type: string + get: + operationId: getSubscription + summary: Get a single subscription tags: - - Devices - security: - - token: - - admin + - Subscriptions + description: Get a single subscription and potentially the grabs too parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -9685,54 +46553,414 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: deviceId - description: The ID of the device. + - name: subscriptionId + description: The unique identifier of the subscription in: path required: true schema: type: integer - - name: enabled - description: Whether to enable the device + - name: includeGrabs + description: Indicates whether the active grabs should be included as well + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeStorage + description: Compute the storage of recorded items desired by this subscription in: query schema: $ref: "#/components/schemas/BoolInt" responses: '200': description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts + content: + application/json: schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available + $ref: "#/components/schemas/MediaContainerWithSubscription" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + MediaSubscription: + - title: string value + type: 1 + airingsType: New Airings Only + createdAt: 1 + Directory: {} + durationTotal: 1 + key: string value + librarySectionTitle: string value + locationPath: string value + MediaGrabOperation: + - currentSize: 1 + grabberIdentifier: string value + grabberProtocol: string value + id: string value + key: string value + mediaIndex: 1 + mediaSubscriptionID: 1 + Metadata: + title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + percent: 1 + provider: string value + status: inactive + Playlist: {} + Setting: + - type: bool + default: string value + advanced: true + enumValues: string value + group: string value + hidden: true + id: string value + label: string value + summary: string value + value: string value + storageTotal: 1 + targetLibrarySectionID: 1 + targetSectionLocationID: 1 + Video: {} + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: schema: - type: integer + type: string + '403': + description: User cannot access DVR on this server or cannot access this subscription content: - application/json: + text/html: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - message: - type: string - status: - type: integer - type: object - type: object + type: string '404': - description: Device not found + $ref: "#/components/responses/404" + description: Not Found - The requested resource does not exist content: - text/html: {} - /media/grabbers/devices/{deviceId}/channelmap: + text/html: + schema: + type: string put: - summary: Set a device's channel mapping - operationId: setChannelmap - description: Set a device's channel mapping + operationId: editSubscriptionPreferences + summary: Edit a subscription tags: - - Devices + - Subscriptions + description: Edit a subscription's preferences parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -9745,52 +46973,413 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: deviceId - description: The ID of the device. + - name: subscriptionId + description: The unique identifier of the subscription in: path required: true schema: type: integer - - name: channelMapping - description: The mapping of changes, passed as a map of device channel to lineup VCN. - in: query - style: deepObject - schema: - type: object - example: - '46.3': 2 - '48.9': 4 - - name: channelMappingByKey - description: The mapping of changes, passed as a map of device channel to lineup key. + - name: prefs + description: The preference key to retrieve or set in: query style: deepObject schema: type: object example: - '46.3': 5cc83d73af4a72001e9b16d7-5cab3c634df507001fefcad0 - '48.9': 5cc83d73af4a72001e9b16d7-5cab3c63ec158a001d32db8d - - name: channelsEnabled - description: The channels which are enabled. - in: query - schema: - type: array - items: - type: string - example: 46.1,44.1,45.1 + minVideoQuality: 720 responses: '200': description: OK content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithDevice' - /media/grabbers/devices/{deviceId}/channels: - get: - summary: Get a device's channels - operationId: getDevicesChannels - description: Get a device's channels by its id + $ref: "#/components/schemas/MediaContainerWithSubscription" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + MediaSubscription: + - title: string value + type: 1 + airingsType: New Airings Only + createdAt: 1 + Directory: {} + durationTotal: 1 + key: string value + librarySectionTitle: string value + locationPath: string value + MediaGrabOperation: + - currentSize: 1 + grabberIdentifier: string value + grabberProtocol: string value + id: string value + key: string value + mediaIndex: 1 + mediaSubscriptionID: 1 + Metadata: + title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + percent: 1 + provider: string value + status: inactive + Playlist: {} + Setting: + - type: bool + default: string value + advanced: true + enumValues: string value + group: string value + hidden: true + id: string value + label: string value + summary: string value + value: string value + storageTotal: 1 + targetLibrarySectionID: 1 + targetSectionLocationID: 1 + Video: {} + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '403': + description: User cannot access DVR on this server or cannot access this subscription + content: + text/html: + schema: + type: string + '404': + $ref: "#/components/responses/404" + description: Not Found - The requested resource does not exist + content: + text/html: + schema: + type: string + /media/subscriptions/{subscriptionId}/move: + put: + operationId: reorderSubscription + summary: Re-order a subscription tags: - - Devices + - Subscriptions + description: Re-order a subscription to change its priority security: - token: - admin @@ -9806,70 +47395,414 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: deviceId - description: The ID of the device. + - name: subscriptionId + description: The unique identifier of the subscription in: path required: true schema: type: integer + - name: after + description: The subscription to move this sub after. If missing will insert at the beginning of the list + in: query + schema: + type: integer responses: '200': description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts + content: + application/json: schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available + $ref: "#/components/schemas/MediaContainerWithSubscription" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + MediaSubscription: + - title: string value + type: 1 + airingsType: New Airings Only + createdAt: 1 + Directory: {} + durationTotal: 1 + key: string value + librarySectionTitle: string value + locationPath: string value + MediaGrabOperation: + - currentSize: 1 + grabberIdentifier: string value + grabberProtocol: string value + id: string value + key: string value + mediaIndex: 1 + mediaSubscriptionID: 1 + Metadata: + title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + percent: 1 + provider: string value + status: inactive + Playlist: {} + Setting: + - type: bool + default: string value + advanced: true + enumValues: string value + group: string value + hidden: true + id: string value + label: string value + summary: string value + value: string value + storageTotal: 1 + targetLibrarySectionID: 1 + targetSectionLocationID: 1 + Video: {} + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: schema: - type: integer + type: string + '403': + description: User cannot access DVR on this server or cannot access this subscription content: - application/json: + text/html: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - DeviceChannel: - items: - properties: - drm: - description: Indicates the channel is DRMed and thus may not be playable - type: boolean - favorite: - type: boolean - hd: - type: boolean - identifier: - type: string - key: - type: string - name: - type: string - signalQuality: - type: integer - signalStrength: - type: integer - type: object - type: array - type: object - type: object + type: string '404': - description: Device not found + $ref: "#/components/responses/404" + description: Not Found - The requested resource does not exist content: - text/html: {} - /media/grabbers/devices/{deviceId}/prefs: - put: - summary: Set device preferences - operationId: setDevicePreferences - description: Set device preferences by its id + text/html: + schema: + type: string + /pins/{pinId}: + get: + operationId: getOAuthPin + summary: Get OAuth PIN Status tags: - - Devices + - Authentication + description: Poll the PIN status. Returns authToken when the user has linked the device. security: - - token: - - admin + - clientIdentifier: [] + servers: + - url: https://plex.tv/api/v2 parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -9882,27 +47815,84 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: deviceId - description: The ID of the device. + - name: pinId + description: The unique identifier of the pin in: path required: true schema: type: integer - - name: name - description: The preference names and values. - in: query - schema: - type: string responses: '200': - $ref: '#/components/responses/200' - /media/grabbers/devices/{deviceId}/scan: + description: PIN status + content: + application/json: + schema: + type: object + properties: + authToken: + type: + - string + - 'null' + clientIdentifier: + type: string + code: + type: string + createdAt: + type: string + expiresAt: + type: string + expiresIn: + type: integer + id: + type: integer + newRegistration: + type: boolean + pmsIdentifier: + type: + - string + - 'null' + pmsVersion: + type: + - string + - 'null' + product: + type: string + qr: + type: string + trusted: + type: boolean + example: + clientIdentifier: example + code: example + createdAt: example + expiresAt: example + expiresIn: 1 + id: 1 + newRegistration: true + product: example + qr: example + trusted: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /playlists/{playlistId}: delete: - summary: Tell a device to stop scanning for channels - operationId: stopScan - description: Tell a device to stop scanning for channels + operationId: deletePlaylist + summary: Delete a Playlist tags: - - Devices + - Library Playlists + description: Deletes a playlist by provided id parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -9915,25 +47905,30 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: deviceId - description: The ID of the device. + - name: playlistId + description: The ID of the playlist in: path required: true schema: type: integer responses: - '200': - description: OK + '204': + $ref: "#/components/responses/204" + description: Successfully completed delete a playlist + '404': + description: Playlist not found (or user may not have permission to access playlist) content: - application/json: + text/html: schema: - $ref: '#/components/schemas/MediaContainerWithDevice' - post: - summary: Tell a device to scan for channels - operationId: scan - description: Tell a device to scan for channels + type: string + get: + operationId: getPlaylist + summary: Retrieve Playlist tags: - - Devices + - Playlist + description: |- + 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. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -9946,39 +47941,353 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: deviceId - description: The ID of the device. + - name: playlistId + description: The ID of the playlist in: path required: true schema: type: integer - - name: source - description: A valid source for the scan - in: query - schema: - type: string - example: Cable responses: '200': description: OK - headers: - X-Plex-Activity: - description: The activity of the reload process - schema: - type: string content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithDevice' - /media/grabbers/operations/{operationId}: - delete: - summary: Cancel an existing grab - operationId: cancelGrab - description: |- - Cancels an existing media grab (recording). It can be used to resolve a conflict which exists for a rolling subscription. - Note: This cancellation does not persist across a server restart, but neither does a rolling subscription itself. + $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '404': + description: Playlist not found (or user may not have permission to access playlist) + content: + text/html: + schema: + type: string + put: + operationId: updatePlaylist + summary: Editing a Playlist tags: - - Subscriptions + - Library Playlists + description: Edits a playlist in the same manner as [editing metadata](#tag/Provider/operation/metadataPutItem) parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -9991,28 +48300,29 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: operationId - description: The ID of the operation. + - name: playlistId + description: The ID of the playlist in: path required: true schema: - type: string + type: integer responses: - '200': - $ref: '#/components/responses/200' - '403': - description: User is not owner of the grab and not the admin - content: - text/html: {} + '204': + $ref: "#/components/responses/204" + description: Successfully completed editing a playlist '404': - $ref: '#/components/responses/404' - /media/providers/{provider}: - delete: - summary: Delete a media provider - operationId: deleteMediaProvider - description: Deletes a media provider with the given id + description: Playlist not found (or user may not have permission to access playlist) + content: + text/html: + schema: + type: string + /playlists/{playlistId}/generators: + get: + operationId: getPlaylistGenerators + summary: Get a playlist's generators tags: - - Provider + - Library Playlists + description: Get all the generators in a playlist parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10025,28 +48335,80 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: provider - description: The ID of the media provider to delete + - name: playlistId + description: The ID of the playlist in: path required: true schema: - type: string + type: integer responses: '200': - $ref: '#/components/responses/200' - '400': - $ref: '#/components/responses/400' - '403': - description: Cannot delete a provider which is a child of another provider + description: OK content: - text/html: {} - /media/subscriptions/{subscriptionId}: + application/json: + schema: + type: object + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + PlayQueueGenerator: + type: array + items: + type: object + properties: + type: + description: |- + The type of playlist generator. + + - -1: A smart playlist generator + - 42: A optimized version generator + type: integer + enum: + - -1 + - 42 + changedAt: + type: integer + createdAt: + type: integer + id: + type: integer + playlistID: + type: integer + updatedAt: + type: integer + uri: + description: The URI indicating the search for this generator + type: string + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + PlayQueueGenerator: + - type: 1 + changedAt: 1 + createdAt: 1 + id: 1 + playlistID: 1 + updatedAt: 1 + uri: example + '404': + description: Playlist not found (or user may not have permission to access playlist) or generator not found + content: + text/html: + schema: + type: string + /playlists/{playlistId}/items: delete: - summary: Delete a subscription - operationId: deleteSubscription - description: Delete a subscription, cancelling all of its grabs as well + operationId: clearPlaylistItems + summary: Clearing a playlist tags: - - Subscriptions + - Library Playlists + description: Clears a playlist, only works with dumb playlists. Returns the playlist. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10059,28 +48421,41 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: subscriptionId + - name: playlistId + description: The ID of the playlist in: path required: true schema: type: integer responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/slash-post-responses-200" + description: Successfully deleted clearing a playlist + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': - $ref: '#/components/responses/400' - '403': - description: User cannot access DVR on this server or cannot access this subscription + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} + text/html: + schema: + type: string '404': - $ref: '#/components/responses/404' + description: Playlist not found (or user may not have permission to access playlist) + content: + text/html: + schema: + type: string get: - summary: Get a single subscription - operationId: getSubscription - description: Get a single subscription and potentially the grabs too + operationId: getPlaylistItems + summary: Retrieve Playlist Contents tags: - - Subscriptions + - Playlist + description: 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. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10093,42 +48468,371 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: subscriptionId + - name: playlistId + description: The ID of the playlist in: path required: true schema: type: integer - - name: includeGrabs - description: Indicates whether the active grabs should be included as well - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: includeStorage - description: Compute the storage of recorded items desired by this subscription + - name: type + description: The metadata types of the item to return. Values past the first are only used in fetching items from the background processing playlist. in: query + explode: false schema: - $ref: "#/components/schemas/BoolInt" + type: array + items: + type: integer + x-speakeasy-name-override: mediaType responses: '200': description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithSubscription' - '400': - $ref: '#/components/responses/400' - '403': - description: User cannot access DVR on this server or cannot access this subscription - content: - text/html: {} + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '404': - $ref: '#/components/responses/404' + description: Playlist not found (or user may not have permission to access playlist) + content: + text/html: + schema: + type: string put: - summary: Edit a subscription - operationId: editSubscriptionPreferences - description: Edit a subscription's preferences + operationId: addPlaylistItems + summary: Adding to a Playlist tags: - - Subscriptions + - Library Playlists + description: 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. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10141,43 +48845,52 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: subscriptionId + - name: playlistId + description: The ID of the playlist in: path required: true schema: type: integer - - name: prefs + - name: uri + description: The content URI for the playlist. in: query - style: deepObject schema: - type: object - example: - minVideoQuality: 720 + type: string + - name: playQueueID + description: The play queue to add to a playlist. + in: query + schema: + type: integer responses: '200': - description: OK + $ref: "#/components/responses/slash-post-responses-200" + description: Successfully updated adding to a playlist content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithSubscription' + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': - $ref: '#/components/responses/400' - '403': - description: User cannot access DVR on this server or cannot access this subscription + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} + text/html: + schema: + type: string '404': - $ref: '#/components/responses/404' - /media/subscriptions/{subscriptionId}/move: - put: - summary: Re-order a subscription - operationId: reorderSubscription - description: Re-order a subscription to change its priority + description: Playlist not found (or user may not have permission to access playlist) + content: + text/html: + schema: + type: string + /playQueues/{playQueueId}: + get: + operationId: getPlayQueue + summary: Retrieve a play queue tags: - - Subscriptions - security: - - token: - - admin + - Play Queue + description: Retrieves the play queue, centered at current item. This can be treated as a regular container by play queue-oblivious clients, but they may wish to request a large window onto the queue since they won't know to refresh. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10190,38 +48903,73 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: subscriptionId + - name: playQueueId + description: The ID of the play queue. in: path required: true schema: type: integer - - name: after - description: The subscription to move this sub after. If missing will insert at the beginning of the list + - name: own + description: If the server should transfer ownership to the requesting client (used in remote control scenarios). + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: center + description: The play queue item ID for the center of the window - this doesn't change the current selected item. + in: query + schema: + type: string + - name: window + description: How many items on each side of the center of the window in: query schema: type: integer + - name: includeBefore + description: Whether to include the items before the center (if 0, center is not included either), defaults to 1. + in: query + schema: + $ref: "#/components/schemas/BoolInt" + - name: includeAfter + description: Whether to include the items after the center (if 0, center is not included either), defaults to 1. + in: query + schema: + $ref: "#/components/schemas/BoolInt" responses: '200': - description: OK + description: The play queue content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithSubscription' + $ref: "#/components/schemas/PlayQueueResponse" + example: + playQueueID: 1 + playQueueLastAddedItemID: string value + playQueueSelectedItemID: 1 + playQueueSelectedItemOffset: 1 + playQueueSelectedMetadataItemID: 1 + playQueueShuffled: true + playQueueSourceURI: string value + playQueueTotalCount: 1 + playQueueVersion: 1 '400': - $ref: '#/components/responses/400' - '403': - description: User cannot access DVR on this server or cannot access this subscription + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} + text/html: + schema: + type: string '404': - $ref: '#/components/responses/404' - /playlists/{playlistId}: - delete: - summary: Delete a Playlist - operationId: deletePlaylist - description: Deletes a playlist by provided id + description: Play queue not found + content: + text/html: + schema: + type: string + put: + operationId: addToPlayQueue + summary: Add a generator or playlist to a play queue tags: - - Library Playlists + - Play Queue + description: Adds an item to a play queue (e.g. party mode). Increments the version of the play queue. Takes the following parameters (`uri` and `playlistID` are mutually exclusive). Returns the modified play queue. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10234,27 +48982,57 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: playlistId - description: The ID of the playlist + - name: playQueueId + description: The ID of the play queue. in: path required: true schema: type: integer + - name: uri + description: The content URI for what we're adding to the queue. + in: query + schema: + type: string + - name: playlistID + description: The ID of the playlist to add to the playQueue. + in: query + schema: + type: string + - name: next + description: Play this item next (defaults to 0 - queueing at the end of manually queued items). + in: query + schema: + $ref: "#/components/schemas/BoolInt" responses: - '204': - $ref: '#/components/responses/204' + '200': + $ref: "#/components/responses/slash-post-responses-200" + description: Successfully updated add a generator or playlist to a play queue + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string '404': - description: Playlist not found (or user may not have permission to access playlist) + description: Play queue not found content: - text/html: {} - get: - summary: Retrieve Playlist - operationId: getPlaylist - description: |- - 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. + text/html: + schema: + type: string + /playQueues/{playQueueId}/items: + delete: + operationId: clearPlayQueue + summary: Clear a play queue tags: - - Playlist + - Play Queue + description: Deletes all items in the play queue, and increases the version of the play queue. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10267,8 +49045,8 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: playlistId - description: The ID of the playlist + - name: playQueueId + description: The ID of the play queue. in: path required: true schema: @@ -10279,17 +49057,350 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithPlaylistMetadata' - '404': - description: Playlist not found (or user may not have permission to access playlist) + $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - text/html: {} + text/html: + schema: + type: string + /playQueues/{playQueueId}/reset: put: - summary: Editing a Playlist - operationId: updatePlaylist - description: Edits a playlist in the same manner as [editing metadata](#tag/Provider/operation/metadataPutItem) + operationId: resetPlayQueue + summary: Reset a play queue tags: - - Library Playlists + - Play Queue + description: Reset a play queue to the first item being the current item parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10302,26 +49413,42 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: playlistId - description: The ID of the playlist + - name: playQueueId + description: The ID of the play queue. in: path required: true schema: type: integer responses: - '204': - $ref: '#/components/responses/204' + '200': + $ref: "#/components/responses/slash-post-responses-200" + description: Successfully updated reset a play queue + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string '404': - description: Playlist not found (or user may not have permission to access playlist) + description: Play queue not found content: - text/html: {} - /playlists/{playlistId}/generators: - get: - summary: Get a playlist's generators - operationId: getPlaylistGenerators - description: Get all the generators in a playlist + text/html: + schema: + type: string + /playQueues/{playQueueId}/shuffle: + put: + operationId: shuffle + summary: Shuffle a play queue tags: - - Library Playlists + - Play Queue + description: Shuffle a play queue (or reshuffles if already shuffled). The currently selected item is maintained. Note that this is currently only supported for play queues *without* an Up Next area. Returns the modified play queue. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10334,8 +49461,8 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: playlistId - description: The ID of the playlist + - name: playQueueId + description: The ID of the play queue. in: path required: true schema: @@ -10346,52 +49473,349 @@ paths: content: application/json: schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - PlayQueueGenerator: - items: - properties: - changedAt: - type: integer - createdAt: - type: integer - id: - type: integer - playlistID: - type: integer - type: - description: | - The type of playlist generator. - - - -1: A smart playlist generator - - 42: A optimized version generator - enum: - - -1 - - 42 - type: integer - updatedAt: - type: integer - uri: - description: The URI indicating the search for this generator - type: string - type: object - type: array - type: object - type: object + $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string '404': - description: Playlist not found (or user may not have permission to access playlist) or generator not found + description: Play queue not found or current item not found content: - text/html: {} - /playlists/{playlistId}/items: - delete: - summary: Clearing a playlist - operationId: clearPlaylistItems - description: Clears a playlist, only works with dumb playlists. Returns the playlist. + text/html: + schema: + type: string + /playQueues/{playQueueId}/unshuffle: + put: + operationId: unshuffle + summary: Unshuffle a play queue tags: - - Library Playlists + - Play Queue + description: Unshuffles a play queue and restores "natural order". Note that this is currently only supported for play queues *without* an Up Next area. Returns the modified play queue. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10404,27 +49828,44 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: playlistId - description: The ID of the playlist + - name: playQueueId + description: The ID of the play queue. in: path required: true schema: type: integer responses: '200': - $ref: '#/components/responses/slash-post-responses-200' + $ref: "#/components/responses/slash-post-responses-200" + description: Successfully updated unshuffle a play queue + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string '404': - description: Playlist not found (or user may not have permission to access playlist) + description: Play queue not found or current item not found content: - text/html: {} + text/html: + schema: + type: string + /servers/{machineId}: get: - summary: Retrieve Playlist Contents - operationId: getPlaylistItems - description: 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. + operationId: getServerDetails + summary: Get Server Details tags: - - Playlist + - Users + description: Get server details for sharing. + servers: + - url: https://plex.tv/api parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10437,46 +49878,100 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: playlistId - description: The ID of the playlist + - name: machineId + description: The unique machine identifier of the server in: path required: true schema: - type: integer - - name: type - description: The metadata types of the item to return. Values past the first are only used in fetching items from the background processing playlist. - in: query - explode: false - schema: - type: array - items: - type: integer + type: string responses: '200': description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available - schema: - type: integer content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' - '404': - description: Playlist not found (or user may not have permission to access playlist) + $ref: "#/components/schemas/ServerConfiguration" + example: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + allowCameraUpload: true + allowChannelAccess: true + allowMediaDeletion: true + allowSharing: true + allowSync: true + allowTuners: true + backgroundProcessing: true + certificate: true + companionProxy: true + countryCode: example + diagnostics: + - example + eventStream: true + friendlyName: example + hubSearch: true + itemClusters: true + livetv: 7 + machineIdentifier: 0123456789abcdef0123456789abcdef012345678 + mediaProviders: true + multiuser: true + musicAnalysis: 2 + myPlex: true + myPlexMappingState: mapped + myPlexSigninState: ok + myPlexSubscription: true + myPlexUsername: example + offlineTranscode: 1 + ownerFeatures: + - example + platform: example + platformVersion: example + pluginHost: true + pushNotifications: true + readOnlyLibraries: true + streamingBrainABRVersion: 1 + streamingBrainVersion: 1 + sync: true + transcoderActiveVideoSessions: 1 + transcoderAudio: true + transcoderLyrics: true + transcoderPhoto: true + transcoderSubtitles: true + transcoderVideo: true + transcoderVideoBitrates: + - example + transcoderVideoQualities: + - example + transcoderVideoResolutions: + - example + updatedAt: 1 + updater: true + version: example + voiceSearch: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - put: - summary: Adding to a Playlist - operationId: addPlaylistItems - description: 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. + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /servers/{machineId}/shared_servers: + post: + operationId: shareServerLegacy + summary: Share Server (Legacy v1) tags: - - Library Playlists + - Users + description: Share a library with a friend (legacy v1 XML endpoint). + servers: + - url: https://plex.tv/api parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10489,38 +49984,45 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: playlistId - description: The ID of the playlist + - name: machineId + description: The unique machine identifier of the server in: path required: true - schema: - type: integer - - name: uri - description: The content URI for the playlist. - in: query schema: type: string - - name: playQueueID - description: The play queue to add to a playlist. - in: query - schema: - type: integer responses: '200': - $ref: '#/components/responses/slash-post-responses-200' + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': - $ref: '#/components/responses/400' - '404': - description: Playlist not found (or user may not have permission to access playlist) + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - /playQueues/{playQueueId}: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /services/browse/{base64path}: get: - summary: Retrieve a play queue - operationId: getPlayQueue - description: Retrieves the play queue, centered at current item. This can be treated as a regular container by play queue-oblivious clients, but they may wish to request a large window onto the queue since they won't know to refresh. + operationId: browseFilesystemPath + summary: Browse Filesystem Path tags: - - Play Queue + - General + description: Browse a specific filesystem path. + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10533,52 +50035,70 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: playQueueId - description: The ID of the play queue. + - name: base64path + description: The base64path in: path required: true - schema: - type: integer - - name: own - description: If the server should transfer ownership to the requesting client (used in remote control scenarios). - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: center - description: The play queue item ID for the center of the window - this doesn't change the current selected item. - in: query schema: type: string - - name: window - description: How many items on each side of the center of the window - in: query - schema: - type: integer - - name: includeBefore - description: Whether to include the items before the center (if 0, center is not included either), defaults to 1. - in: query - schema: - $ref: "#/components/schemas/BoolInt" - - name: includeAfter - description: Whether to include the items after the center (if 0, center is not included either), defaults to 1. - in: query - schema: - $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/slash-post-responses-200' + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value '400': - $ref: '#/components/responses/400' - '404': - description: Play queue not found + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - put: - summary: Add a generator or playlist to a play queue - operationId: addToPlayQueue - description: Adds an item to a play queue (e.g. party mode). Increments the version of the play queue. Takes the following parameters (`uri` and `playlistID` are mutually exclusive). Returns the modified play queue. + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /sharings/{userId}: + delete: + operationId: removeShare + summary: Remove Share tags: - - Play Queue + - Users + description: Remove a share / friend. + servers: + - url: https://plex.tv/api/v2 parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10591,43 +50111,43 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: playQueueId - description: The ID of the play queue. + - name: userId + description: The unique identifier of the user in: path required: true schema: type: integer - - name: uri - description: The content URI for what we're adding to the queue. - in: query - schema: - type: string - - name: playlistID - description: The ID of the playlist to add to the playQueue. - in: query - schema: - type: string - - name: next - description: Play this item next (defaults to 0 - queueing at the end of manually queued items). - in: query - schema: - $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/slash-post-responses-200' + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': - $ref: '#/components/responses/400' - '404': - description: Play queue not found + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - /playQueues/{playQueueId}/items: - delete: - summary: Clear a play queue - operationId: clearPlayQueue - description: Deletes all items in the play queue, and increases the version of the play queue. + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + put: + operationId: updateShare + summary: Update Share tags: - - Play Queue + - Users + description: Update friend filters (allowSync, filterMovies, etc.). + servers: + - url: https://plex.tv/api/v2 parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10640,8 +50160,8 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: playQueueId - description: The ID of the play queue. + - name: userId + description: The unique identifier of the user in: path required: true schema: @@ -10652,14 +50172,33 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithPlaylistMetadata' - /playQueues/{playQueueId}/reset: - put: - summary: Reset a play queue - operationId: resetPlayQueue - description: Reset a play queue to the first item being the current item + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /status/sessions/history/{historyId}: + delete: + operationId: deleteHistory + summary: Delete Single History Item tags: - - Play Queue + - Status + description: Delete a single history item by id + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10672,28 +50211,48 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: playQueueId - description: The ID of the play queue. + - name: historyId + description: The id of the history item (the `historyKey` from above) in: path required: true schema: type: integer responses: '200': - $ref: '#/components/responses/slash-post-responses-200' - '400': - $ref: '#/components/responses/400' + description: OK + headers: + X-Plex-Container-Start: + description: Provided on all MediaContainer objects indicating the offset of where this container page starts + schema: + type: integer + X-Plex-Container-Total-Size: + description: Provided on all MediaContainer objects indicating the total size of objects available + schema: + type: integer + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainer" + example: + identifier: example + offset: 1 + size: 1 + totalSize: 1 '404': - description: Play queue not found + description: History item not found content: - text/html: {} - /playQueues/{playQueueId}/shuffle: - put: - summary: Shuffle a play queue - operationId: shuffle - description: Shuffle a play queue (or reshuffles if already shuffled). The currently selected item is maintained. Note that this is currently only supported for play queues *without* an Up Next area. Returns the modified play queue. + text/html: + schema: + type: string + get: + operationId: getHistoryItem + summary: Get Single History Item tags: - - Play Queue + - Status + description: Get a single history item by id + security: + - token: + - admin parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10706,32 +50265,50 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: playQueueId - description: The ID of the play queue. + - name: historyId + description: The id of the history item (the `historyKey` from above) in: path required: true schema: type: integer responses: '200': - description: OK + $ref: "#/components/responses/historyAll-get-responses-200" + description: Successfully retrieved get single history item content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithPlaylistMetadata' - '400': - $ref: '#/components/responses/400' + $ref: "#/components/schemas/PlaybackHistoryMetadata" + example: + title: string value + type: string value + accountID: 1 + deviceID: 1 + grandparentRatingKey: string value + grandparentTitle: string value + historyKey: string value + index: 1 + key: string value + librarySectionID: string value + originallyAvailableAt: string value + parentIndex: 1 + parentTitle: string value + ratingKey: string value + thumb: string value + viewedAt: 1 '404': - description: Play queue not found or current item not found + description: History item not found content: - text/html: {} - /playQueues/{playQueueId}/unshuffle: - put: - summary: Unshuffle a play queue - operationId: unshuffle - description: Unshuffles a play queue and restores "natural order". Note that this is currently only supported for play queues *without* an Up Next area. Returns the modified play queue. + text/html: + schema: + type: string + /sync/items/{syncId}: + get: + operationId: getSyncItem + summary: Get Sync Item tags: - - Play Queue + - General + description: Get sync item details. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10744,28 +50321,68 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: playQueueId - description: The ID of the play queue. + - name: syncId + description: The unique identifier of the sync item in: path required: true schema: type: integer responses: '200': - $ref: '#/components/responses/slash-post-responses-200' + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value '400': - $ref: '#/components/responses/400' - '404': - description: Play queue not found or current item not found + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request content: - text/html: {} - /status/sessions/history/{historyId}: - delete: - summary: Delete Single History Item - operationId: deleteHistory - description: Delete a single history item by id + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /system/agents/{agentId}: + get: + operationId: getMetadataAgentDetails + summary: Get Metadata Agent Details tags: - - Status + - General + description: Get details and settings for a specific metadata agent. security: - token: - admin @@ -10781,41 +50398,70 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: historyId - description: The id of the history item (the `historyKey` from above) + - name: agentId + description: The unique identifier of the metadata agent in: path required: true schema: - type: integer + type: string responses: '200': description: OK - headers: - X-Plex-Container-Start: - description: Provided on all MediaContainer objects indicating the offset of where this container page starts - schema: - type: integer - X-Plex-Container-Total-Size: - description: Provided on all MediaContainer objects indicating the total size of objects available - schema: - type: integer content: application/json: schema: - $ref: '#/components/schemas/MediaContainer' - '404': - description: History item not found + $ref: "#/components/schemas/MediaContainerWithDirectory" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - text/html: {} + text/html: + schema: + type: string + /user/{uuid}/settings/opt_outs: get: - summary: Get Single History Item - operationId: getHistoryItem - description: Get a single history item by id + operationId: getUserOptOuts + summary: Get User Opt-Outs tags: - - Status - security: - - token: - - admin + - Users + description: Get online media source opt-out settings for a user. + servers: + - url: https://plex.tv/api/v2 parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10828,27 +50474,46 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - name: historyId - description: The id of the history item (the `historyKey` from above) + - name: uuid + description: The universally unique identifier in: path required: true schema: - type: integer + type: string responses: '200': - $ref: '#/components/responses/historyAll-get-responses-200' - '404': - description: History item not found + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/UserOptOutsResponse" + example: + optOuts: + - type: string value + id: string value + value: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid content: - text/html: {} + text/html: + schema: + type: string /{transcodeType}/:/transcode/universal/start.{extension}: get: - summary: Start A Transcoding Session operationId: startTranscodeSession - x-speakeasy-usage-example: true - description: Starts the transcoder and returns the corresponding streaming resource document. + summary: Start A Transcoding Session tags: - Transcoder + x-speakeasy-usage-example: true + description: Starts the transcoder and returns the corresponding streaming resource document. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -10861,10 +50526,16 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - - $ref: '#/components/parameters/transcodeType' - - $ref: '#/components/parameters/transcodeSessionId' + - $ref: "#/components/parameters/transcodeType" + - $ref: "#/components/parameters/transcodeSessionId" + - $ref: "#/components/parameters/advancedSubtitles" + - name: platform + description: Client platform (some clients send this in addition to headers). + in: query + schema: + type: string - name: extension - description: "Extension \n" + description: Extension in: path required: true schema: @@ -10872,21 +50543,20 @@ paths: enum: - m3u8 - mpd - - $ref: '#/components/parameters/advancedSubtitles' - name: audioBoost description: Percentage of original audio loudness to use when transcoding (100 is equivalent to original volume, 50 is half, 200 is double, etc) in: query schema: - minimum: 1 type: integer + minimum: 1 example: 50 - name: audioChannelCount description: Target video number of audio channels. in: query schema: - maximum: 8 - minimum: 1 type: integer + minimum: 1 + maximum: 8 example: 5 - name: autoAdjustQuality description: Indicates the client supports ABR. @@ -10956,8 +50626,8 @@ paths: description: Target bitrate for audio only files (in kbps, used to transcode). in: query schema: - minimum: 0 type: integer + minimum: 0 example: 5000 - name: offset description: Offset from the start of the media (in seconds). @@ -10981,8 +50651,8 @@ paths: description: Maximum bitrate (in kbps) to use in ABR. in: query schema: - minimum: 0 type: integer + minimum: 0 example: 12000 - name: photoResolution description: Target photo resolution. @@ -10992,8 +50662,7 @@ paths: pattern: ^\d[x:]\d$ example: 1080x1080 - name: protocol - description: | - Indicates the network streaming protocol to be used for the transcode session: * 'http' - include the file in the http response such as MKV streaming * 'hls' - hls stream (RFC 8216) * 'dash' - dash stream (ISO/IEC 23009-1:2022) + description: "Indicates the network streaming protocol to be used for the transcode session: * 'http' - include the file in the http response such as MKV streaming * 'hls' - hls stream (RFC 8216) * 'dash' - dash stream (ISO/IEC 23009-1:2022)" in: query schema: type: string @@ -11012,12 +50681,11 @@ paths: description: Percentage of original subtitle size to use when burning subtitles (100 is equivalent to original size, 50 is half, ect) in: query schema: - minimum: 1 type: integer + minimum: 1 example: 50 - name: subtitles - description: | - Indicates how subtitles should be included: * 'auto' - Compute the appropriate subtitle setting automatically * 'burn' - Burn the selected subtitle; auto if no selected subtitle * 'none' - Ignore all subtitle streams * 'sidecar' - The selected subtitle should be provided as a sidecar * 'embedded' - The selected subtitle should be provided as an embedded stream * 'segmented' - The selected subtitle should be provided as a segmented stream + description: "Indicates how subtitles should be included: * 'auto' - Compute the appropriate subtitle setting automatically * 'burn' - Burn the selected subtitle; auto if no selected subtitle * 'none' - Ignore all subtitle streams * 'sidecar' - The selected subtitle should be provided as a sidecar * 'embedded' - The selected subtitle should be provided as an embedded stream * 'segmented' - The selected subtitle should be provided as a segmented stream" in: query schema: type: string @@ -11029,29 +50697,37 @@ paths: - embedded - segmented - unknown - example: Burn + example: burn + - name: maxVideoBitrate + description: Client-side maximum video bitrate cap in kbps + in: query + schema: + type: integer + - name: videoResolution + description: Cap resolution string (e.g. 1920x1080) + in: query + schema: + type: string + - name: copyts + description: Copy timestamps instead of re-encoding them + in: query + schema: + $ref: "#/components/schemas/BoolInt" - name: videoBitrate description: Target video bitrate (in kbps). in: query schema: - minimum: 0 type: integer + minimum: 0 example: 12000 - name: videoQuality description: Target photo quality. in: query schema: - maximum: 99 - minimum: 0 type: integer + minimum: 0 + maximum: 99 example: 50 - - name: videoResolution - description: Target maximum video resolution. - in: query - schema: - type: string - pattern: ^\d[x:]\d$ - example: 1080x1080 - name: X-Plex-Client-Identifier description: Unique per client. in: header @@ -11104,11 +50780,15 @@ paths: description: MPD file (see ISO/IEC 23009-1:2022), m3u8 file (see RFC 8216), or binary http stream content: application/vnd.apple.mpegurl: + schema: + $ref: "#/components/schemas/BinaryResponse" example: | #EXTM3U #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=3538000,RESOLUTION=1280x720,FRAME-RATE=60.000000 session/32635662-0d05-4acd-8f72-512cc64396d4/base/index.m3u8 text/html: + schema: + $ref: "#/components/schemas/BinaryResponse" example: | video/x-matroska: schema: - format: binary type: string + format: binary '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string '403': - $ref: '#/components/responses/403' + $ref: "#/components/responses/403" + description: Forbidden - User does not have permission to access this resource + content: + text/html: + schema: + type: string '404': - $ref: '#/components/responses/404' + $ref: "#/components/responses/404" + description: Not Found - The requested resource does not exist + content: + text/html: + schema: + type: string /downloadQueue/{queueId}/item/{itemId}/decision: get: - summary: Grab download queue item decision operationId: getItemDecision - description: | + summary: Grab download queue item decision + tags: + - Download Queue + description: |- Available: 0.2.0 Grab the decision for a download queue item - tags: - - Download Queue parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -11187,21 +50882,354 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithDecision' + $ref: "#/components/schemas/MediaContainerWithDecision" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + availableBandwidth: 1 + directPlayDecisionCode: 1 + directPlayDecisionText: example + generalDecisionCode: 1 + generalDecisionText: example + mdeDecisionCode: 1 + mdeDecisionText: example + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + transcodeDecisionCode: 1 + transcodeDecisionText: example '400': description: The item is not in a state where a decision is available content: - text/html: {} + text/html: + schema: + type: string /downloadQueue/{queueId}/item/{itemId}/media: get: - summary: Grab download queue media operationId: getDownloadQueueMedia - description: | + summary: Grab download queue media + tags: + - Download Queue + description: |- Available: 0.2.0 Grab the media for a download queue item - tags: - - Download Queue parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -11230,8 +51258,12 @@ paths: responses: '200': description: The raw media file + content: + application/octet-stream: + schema: + $ref: "#/components/schemas/BinaryResponse" '503': - description: | + description: |- ![503](https://http.cat/503.jpg) The queue item is not yet complete and is currently transcoding or waiting to transcode @@ -11240,13 +51272,17 @@ paths: description: The estimated time before completion or -1 if unknown schema: type: integer + content: + text/html: + schema: + type: string /downloadQueue/{queueId}/items/{itemId}: delete: - summary: Delete download queue items operationId: removeDownloadQueueItems - description: delete items from a download queue + summary: Delete download queue items tags: - Download Queue + description: delete items from a download queue parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -11280,16 +51316,35 @@ paths: - 23 responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" + description: Successfully deleted delete download queue items + content: + application/octet-stream: + schema: + $ref: "#/components/schemas/BinaryResponse" + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string get: - summary: Get download queue items operationId: getDownloadQueueItems - description: | + summary: Get download queue items + tags: + - Download Queue + description: |- Available: 0.2.0 Get items from a download queue - tags: - - Download Queue parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -11327,82 +51382,79 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: DownloadQueueItem: - items: - properties: - DecisionResult: - properties: - availableBandwidth: - description: The maximum bitrate set when item was added - type: integer - directPlayDecisionCode: - type: integer - directPlayDecisionText: - type: string - generalDecisionCode: - type: integer - generalDecisionText: - type: string - mdeDecisionCode: - description: The code indicating the status of evaluation of playback when client indicates `hasMDE=1` - type: integer - mdeDecisionText: - description: Descriptive text for the above code - type: string - transcodeDecisionCode: - type: integer - transcodeDecisionText: - type: string - type: object - error: - description: The error encountered in transcoding or decision - type: string - id: - type: integer - key: - type: string - queueId: - type: integer - status: - description: | - The state of the item: - - deciding: The item decision is pending - - waiting: The item is waiting for transcode - - processing: The item is being transcoded - - available: The item is available for download - - error: The item encountered an error in the decision or transcode - - expired: The transcoded item has timed out and is no longer available - enum: - - deciding - - waiting - - processing - - available - - error - - expired - type: string - transcode: - description: The transcode session object which is not yet documented otherwise it'd be a $ref here. - type: object - TranscodeSession: - $ref: '#/components/schemas/TranscodeSession' - type: object type: array - type: object + items: + $ref: "#/components/schemas/DownloadQueueItem" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + DownloadQueueItem: + - DecisionResult: + availableBandwidth: 1 + directPlayDecisionCode: 1 + directPlayDecisionText: string value + generalDecisionCode: 1 + generalDecisionText: string value + mdeDecisionCode: 1 + mdeDecisionText: string value + transcodeDecisionCode: 1 + transcodeDecisionText: string value + error: string value + id: 1 + key: string value + queueId: 1 + status: deciding + transcode: {} + TranscodeSession: + complete: true + context: string value + duration: 1 + error: true + key: string value + progress: 1 + protocol: string value + size: 1 + sourceAudioCodec: string value + sourceVideoCodec: string value + speed: 1 + throttled: true + transcodeHwFullPipeline: true + transcodeHwRequested: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string /downloadQueue/{queueId}/items/{itemId}/restart: post: - summary: Restart processing of items from the decision operationId: restartProcessingDownloadQueueItems - description: | + summary: Restart processing of items from the decision + tags: + - Download Queue + description: |- Available: 0.2.0 Reprocess download queue items with previous decision parameters - tags: - - Download Queue parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -11436,14 +51488,33 @@ paths: - 23 responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" + description: Successfully created/executed restart processing of items from the decision + content: + application/octet-stream: + schema: + $ref: "#/components/schemas/BinaryResponse" + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string /hubs/sections/{sectionId}/manage/{identifier}: delete: - summary: Delete a custom hub operationId: deleteCustomHub - description: Delete a custom hub from the server + summary: Delete a custom hub tags: - Hubs + description: Delete a custom hub from the server security: - token: - admin @@ -11473,23 +51544,39 @@ paths: type: string responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" + description: Successfully deleted delete a custom hub + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': description: The hub is not a custom hub content: - text/html: {} + text/html: + schema: + type: string '403': - $ref: '#/components/responses/403' + $ref: "#/components/responses/403" + description: Forbidden - User does not have permission to access this resource + content: + text/html: + schema: + type: string '404': description: The section or hub was not found content: - text/html: {} + text/html: + schema: + type: string put: - summary: Change hub visibility operationId: updateHubVisibility - description: Changed the visibility of a hub for both the admin and shared users + summary: Change hub visibility tags: - Hubs + description: Changed the visibility of a hub for both the admin and shared users security: - token: - admin @@ -11534,20 +51621,34 @@ paths: $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" + description: Successfully updated change hub visibility + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '403': - $ref: '#/components/responses/403' + $ref: "#/components/responses/403" + description: Forbidden - User does not have permission to access this resource + content: + text/html: + schema: + type: string '404': description: Section id was not found content: - text/html: {} + text/html: + schema: + type: string /library/collections/{collectionId}/composite/{updatedAt}: get: - summary: Get a collection's image operationId: getCollectionImage - description: Get an image for the collection based on the items within + summary: Get a collection's image tags: - Content + description: Get an image for the collection based on the items within parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -11560,6 +51661,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/composite" - name: collectionId description: The collection id in: path @@ -11572,26 +51674,27 @@ paths: required: true schema: type: integer - - $ref: '#/components/parameters/composite' responses: '200': description: OK content: image/jpeg: schema: - format: binary type: string + format: binary '404': description: Collection not found content: - text/html: {} + text/html: + schema: + type: string /library/collections/{collectionId}/items/{itemId}: put: - summary: Delete an item from a collection - operationId: deleteCollectionItem - description: Delete an item from a collection + operationId: updateCollectionItem + summary: Update an item in a collection tags: - Library Collections + description: Delete an item from a collection security: - token: - admin @@ -11625,22 +51728,348 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': description: Item not found content: - text/html: {} + text/html: + schema: + type: string '404': description: Collection not found content: - text/html: {} + text/html: + schema: + type: string /library/collections/{collectionId}/items/{itemId}/move: put: - summary: Reorder an item in the collection operationId: moveCollectionItem - description: Reorder items in a collection with one item after another + summary: Reorder an item in the collection tags: - Library Collections + description: Reorder items in a collection with one item after another security: - token: - admin @@ -11679,22 +52108,348 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '400': description: Item not found content: - text/html: {} + text/html: + schema: + type: string '404': description: Collection not found content: - text/html: {} + text/html: + schema: + type: string /library/media/{mediaId}/chapterImages/{chapter}: get: - summary: Get a chapter image operationId: getChapterImage - description: Get a single chapter image for a piece of media + summary: Get a chapter image tags: - Library + description: Get a single chapter image for a piece of media parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -11725,21 +52480,23 @@ paths: content: image/jpeg: schema: - format: binary type: string + format: binary '404': description: Either the media item or the chapter image was not found content: - text/html: {} + text/html: + schema: + type: string /library/metadata/{ids}/{element}: post: - summary: Set an item's artwork, theme, etc operationId: setItemArtwork + summary: Set an item's artwork, theme, etc + tags: + - Library description: |- Set the artwork, thumb, element for a metadata item Generally only the admin can perform this action. The exception is if the metadata is a playlist created by the user - tags: - - Library parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -11753,11 +52510,13 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: type: string - name: element + description: The type of artwork element (e.g., art, poster, thumb) in: path required: true schema: @@ -11776,15 +52535,36 @@ paths: type: string responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" + description: Successfully created/executed set an item's artwork, theme, etc + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string put: - summary: Set an item's artwork, theme, etc operationId: updateItemArtwork + summary: Set an item's artwork, theme, etc + tags: + - Library description: |- Set the artwork, thumb, element for a metadata item Generally only the admin can perform this action. The exception is if the metadata is a playlist created by the user - tags: - - Library parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -11798,11 +52578,13 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: type: string - name: element + description: The type of artwork element (e.g., art, poster, thumb) in: path required: true schema: @@ -11821,14 +52603,35 @@ paths: type: string responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" + description: Successfully updated set an item's artwork, theme, etc + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string /library/metadata/{ids}/marker/{marker}: delete: - summary: Delete a marker operationId: deleteMarker - description: Delete a marker for this user on the metadata item + summary: Delete a marker tags: - Library + description: Delete a marker for this user on the metadata item parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -11842,32 +52645,45 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: type: string - name: marker + description: The marker identifier in: path required: true schema: type: string responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" + description: Successfully deleted delete a marker + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': description: Marker is not a bookmark content: - text/html: {} + text/html: + schema: + type: string '404': description: Marker could not be found content: - text/html: {} + text/html: + schema: + type: string put: - summary: Edit a marker operationId: editMarker - description: Edit a marker for this user on the metadata item + summary: Edit a marker tags: - Library + description: Edit a marker for this user on the metadata item parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -11881,6 +52697,7 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: @@ -11897,6 +52714,7 @@ paths: required: true schema: type: integer + x-speakeasy-name-override: mediaType - name: startTimeOffset description: The start time of the marker in: query @@ -11918,20 +52736,34 @@ paths: title: My favorite spot responses: '200': - $ref: '#/components/responses/post-responses-200' + $ref: "#/components/responses/post-responses-200" + description: Successfully updated edit a marker + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': - $ref: '#/components/responses/responses-400' + $ref: "#/components/responses/responses-400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string '404': description: The marker could not be found content: - text/html: {} + text/html: + schema: + type: string /library/metadata/{ids}/media/{mediaItem}: delete: - summary: Delete a media item operationId: deleteMediaItem - description: Delete a single media from a metadata item in the library + summary: Delete a media item tags: - Library + description: Delete a single media from a metadata item in the library security: - token: - admin @@ -11948,11 +52780,13 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: type: string - name: mediaItem + description: The mediaItem in: path required: true schema: @@ -11964,22 +52798,33 @@ paths: $ref: "#/components/schemas/BoolInt" responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" + description: Successfully deleted delete a media item + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': description: Media item could not be deleted content: - text/html: {} + text/html: + schema: + type: string '404': description: Media item could not be found content: - text/html: {} + text/html: + schema: + type: string /library/parts/{partId}/indexes/{index}: get: - summary: Get BIF index for a part operationId: getPartIndex - description: Get BIF index for a part by index type + summary: Get BIF index for a part tags: - Library + description: Get BIF index for a part by index type parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -12017,19 +52862,21 @@ paths: content: application/octet-stream: schema: - format: binary type: string + format: binary '404': description: The part or the index doesn't exist or the interval is too small content: - text/html: {} + text/html: + schema: + type: string /library/sections/{sectionId}/collection/{collectionId}: delete: - summary: Delete a collection operationId: deleteCollection - description: Delete a library collection from the PMS + summary: Delete a collection tags: - Library + description: Delete a library collection from the PMS security: - token: - admin @@ -12059,18 +52906,27 @@ paths: type: integer responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" + description: Successfully deleted delete a collection + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '404': description: Collection not found content: - text/html: {} + text/html: + schema: + type: string /library/sections/{sectionId}/composite/{updatedAt}: get: - summary: Get a section composite image operationId: getSectionImage - description: Get a composite image of images in this section + summary: Get a section composite image tags: - Library + description: Get a composite image of images in this section security: - token: - admin @@ -12086,6 +52942,8 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Vendor" - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" + - $ref: "#/components/parameters/mediaQuery" + - $ref: "#/components/parameters/composite" - name: sectionId description: Section identifier in: path @@ -12098,18 +52956,36 @@ paths: required: true schema: type: integer - - $ref: '#/components/parameters/mediaQuery' - - $ref: '#/components/parameters/composite' responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" + description: Successfully retrieved get a section composite image + content: + application/json: + schema: + $ref: "#/components/schemas/BinaryResponse" + example: + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string /library/streams/{streamId}.{ext}: delete: - summary: Delete a stream operationId: deleteStream - description: Delete a stream. Only applies to downloaded subtitle streams or a sidecar subtitle when media deletion is enabled. + summary: Delete a stream tags: - Library + description: Delete a stream. Only applies to downloaded subtitle streams or a sidecar subtitle when media deletion is enabled. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -12136,21 +53012,30 @@ paths: type: string responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" + description: Successfully deleted delete a stream + content: + application/octet-stream: + schema: + $ref: "#/components/schemas/BinaryResponse" '403': description: This user cannot delete this stream content: - text/html: {} + text/html: + schema: + type: string '500': description: The stream cannot be deleted content: - text/html: {} + text/html: + schema: + type: string get: - summary: Get a stream operationId: getStream - description: Get a stream (such as a sidecar subtitle stream) + summary: Get a stream tags: - Library + description: Get a stream (such as a sidecar subtitle stream) parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -12196,24 +53081,34 @@ paths: responses: '200': description: The stream in the requested format. + content: + application/octet-stream: + schema: + $ref: "#/components/schemas/BinaryResponse" '403': description: The media is not accessible to the user content: - text/html: {} + text/html: + schema: + type: string '404': description: The stream doesn't exist or has no data content: - text/html: {} + text/html: + schema: + type: string '501': description: The stream is not a sidecar subtitle content: - text/html: {} + text/html: + schema: + type: string put: - summary: Set a stream offset operationId: setStreamOffset - description: Set a stream offset in ms. This may not be respected by all clients + summary: Set a stream offset tags: - Library + description: Set a stream offset in ms. This may not be respected by all clients parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -12247,17 +53142,23 @@ paths: responses: '200': description: The stream in the requested format. + content: + application/octet-stream: + schema: + $ref: "#/components/schemas/BinaryResponse" '400': description: The stream doesn't exist content: - text/html: {} + text/html: + schema: + type: string /livetv/dvrs/{dvrId}/channels/{channel}/tune: post: - summary: Tune a channel on a DVR operationId: tuneChannel - description: Tune a channel on a DVR to the provided channel + summary: Tune a channel on a DVR tags: - DVRs + description: Tune a channel on a DVR to the provided channel parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -12298,18 +53199,342 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithMetadata' + $ref: "#/components/schemas/MediaContainerWithMetadata" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 '500': description: Tuning failed content: - text/html: {} + text/html: + schema: + type: string /livetv/dvrs/{dvrId}/devices/{deviceId}: delete: - summary: Remove a device from an existing DVR operationId: removeDeviceFromDVR - description: Remove a device from an existing DVR + summary: Remove a device from an existing DVR tags: - DVRs + description: Remove a device from an existing DVR security: - token: - admin @@ -12352,36 +53577,71 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainerWithStatus' - - properties: + - $ref: "#/components/schemas/MediaContainerWithStatus" + - type: object + properties: DVR: - items: - properties: - Device: - items: - $ref: '#/components/schemas/Device' - type: array - key: - type: string - language: - type: string - lineup: - type: string - uuid: - type: string - type: object type: array - type: object - type: object + items: + $ref: "#/components/schemas/DVR" + example: + MediaContainer: + DVR: + - Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value + key: string value + language: string value + lineup: string value + uuid: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string put: - summary: Add a device to an existing DVR operationId: addDeviceToDVR - description: Add a device to an existing DVR + summary: Add a device to an existing DVR tags: - DVRs + description: Add a device to an existing DVR security: - token: - admin @@ -12424,37 +53684,72 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainerWithStatus' - - properties: + - $ref: "#/components/schemas/MediaContainerWithStatus" + - type: object + properties: DVR: - items: - properties: - Device: - items: - $ref: '#/components/schemas/Device' - type: array - key: - type: string - language: - type: string - lineup: - type: string - uuid: - type: string - type: object type: array - type: object - type: object + items: + $ref: "#/components/schemas/DVR" + example: + MediaContainer: + DVR: + - Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value + key: string value + language: string value + lineup: string value + uuid: string value + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string /livetv/epg/countries/{country}/{epgId}/lineups: get: - summary: Get lineups for a country via postal code operationId: getCountriesLineups - description: Returns a list of lineups for a given country, EPG provider and postal code + summary: Get lineups for a country via postal code tags: - EPG + description: Returns a list of lineups for a given country, EPG provider and postal code parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -12490,18 +53785,35 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithLineup' + $ref: "#/components/schemas/MediaContainerWithLineup" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Lineup: + - title: string value + type: string value + identifier: string value + key: string value + lineupType: 1 + location: string value + uuid: string value + uuid: example '404': description: No provider with the identifier was found content: - text/html: {} + text/html: + schema: + type: string /livetv/epg/countries/{country}/{epgId}/regions: get: - summary: Get regions for a country operationId: getCountryRegions - description: Get regions for a country within an EPG provider + summary: Get regions for a country tags: - EPG + description: Get regions for a country within an EPG provider parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -12541,37 +53853,41 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: Country: - items: - properties: - key: - type: string - national: - type: boolean - title: - type: string - type: - type: string - type: object type: array - type: object - type: object + items: + $ref: "#/components/schemas/EPGRegion" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Country: + - title: string value + type: string value + key: string value + national: true '404': description: No provider with the identifier was found content: - text/html: {} + text/html: + schema: + type: string /livetv/sessions/{sessionId}/{consumerId}/index.m3u8: get: - summary: Get a session playlist index operationId: getSessionPlaylistIndex - description: Get a playlist index for playing this session + summary: Get a session playlist index tags: - Live TV + description: Get a playlist index for playing this session parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -12600,16 +53916,22 @@ paths: '200': description: Index playlist for playing HLS content content: - application/vnd.apple.mpegurl: {} + application/vnd.apple.mpegurl: + schema: + $ref: "#/components/schemas/BinaryResponse" '404': description: Session or consumer not found + content: + text/html: + schema: + type: string /media/grabbers/devices/{deviceId}/thumb/{version}: get: - summary: Get device thumb operationId: getThumb - description: Get a device's thumb for display to the user + summary: Get device thumb tags: - Devices + description: Get a device's thumb for display to the user security: - token: - admin @@ -12640,19 +53962,29 @@ paths: responses: '200': description: The thumbnail for the device + content: + application/octet-stream: + schema: + $ref: "#/components/schemas/BinaryResponse" '301': description: The thumb URL on the device + content: + text/html: + schema: + type: string '404': description: No thumb found for this device content: - text/html: {} + text/html: + schema: + type: string /playlists/{playlistId}/items/{generatorId}: delete: - summary: Delete a Generator operationId: deletePlaylistItem - description: Deletes an item from a playlist. Only works with dumb playlists. + summary: Delete a Generator tags: - Library Playlists + description: Deletes an item from a playlist. Only works with dumb playlists. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -12679,19 +54011,33 @@ paths: type: integer responses: '200': - $ref: '#/components/responses/slash-post-responses-200' + $ref: "#/components/responses/slash-post-responses-200" + description: Successfully deleted delete a generator + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string '404': description: Playlist not found (or user may not have permission to access playlist) or generator not found content: - text/html: {} + text/html: + schema: + type: string get: - summary: Get a playlist generator operationId: getPlaylistGenerator - description: Get a playlist's generator. Only used for optimized versions + summary: Get a playlist generator tags: - Library Playlists + description: Get a playlist's generator. Only used for optimized versions parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -12722,34 +54068,48 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: Item: + type: array items: + type: object properties: + title: + type: string + type: + description: The type of this generator + type: integer + enum: + - -1 + - 42 composite: description: The composite thumbnail image path type: string Device: + type: object properties: profile: type: string - type: object id: type: integer Location: + type: object properties: librarySectionID: type: integer uri: type: string - type: object MediaSettings: + type: object properties: advancedSubtitles: + type: string enum: - auto - burn @@ -12757,7 +54117,6 @@ paths: - sidecar - embedded - segmented - type: string audioBoost: type: integer audioChannelCount: @@ -12781,14 +54140,15 @@ paths: peakBitrate: type: integer photoQuality: - maximum: 100 - minimum: 0 type: integer + minimum: 0 + maximum: 100 photoResolution: type: string secondsPerSegment: type: integer subtitles: + type: string enum: - auto - burn @@ -12796,33 +54156,32 @@ paths: - sidecar - embedded - segmented - type: string subtitleSize: type: integer videoBitrate: type: integer videoQuality: - maximum: 100 - minimum: 0 type: integer + minimum: 0 + maximum: 100 videoResolution: type: string - type: object Policy: + type: object properties: scope: + type: string enum: - all - count - type: string unwatched: description: True if only unwatched items are optimized type: boolean value: description: If the scope is count, the number of items to optimize type: integer - type: object Status: + type: object properties: itemsCompleteCount: type: integer @@ -12831,43 +54190,55 @@ paths: itemsSuccessfulCount: type: integer state: + type: string enum: - pending - complete - failed - type: string totalSize: type: integer - type: object target: type: string targetTagID: description: The tag of this generator's settings type: integer - title: - type: string - type: - description: The type of this generator - enum: - - -1 - - 42 - type: integer - type: object - type: array - type: object - type: object + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Item: + - title: example + type: 1 + composite: example + Device: {} + id: 1 + Location: {} + MediaSettings: {} + Policy: {} + Status: {} + target: example + targetTagID: 1 '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string '404': description: Playlist not found (or user may not have permission to access playlist) or generator not found content: - text/html: {} + text/html: + schema: + type: string put: - summary: Modify a Generator operationId: modifyPlaylistGenerator - description: Modify a playlist generator. Only used for optimizer + summary: Modify a Generator tags: - Library Playlists + description: Modify a playlist generator. Only used for optimizer parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -12893,7 +54264,7 @@ paths: schema: type: integer - name: Item - description: | + description: |- Note: OpenAPI cannot properly render this query parameter example ([See GHI](https://github.com/OAI/OpenAPI-Specification/issues/1706)). It should be rendered as: Item[type]=42&Item[title]=Jack-Jack Attack&Item[target]=&Item[targetTagID]=1&Item[locationID]=-1&Item[Location][uri]=library://82503060-0d68-4603-b594-8b071d54819e/item//library/metadata/146&Item[Policy][scope]=all&Item[Policy][value]=&Item[Policy][unwatched]=0 @@ -12903,6 +54274,10 @@ paths: schema: type: object properties: + title: + type: string + type: + type: integer Location: type: object properties: @@ -12913,8 +54288,6 @@ paths: Policy: type: object properties: - value: - type: integer scope: type: string enum: @@ -12922,14 +54295,12 @@ paths: - count unwatched: $ref: "#/components/schemas/BoolInt" + value: + type: integer target: type: string targetTagID: type: integer - title: - type: string - type: - type: integer example: Location: uri: library://82503060-0d68-4603-b594-8b071d54819e/item/%2Flibrary%2Fmetadata%2F146 @@ -12944,20 +54315,34 @@ paths: type: 42 responses: '200': - $ref: '#/components/responses/slash-post-responses-200' + $ref: "#/components/responses/slash-post-responses-200" + description: Successfully updated modify a generator + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string '404': description: Playlist not found (or user may not have permission to access playlist) or generator not found content: - text/html: {} + text/html: + schema: + type: string /playlists/{playlistId}/items/{generatorId}/items: get: - summary: Get a playlist generator's items operationId: getPlaylistGeneratorItems - description: Get a playlist generator's items + summary: Get a playlist generator's items tags: - Library Playlists + description: Get a playlist generator's items parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -12988,17 +54373,21 @@ paths: content: application/json: schema: + type: object properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: Metadata: allOf: - - $ref: '#/components/schemas/Metadata' - - properties: + - $ref: "#/components/schemas/Metadata" + - type: object + properties: processingState: description: The state of processing if this generator is part of an optimizer playlist + type: string enum: - processed - completed @@ -13006,9 +54395,9 @@ paths: - disabled - error - pending - type: string processingStateContext: description: The error which could have occurred (or `good`) + type: string enum: - good - sourceFileUnavailable @@ -13022,23 +54411,350 @@ paths: - accessDenied - cannotTranscode - codecInstallError - type: string - type: object - type: object - type: object + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Metadata: + title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + processingState: processed + processingStateContext: good '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string '404': description: Playlist not found (or user may not have permission to access playlist) or generator not found content: - text/html: {} + text/html: + schema: + type: string /playlists/{playlistId}/items/{playlistItemId}/move: put: - summary: Moving items in a playlist operationId: movePlaylistItem - description: Moves an item in a playlist. Only works with dumb playlists. + summary: Moving items in a playlist tags: - Library Playlists + description: Moves an item in a playlist. Only works with dumb playlists. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -13070,20 +54786,34 @@ paths: type: integer responses: '200': - $ref: '#/components/responses/slash-post-responses-200' + $ref: "#/components/responses/slash-post-responses-200" + description: Successfully updated moving items in a playlist + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string '404': description: Playlist not found (or user may not have permission to access playlist) content: - text/html: {} + text/html: + schema: + type: string /playQueues/{playQueueId}/items/{playQueueItemId}: delete: - summary: Delete an item from a play queue operationId: deletePlayQueueItem - description: Deletes an item in a play queue. Increments the version of the play queue. Returns the modified play queue. + summary: Delete an item from a play queue tags: - Play Queue + description: Deletes an item in a play queue. Increments the version of the play queue. Returns the modified play queue. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -13110,20 +54840,34 @@ paths: type: integer responses: '200': - $ref: '#/components/responses/slash-post-responses-200' + $ref: "#/components/responses/slash-post-responses-200" + description: Successfully deleted delete an item from a play queue + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string '404': description: Play queue not found content: - text/html: {} + text/html: + schema: + type: string /playQueues/{playQueueId}/items/{playQueueItemId}/move: put: - summary: Move an item in a play queue operationId: movePlayQueueItem - description: Moves an item in a play queue, and increases the version of the play queue. Returns the modified play queue. + summary: Move an item in a play queue tags: - Play Queue + description: Moves an item in a play queue, and increases the version of the play queue. Returns the modified play queue. parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -13155,20 +54899,158 @@ paths: type: integer responses: '200': - $ref: '#/components/responses/slash-post-responses-200' + $ref: "#/components/responses/slash-post-responses-200" + description: Successfully updated move an item in a play queue + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string '404': description: Play queue or queue item not found content: - text/html: {} + text/html: + schema: + type: string + /{transcodeType}/:/transcode/universal/session/{sessionId}/{segmentId}.m4s: + get: + operationId: getDASHSegment + summary: Get DASH Segment + tags: + - Transcoder + description: DASH segment delivery for adaptive streaming. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: transcodeType + description: The type of transcoding (e.g., video, audio) + in: path + required: true + schema: + type: string + - name: sessionId + description: The unique identifier of the session + in: path + required: true + schema: + type: string + - name: segmentId + description: The unique identifier of the media segment + in: path + required: true + schema: + type: string + responses: + '200': + description: OK + content: + video/mp4: + schema: + type: string + format: binary + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string + /{transcodeType}/:/transcode/universal/session/{sessionId}/{segmentId}.ts: + get: + operationId: getHLSSegment + summary: Get HLS Segment + tags: + - Transcoder + description: HLS TS segment delivery for adaptive streaming. + security: + - token: + - admin + parameters: + - $ref: "#/components/parameters/accepts" + - $ref: "#/components/parameters/X-Plex-Client-Identifier" + - $ref: "#/components/parameters/X-Plex-Product" + - $ref: "#/components/parameters/X-Plex-Version" + - $ref: "#/components/parameters/X-Plex-Platform" + - $ref: "#/components/parameters/X-Plex-Platform-Version" + - $ref: "#/components/parameters/X-Plex-Device" + - $ref: "#/components/parameters/X-Plex-Model" + - $ref: "#/components/parameters/X-Plex-Device-Vendor" + - $ref: "#/components/parameters/X-Plex-Device-Name" + - $ref: "#/components/parameters/X-Plex-Marketplace" + - name: transcodeType + description: The type of transcoding (e.g., video, audio) + in: path + required: true + schema: + type: string + - name: sessionId + description: The unique identifier of the session + in: path + required: true + schema: + type: string + - name: segmentId + description: The unique identifier of the media segment + in: path + required: true + schema: + type: string + responses: + '200': + description: OK + content: + video/mp2t: + schema: + type: string + format: binary + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: + type: string /library/metadata/{ids}/{element}/{timestamp}: get: - summary: Get an item's artwork, theme, etc operationId: getItemArtwork - description: Get the artwork, thumb, element for a metadata item + summary: Get an item's artwork, theme, etc tags: - Library + description: Get the artwork, thumb, element for a metadata item parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -13182,11 +55064,13 @@ paths: - $ref: "#/components/parameters/X-Plex-Device-Name" - $ref: "#/components/parameters/X-Plex-Marketplace" - name: ids + description: Comma-separated list of IDs in: path required: true schema: type: string - name: element + description: The type of artwork element (e.g., art, poster, thumb) in: path required: true schema: @@ -13210,22 +55094,36 @@ paths: content: audio/mpeg3: schema: - format: binary type: string + format: binary image/jpeg: schema: + type: string format: binary + '400': + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string + '401': + $ref: "#/components/responses/401" + description: Unauthorized - Authentication token is missing or invalid + content: + text/html: + schema: type: string /library/parts/{partId}/{changestamp}/{filename}: get: - summary: Get a media part operationId: getMediaPart - description: | + summary: Get a media part + tags: + - Library + description: |- Get a media part for streaming or download. - streaming: This is the default scenario. Bandwidth usage on this endpoint will be guaranteed (on the server's end) to be at least the bandwidth reservation given in the decision. If no decision exists, an ad-hoc decision will be created if sufficient bandwidth exists. Clients should not rely on ad-hoc decisions being made as this may be removed in the future. - download: Indicated if the query parameter indicates this is a download. Bandwidth will be prioritized behind playbacks and will get a fair share of what remains. - tags: - - Library parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -13269,29 +55167,41 @@ paths: description: 'Note: This header is only included in download requests' schema: type: string + content: + application/octet-stream: + schema: + $ref: "#/components/schemas/BinaryResponse" '403': description: Client requested download and server owner has forbidden download of media content: - text/html: {} + text/html: + schema: + type: string '404': description: The part doesn't exist content: - text/html: {} + text/html: + schema: + type: string '503': description: Client requested the part without a decision and no decision could be made or decision is for a transcode content: - text/html: {} + text/html: + schema: + type: string '509': description: Client requested the part without a decision and no decision could be made because there is insufficient bandwidth for client to direct play this part content: - text/html: {} + text/html: + schema: + type: string /library/parts/{partId}/indexes/{index}/{offset}: get: - summary: Get an image from part BIF operationId: getImageFromBif - description: Extract an image from the BIF for a part at a particular offset + summary: Get an image from part BIF tags: - Library + description: Extract an image from the BIF for a part at a particular offset parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -13330,19 +55240,21 @@ paths: content: image/jpeg: schema: - format: binary type: string + format: binary '404': description: The part or the index doesn't exist content: - text/html: {} + text/html: + schema: + type: string /livetv/epg/countries/{country}/{epgId}/regions/{region}/lineups: get: - summary: Get lineups for a region operationId: listLineups - description: Get lineups for a region within an EPG provider + summary: Get lineups for a region tags: - EPG + description: Get lineups for a region within an EPG provider parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -13388,18 +55300,35 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithLineup' + $ref: "#/components/schemas/MediaContainerWithLineup" + example: + MediaContainer: + identifier: example + offset: 1 + size: 1 + totalSize: 1 + Lineup: + - title: string value + type: string value + identifier: string value + key: string value + lineupType: 1 + location: string value + uuid: string value + uuid: example '404': description: No provider with the identifier was found content: - text/html: {} + text/html: + schema: + type: string /livetv/sessions/{sessionId}/{consumerId}/{segmentId}: get: - summary: Get a single session segment operationId: getSessionSegment - description: Get a single LiveTV session segment + summary: Get a single session segment tags: - Live TV + description: Get a single LiveTV session segment parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -13433,15 +55362,23 @@ paths: responses: '200': description: MPEG-TS segment for playing HLS content + content: + application/octet-stream: + schema: + $ref: "#/components/schemas/BinaryResponse" '404': description: Session, consumer, or segment not found + content: + text/html: + schema: + type: string /playlists/{playlistId}/items/{generatorId}/{metadataId}/{action}: put: - summary: Reprocess a generator operationId: refreshPlaylist - description: Make a generator reprocess (refresh) + summary: Reprocess a generator tags: - Library Playlists + description: Make a generator reprocess (refresh) parameters: - $ref: "#/components/parameters/accepts" - $ref: "#/components/parameters/X-Plex-Client-Identifier" @@ -13484,18 +55421,39 @@ paths: - enable responses: '200': - $ref: '#/components/responses/200' + $ref: "#/components/responses/200" + description: Successfully updated reprocess a generator + content: + application/json: + schema: + $ref: "#/components/schemas/SuccessResponse" + example: + success: true '400': - $ref: '#/components/responses/400' + $ref: "#/components/responses/400" + description: Bad Request - Invalid parameters or malformed request + content: + text/html: + schema: + type: string '404': description: Playlist not found (or user may not have permission to access playlist) or generator or metadata item not found content: - text/html: {} + text/html: + schema: + type: string components: securitySchemes: + clientIdentifier: + name: X-Plex-Client-Identifier + description: |- + An opaque identifier unique to the client. Required for OAuth PIN flows + and JWT device registration endpoints. + type: apiKey + in: header token: name: X-Plex-Token - description: | + description: |- The token which identifies the user accessing the PMS. This can be either: - A traditional access token obtained from plex.tv - A JWT token obtained through the JWT authentication flow @@ -13520,8 +55478,7 @@ components: - application/xml advancedSubtitles: name: advancedSubtitles - description: | - Indicates how incompatible advanced subtitles (such as ass/ssa) should be included: * 'burn' - Burn incompatible advanced text subtitles into the video stream * 'text' - Transcode incompatible advanced text subtitles to a compatible text format, even if some markup is lost + description: "Indicates how incompatible advanced subtitles (such as ass/ssa) should be included: * 'burn' - Burn incompatible advanced text subtitles into the video stream * 'text' - Transcode incompatible advanced text subtitles to a compatible text format, even if some markup is lost" in: query schema: type: string @@ -13678,9 +55635,9 @@ components: example: 0 mediaQuery: name: mediaQuery - description: | + description: |- A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. - + The query supports: - Fields: integer, boolean, tag, string, date, language - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) @@ -13688,18 +55645,18 @@ components: - Sorting: sort parameter with :desc, :nullsLast modifiers - Grouping: group parameter - Limits: limit parameter - + Examples: - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 - + See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. in: query - schema: - $ref: '#/components/schemas/MediaQuery' style: form explode: true + schema: + $ref: "#/components/schemas/MediaQuery" musicBitrate: name: musicBitrate description: Target bitrate for audio only files (in kbps, used to transcode). @@ -13747,8 +55704,7 @@ components: example: 1080x1080 protocol: name: protocol - description: | - Indicates the network streaming protocol to be used for the transcode session: * 'http' - include the file in the http response such as MKV streaming * 'hls' - hls stream (RFC 8216) * 'dash' - dash stream (ISO/IEC 23009-1:2022) + description: "Indicates the network streaming protocol to be used for the transcode session: * 'http' - include the file in the http response such as MKV streaming * 'hls' - hls stream (RFC 8216) * 'dash' - dash stream (ISO/IEC 23009-1:2022)" in: query schema: type: string @@ -13772,8 +55728,7 @@ components: type: boolean subtitles: name: subtitles - description: | - Indicates how subtitles should be included: * 'auto' - Compute the appropriate subtitle setting automatically * 'burn' - Burn the selected subtitle; auto if no selected subtitle * 'none' - Ignore all subtitle streams * 'sidecar' - The selected subtitle should be provided as a sidecar * 'embedded' - The selected subtitle should be provided as an embedded stream * 'segmented' - The selected subtitle should be provided as a segmented stream + description: "Indicates how subtitles should be included: * 'auto' - Compute the appropriate subtitle setting automatically * 'burn' - Burn the selected subtitle; auto if no selected subtitle * 'none' - Ignore all subtitle streams * 'sidecar' - The selected subtitle should be provided as a sidecar * 'embedded' - The selected subtitle should be provided as an embedded stream * 'segmented' - The selected subtitle should be provided as a segmented stream" in: query schema: type: string @@ -13785,7 +55740,7 @@ components: - embedded - segmented - unknown - example: Burn + example: burn subtitleSize: name: subtitleSize description: Percentage of original subtitle size to use when burning subtitles (100 is equivalent to original size, 50 is half, ect) @@ -13820,9 +55775,9 @@ components: - subtitles type: name: type - description: | + description: |- The type of media to retrieve or filter by. - + 1 = movie 2 = show 3 = season @@ -13832,11 +55787,11 @@ components: 7 = track 8 = photo_album 9 = photo - + E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries in: query schema: - $ref: '#/components/schemas/MediaType' + $ref: "#/components/schemas/MediaType" example: 2 videoBitrate: name: videoBitrate @@ -13865,148 +55820,121 @@ components: example: 1080x1080 X-Plex-Client-Identifier: name: X-Plex-Client-Identifier - x-speakeasy-name-override: Client-Identifier - in: header description: An opaque identifier unique to the client + in: header required: true schema: type: string example: abc123 example: abc123 - X-Plex-Client-Profile-Extra: - name: X-Plex-Client-Profile-Extra - x-speakeasy-name-override: Client-Profile-Extra - description: See [Profile Augmentations](#section/API-Info/Profile-Augmentations) . - in: header - schema: - type: string - example: add-limitation(scope=videoCodec&scopeName=*&type=upperBound&name=video.frameRate&value=60&replace=true)+append-transcode-target-codec(type=videoProfile&context=streaming&videoCodec=h264%2Chevc&audioCodec=aac&protocol=dash) - example: add-limitation(scope=videoCodec&scopeName=*&type=upperBound&name=video.frameRate&value=60&replace=true)+append-transcode-target-codec(type=videoProfile&context=streaming&videoCodec=h264%2Chevc&audioCodec=aac&protocol=dash) - X-Plex-Client-Profile-Name: - name: X-Plex-Client-Profile-Name - x-speakeasy-name-override: Client-Profile-Name - description: Which built in Client Profile to use in the decision. Generally should only be used to specify the Generic profile. - in: header + x-speakeasy-name-override: Client-Identifier + X-Plex-Container-Size: + name: X-Plex-Container-Size + description: |- + The number of items to return. If not specified, all items will be returned. + If the number of items exceeds the limit, the response will be paginated. + By default this is 50 + in: query + required: false schema: - type: string - example: generic - example: generic - X-Plex-Session-Identifier: - name: X-Plex-Session-Identifier - x-speakeasy-name-override: Session-Identifier - description: Unique per client playback session. Used if a client can playback multiple items at a time (such as a browser with multiple tabs) - in: header + type: integer + format: int32 + default: 50 + example: 50 + X-Plex-Container-Start: + name: X-Plex-Container-Start + description: |- + The index of the first item to return. If not specified, the first item will be returned. + If the number of items exceeds the limit, the response will be paginated. + By default this is 0 + in: query + required: false schema: - type: string - example: abc123 - example: abc123 - X-Plex-Product: - name: X-Plex-Product - x-speakeasy-name-override: Product + type: integer + format: int32 + default: 0 + example: 0 + X-Plex-Device: + name: X-Plex-Device + description: A relatively friendly name for the client device in: header - description: The name of the client product schema: type: string - example: Plex for Roku - example: Plex for Roku - X-Plex-Version: - name: X-Plex-Version - x-speakeasy-name-override: Version + example: Roku 3 + example: Roku 3 + x-speakeasy-name-override: Device + X-Plex-Device-Name: + name: X-Plex-Device-Name + description: A friendly name for the client in: header - description: The version of the client application schema: type: string - example: 2.4.1 - example: 2.4.1 - X-Plex-Platform: - name: X-Plex-Platform - x-speakeasy-name-override: Platform + example: Living Room TV + example: Living Room TV + x-speakeasy-name-override: Device-Name + X-Plex-Device-Vendor: + name: X-Plex-Device-Vendor + description: The device vendor in: header - description: The platform of the client schema: type: string example: Roku example: Roku - X-Plex-Platform-Version: - name: X-Plex-Platform-Version - x-speakeasy-name-override: Platform-Version - in: header - description: The version of the platform - schema: - type: string - example: 4.3 build 1057 - example: 4.3 build 1057 - X-Plex-Device: - name: X-Plex-Device - x-speakeasy-name-override: Device + x-speakeasy-name-override: Device-Vendor + X-Plex-Marketplace: + name: X-Plex-Marketplace + description: The marketplace on which the client application is distributed in: header - description: A relatively friendly name for the client device schema: type: string - example: Roku 3 - example: Roku 3 + example: googlePlay + example: googlePlay + x-speakeasy-name-override: Marketplace X-Plex-Model: name: X-Plex-Model - x-speakeasy-name-override: Model - in: header description: A potentially less friendly identifier for the device model + in: header schema: type: string example: 4200X example: 4200X - X-Plex-Device-Vendor: - name: X-Plex-Device-Vendor - x-speakeasy-name-override: Device-Vendor + x-speakeasy-name-override: Model + X-Plex-Platform: + name: X-Plex-Platform + description: The platform of the client in: header - description: The device vendor schema: type: string example: Roku example: Roku - X-Plex-Device-Name: - name: X-Plex-Device-Name - x-speakeasy-name-override: Device-Name + x-speakeasy-name-override: Platform + X-Plex-Platform-Version: + name: X-Plex-Platform-Version + description: The version of the platform in: header - description: A friendly name for the client schema: type: string - example: Living Room TV - example: Living Room TV - X-Plex-Marketplace: - name: X-Plex-Marketplace - x-speakeasy-name-override: Marketplace + example: 4.3 build 1057 + example: 4.3 build 1057 + x-speakeasy-name-override: Platform-Version + X-Plex-Product: + name: X-Plex-Product + description: The name of the client product in: header - description: The marketplace on which the client application is distributed schema: type: string - example: googlePlay - example: googlePlay - X-Plex-Container-Start: - name: X-Plex-Container-Start - in: query - description: | - The index of the first item to return. If not specified, the first item will be returned. - If the number of items exceeds the limit, the response will be paginated. - By default this is 0 - schema: - type: integer - format: int32 - default: 0 - example: 0 - required: false - X-Plex-Container-Size: - name: X-Plex-Container-Size - in: query - description: | - The number of items to return. If not specified, all items will be returned. - If the number of items exceeds the limit, the response will be paginated. - By default this is 50 + example: Plex for Roku + example: Plex for Roku + x-speakeasy-name-override: Product + X-Plex-Version: + name: X-Plex-Version + description: The version of the client application + in: header schema: - type: integer - format: int32 - default: 50 - example: 50 - required: false + type: string + example: 2.4.1 + example: 2.4.1 + x-speakeasy-name-override: Version headers: X-Plex-Container-Start: description: Provided on all MediaContainer objects indicating the offset of where this container page starts @@ -14016,8 +55944,8 @@ components: description: Provided on all MediaContainer objects indicating the total size of the collection schema: type: integer - minimum: 0 example: 100 + minimum: 0 responses: '200': description: OK @@ -14031,6 +55959,12 @@ components: description: Bad Request content: text/html: {} + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: "#/components/schemas/Error" '403': description: Forbidden content: @@ -14039,41 +55973,24 @@ components: description: Not Found content: text/html: {} - '500': - description: Internal Server Error - content: - text/html: {} dvrRequestHandler_slash-get-responses-200: description: OK headers: X-Plex-Container-Start: - $ref: '#/components/headers/X-Plex-Container-Start' + $ref: "#/components/headers/X-Plex-Container-Start" X-Plex-Container-Total-Size: - $ref: '#/components/headers/X-Plex-Container-Total-Size' + $ref: "#/components/headers/X-Plex-Container-Total-Size" content: application/json: schema: properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainerWithStatus' + - $ref: "#/components/schemas/MediaContainerWithStatus" - properties: DVR: items: - properties: - Device: - items: - $ref: '#/components/schemas/Device' - type: array - key: - type: string - language: - type: string - lineup: - type: string - uuid: - type: string - type: object + $ref: "#/components/schemas/DVR" type: array type: object type: object @@ -14081,149 +55998,42 @@ components: description: OK headers: X-Plex-Container-Start: - $ref: '#/components/headers/X-Plex-Container-Start' - X-Plex-Container-Total-Size: - $ref: '#/components/headers/X-Plex-Container-Total-Size' - content: - application/json: - schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Hub: - items: - properties: - homeVisibility: - description: | - Whether this hub is visible on the home screen - - all: Visible to all users - - none: Visible to no users - - admin: Visible to only admin users - - shared: Visible to shared users - enum: - - all - - none - - admin - - shared - type: string - identifier: - description: The identifier for this hub - type: string - promotedToOwnHome: - description: Whether this hub is visible to admin user home - type: boolean - promotedToRecommended: - description: Whether this hub is promoted to all for recommendations - type: boolean - promotedToSharedHome: - description: Whether this hub is visible to shared user's home - type: boolean - recommendationsVisibility: - description: | - The visibility of this hub in recommendations: - - all: Visible to all users - - none: Visible to no users - - admin: Visible to only admin users - - shared: Visible to shared users - enum: - - all - - none - - admin - - shared - type: string - title: - description: The title of this hub - type: string - type: object - type: array - type: object - type: object - historyAll-get-responses-200: - description: OK - headers: - X-Plex-Container-Start: - $ref: '#/components/headers/X-Plex-Container-Start' + $ref: "#/components/headers/X-Plex-Container-Start" X-Plex-Container-Total-Size: - $ref: '#/components/headers/X-Plex-Container-Total-Size' - content: - application/json: - schema: - properties: - MediaContainer: - allOf: - - $ref: '#/components/schemas/MediaContainer' - - properties: - Metadata: - items: - properties: - accountID: - description: The account id of this playback - type: integer - deviceID: - description: The device id which played the item - type: integer - historyKey: - description: The key for this individual history item - type: string - key: - description: The metadata key for the item played - type: string - librarySectionID: - description: The library section id containing the item played - type: string - originallyAvailableAt: - description: The originally available at of the item played - type: string - ratingKey: - description: The rating key for the item played - type: string - thumb: - description: The thumb of the item played - type: string - title: - description: The title of the item played - type: string - type: - description: The metadata type of the item played - type: string - viewedAt: - description: The time when the item was played - type: integer - type: object + $ref: "#/components/headers/X-Plex-Container-Total-Size" + content: + application/json: + schema: + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - properties: + Hub: + items: + $ref: "#/components/schemas/ManagedHub" type: array type: object type: object - post-responses-200: + historyAll-get-responses-200: description: OK + headers: + X-Plex-Container-Start: + $ref: "#/components/headers/X-Plex-Container-Start" + X-Plex-Container-Total-Size: + $ref: "#/components/headers/X-Plex-Container-Total-Size" content: application/json: schema: properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' - - additionalProperties: true - properties: - color: - type: string - endTimeOffset: - type: integer - id: - type: integer - startTimeOffset: - type: integer - title: - type: string - type: - enum: - - intro - - commercial - - bookmark - - resume - - credit - type: string + - $ref: "#/components/schemas/MediaContainer" + - properties: + Metadata: + items: + $ref: "#/components/schemas/PlaybackHistoryMetadata" + type: array type: object type: object LibrarySections: @@ -14234,7 +56044,7 @@ components: properties: MediaContainer: allOf: - - $ref: '#/components/schemas/ServerConfiguration' + - $ref: "#/components/schemas/ServerConfiguration" - properties: Directory: items: @@ -14250,17 +56060,28 @@ components: type: array type: object type: object + post-responses-200: + description: OK + content: + application/json: + schema: + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - $ref: "#/components/schemas/Marker" + type: object responses-200: description: OK headers: X-Plex-Container-Start: - $ref: '#/components/headers/X-Plex-Container-Start' + $ref: "#/components/headers/X-Plex-Container-Start" X-Plex-Container-Total-Size: - $ref: '#/components/headers/X-Plex-Container-Total-Size' + $ref: "#/components/headers/X-Plex-Container-Total-Size" content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithHubs' + $ref: "#/components/schemas/MediaContainerWithHubs" responses-400: description: Request parameters are bad, such as an `endTimeOffset` prior to the `startTimeOffset` content: @@ -14291,13 +56112,15 @@ components: allowSync: oneOf: - type: boolean - - type: string - enum: ["0", "1"] + - enum: + - '0' + - '1' + type: string art: type: string Directory: items: - $ref: '#/components/schemas/Metadata' + $ref: "#/components/schemas/Metadata" type: array identifier: type: string @@ -14320,140 +56143,535 @@ components: viewMode: type: integer type: object + type: object slash-post-responses-200: description: OK content: application/json: schema: - $ref: '#/components/schemas/MediaContainerWithPlaylistMetadata' + $ref: "#/components/schemas/MediaContainerWithPlaylistMetadata" schemas: + Activity: + type: object + example: + title: string value + type: string value + cancellable: true + Context: {} + progress: 1 + Response: {} + subtitle: string value + userID: 1 + uuid: string value + additionalProperties: true + properties: + title: + description: A user-friendly title for this activity + type: string + type: + description: The type of activity + type: string + cancellable: + description: Indicates whether this activity can be cancelled + type: boolean + Context: + description: An object with additional values + type: object + additionalProperties: true + progress: + description: A progress percentage. A value of -1 means the progress is indeterminate + type: number + minimum: -1 + maximum: 100 + Response: + description: An object with the response to the async opperation + type: object + additionalProperties: true + subtitle: + description: A user-friendly sub-title for this activity + type: string + userID: + description: The user this activity belongs to + type: integer + uuid: + description: The ID of the activity + type: string + x-speakeasy-unknown-fields: true + AddedQueueItem: + type: object + example: + id: 1 + key: string value + properties: + id: + description: The queue item id that was added or the existing one if an item already exists in this queue with the same parameters + type: integer + key: + description: The key added to the queue + type: string AllowSync: + example: true oneOf: - type: boolean - type: string - enum: ["0", "1"] + enum: + - '0' + - '1' + AuthKeysResponse: + type: object + example: + keys: + - alg: string value + e: string value + kid: string value + kty: string value + n: string value + use: string value + properties: + keys: + type: array + items: + type: object + properties: + alg: + type: string + e: + type: string + kid: + type: string + kty: + type: string + n: + type: string + use: + type: string + AuthNonceResponse: + type: object + example: + nonce: string value + properties: + nonce: + description: A random nonce string for authentication + type: string + AuthTokenResponse: + type: object + example: + authToken: string value + clientIdentifier: string value + jwt: string value + properties: + authToken: + description: The Plex authentication token + type: string + clientIdentifier: + type: string + jwt: + description: JWT token for device authentication + type: string + BadRequestErrorResponse: + type: object + example: + errors: + - code: 400 + message: Bad Request + status: 400 + properties: + errors: + type: array + items: + type: object + properties: + code: + type: integer + format: int32 + example: 1000 + message: + type: string + example: X-Plex-Client-Identifier is missing + x-speakeasy-error-message: true + status: + type: integer + format: int32 + example: 400 + x-speakeasy-name-override: BadRequest + Bandwidth: + type: object + example: + bandwidth: 1 + resolution: string value + time: 1 + properties: + bandwidth: + description: The bandwidth at this time in kbps + type: integer + resolution: + description: The user-friendly resolution at this time + type: string + time: + description: Media playback time where this bandwidth started + type: integer + BinaryResponse: + description: A binary data response (image, audio, video, or other media) + type: string + format: binary + example: BoolInt: type: integer format: int32 enum: - 0 - 1 - example: 1 default: 0 + example: 1 x-speakeasy-enums: - - FALSE - - TRUE - MediaType: - description: | - The type of media to retrieve or filter by. - - 1 = movie - 2 = show - 3 = season - 4 = episode - 5 = artist - 6 = album - 7 = track - 8 = photo_album - 9 = photo - - E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries - type: integer - enum: - - 1 - - 2 - - 3 - - 4 - - 5 - - 6 - - 7 - - 8 - - 9 - example: 2 - x-speakeasy-enums: - - MOVIE - - TV_SHOW - - SEASON - - EPISODE - - ARTIST - - ALBUM - - TRACK - - PHOTO_ALBUM - - PHOTO - MediaTypeString: - description: | - The type of media content in the Plex library. This can represent videos, music, or photos. - type: string - enum: - - movie - - show - - season - - episode - - artist - - album - - track - - photoalbum - - photo - - collection - example: "movie" - x-speakeasy-enums: - - MOVIE - - TV_SHOW - - SEASON - - EPISODE - - ARTIST - - ALBUM - - TRACK - - PHOTO_ALBUM - - PHOTO - - COLLECTION + - false + - true + ButlerTask: + type: object + example: + title: string value + description: string value + enabled: true + interval: 1 + name: string value + scheduleRandomized: true + properties: + title: + description: A user-friendly title of the task + type: string + description: + description: A user-friendly description of the task + type: string + enabled: + description: Whether this task is enabled or not + type: boolean + interval: + description: The interval (in days) of when this task is run. A value of 1 is run every day, 7 is every week, etc. + type: integer + name: + description: The name of the task + type: string + scheduleRandomized: + description: Indicates whether the timing of the task is randomized within the butler interval + type: boolean Channel: type: object + example: + title: string value + callSign: string value + channelVcn: string value + drm: true + favorite: true + hd: true + identifier: string value + key: string value + language: string value + signalQuality: 1 + signalStrength: 1 + thumb: string value + properties: + title: + type: string + callSign: + type: string + channelVcn: + type: string + drm: + description: Whether the channel requires DRM. + type: boolean + example: false + favorite: + description: Whether the channel is marked as a favorite. + type: boolean + example: true + hd: + type: boolean + identifier: + type: string + key: + type: string + language: + type: string + signalQuality: + description: Signal quality percentage (0-100). + type: integer + example: 85 + signalStrength: + description: Signal strength percentage (0-100). + type: integer + example: 90 + thumb: + type: string + ChannelMapping: + type: object + example: + channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + properties: + channelKey: + type: string + deviceIdentifier: + type: string + enabled: + type: string + lineupIdentifier: + type: string + ChannelResponse: + type: object + example: + MediaContainer: + size: 1 + Channel: + - id: 1 + title: Example Channel + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Channel: + type: array + items: + $ref: "#/components/schemas/Channel" + ClaimTokenResponse: + type: object + example: + token: string value + properties: + token: + description: The claim token for server authentication + type: string + CloudServerResponse: + type: object + example: + address: string value + name: string value + port: 1 + scheme: string value + properties: + address: + type: string + name: + type: string + port: + type: integer + scheme: + type: string + Collection: + description: A collection of related media items. + type: object + example: + artBlurHash: string value + collectionFilterBasedOnUser: true + collectionMode: default + collectionPublished: true + collectionSort: string value + lastRatedAt: 1 + thumbBlurHash: string value + userRating: 1 + properties: + artBlurHash: + description: Blur hash for collection art. + type: string + example: LhE3*HRjR*a#ogWBofj[bbf6ofa# + collectionFilterBasedOnUser: + description: Whether the smart collection filter is based on the current user. + type: boolean + example: false + collectionMode: + description: Display mode for the collection. + type: string + enum: + - default + - hideItems + - showItems + example: default + collectionPublished: + description: Whether the collection is published to Plex Discover. + type: boolean + example: true + collectionSort: + description: Sort order for items in the collection. + type: string + example: addedAt:desc + lastRatedAt: + description: Timestamp of the last user rating. + type: integer + example: 1704067200 + thumbBlurHash: + description: Blur hash for collection thumbnail. + type: string + example: LhE3*HRjR*a#ogWBofj[bbf6ofa# + userRating: + description: User star rating (0-10). + type: number + example: 8.5 + Connection: + type: object + example: + address: string value + local: true + port: 1 + protocol: string value + relay: true + uri: string value properties: - title: - type: string - callSign: + address: type: string - channelVcn: + local: + description: Indicates if the connection is the server's LAN address + type: boolean + port: + type: integer + protocol: type: string - hd: + relay: + description: Indicates the connection is over a relayed connection type: boolean - identifier: + uri: type: string - key: + ConnectionInfo: + type: object + example: + accessToken: string value + clientIdentifier: string value + Connection: + - address: string value + local: true + port: 1 + protocol: string value + relay: true + uri: string value + name: string value + properties: + accessToken: type: string - language: + clientIdentifier: type: string - thumb: + Connection: + type: array + items: + $ref: "#/components/schemas/Connection" + name: type: string - ChannelMapping: + ConnectionInfoWrapper: + type: object + example: + Device: + Connection: + - uri: http://192.168.1.1:32400 + properties: + Device: + $ref: "#/components/schemas/ConnectionInfo" + DecisionResult: type: object + example: + availableBandwidth: 1 + directPlayDecisionCode: 1 + directPlayDecisionText: string value + generalDecisionCode: 1 + generalDecisionText: string value + mdeDecisionCode: 1 + mdeDecisionText: string value + transcodeDecisionCode: 1 + transcodeDecisionText: string value properties: - channelKey: + availableBandwidth: + description: The maximum bitrate set when item was added + type: integer + directPlayDecisionCode: + type: integer + directPlayDecisionText: type: string - deviceIdentifier: + generalDecisionCode: + type: integer + generalDecisionText: type: string - enabled: + mdeDecisionCode: + description: The code indicating the status of evaluation of playback when client indicates `hasMDE=1` + type: integer + mdeDecisionText: + description: Descriptive text for the above code type: string - lineupIdentifier: + transcodeDecisionCode: + type: integer + transcodeDecisionText: type: string Device: type: object + example: + title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value properties: + title: + description: Display title for the device. + type: string + example: Living Room Tuner ChannelMapping: type: array items: - $ref: '#/components/schemas/ChannelMapping' + $ref: "#/components/schemas/ChannelMapping" + deviceIdentifier: + description: Distinct hardware identifier for the device. + type: string + example: HDHomeRun-1234ABCD + enabled: + description: Whether the device is enabled. + type: boolean + example: true + id: + description: Unique device ID. + type: integer + example: 42 key: type: string lastSeenAt: type: integer + lineup: + description: EPG lineup association. + type: string + example: OTA + lineupType: + description: Type of EPG lineup. + type: string + example: Antenna make: type: string model: type: string modelNumber: type: string + name: + description: Human-readable device name. + type: string + example: HDHomeRun CONNECT protocol: type: string sources: @@ -14462,14 +56680,73 @@ components: type: string status: type: string + thumb: + description: URL to the device thumbnail image. + type: string + example: https://plex.tv/devices/42/thumb + thumbVersion: + description: Version of the device thumbnail. + type: integer + example: 1 tuners: type: string uri: type: string uuid: type: string + DeviceChannel: + type: object + example: + drm: true + favorite: true + hd: true + identifier: string value + key: string value + name: string value + signalQuality: 1 + signalStrength: 1 + properties: + drm: + description: Indicates the channel is DRMed and thus may not be playable + type: boolean + favorite: + type: boolean + hd: + type: boolean + identifier: + type: string + key: + type: string + name: + type: string + signalQuality: + type: integer + signalStrength: + type: integer Directory: type: object + example: + title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value additionalProperties: true properties: title: @@ -14517,11 +56794,299 @@ components: type: string titleBar: type: string + DownloadQueue: + type: object + example: + id: 1 + itemCount: 1 + status: deciding + properties: + id: + type: integer + itemCount: + type: integer + status: + description: |- + The state of this queue + - deciding: At least one item is still being decided + - waiting: At least one item is waiting for transcode and none are currently transcoding + - processing: At least one item is being transcoded + - done: All items are available (or potentially expired) + - error: At least one item has encountered an error + type: string + enum: + - deciding + - waiting + - processing + - done + - error + DownloadQueueItem: + type: object + example: + DecisionResult: + availableBandwidth: 1 + directPlayDecisionCode: 1 + directPlayDecisionText: string value + generalDecisionCode: 1 + generalDecisionText: string value + mdeDecisionCode: 1 + mdeDecisionText: string value + transcodeDecisionCode: 1 + transcodeDecisionText: string value + error: string value + id: 1 + key: string value + queueId: 1 + status: deciding + transcode: {} + TranscodeSession: + complete: true + context: string value + duration: 1 + error: true + key: string value + progress: 1 + protocol: string value + size: 1 + sourceAudioCodec: string value + sourceVideoCodec: string value + speed: 1 + throttled: true + transcodeHwFullPipeline: true + transcodeHwRequested: true + properties: + DecisionResult: + $ref: "#/components/schemas/DecisionResult" + error: + description: The error encountered in transcoding or decision + type: string + id: + type: integer + key: + type: string + queueId: + type: integer + status: + description: |- + The state of the item: + - deciding: The item decision is pending + - waiting: The item is waiting for transcode + - processing: The item is being transcoded + - available: The item is available for download + - error: The item encountered an error in the decision or transcode + - expired: The transcoded item has timed out and is no longer available + type: string + enum: + - deciding + - waiting + - processing + - available + - error + - expired + transcode: + description: The transcode session object which is not yet documented otherwise it'd be a $ref here. + type: object + TranscodeSession: + $ref: "#/components/schemas/TranscodeSession" + DVR: + type: object + example: + Device: + - title: string value + ChannelMapping: + - channelKey: string value + deviceIdentifier: string value + enabled: string value + lineupIdentifier: string value + deviceIdentifier: string value + enabled: true + id: 1 + key: string value + lastSeenAt: 1 + lineup: string value + lineupType: string value + make: string value + model: string value + modelNumber: string value + name: string value + protocol: string value + sources: string value + state: string value + status: string value + thumb: string value + thumbVersion: 1 + tuners: string value + uri: string value + uuid: string value + key: string value + language: string value + lineup: string value + uuid: string value + properties: + Device: + type: array + items: + $ref: "#/components/schemas/Device" + key: + type: string + language: + type: string + lineup: + type: string + uuid: + type: string + DVRResponse: + type: object + example: + MediaContainer: + size: 1 + DVR: + - key: /tv.plex.provider.epg + title: HDHomerun + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainerWithStatus" + - type: object + properties: + DVR: + type: array + items: + $ref: "#/components/schemas/DVR" + EPGCountry: + type: object + example: + title: string value + type: string value + example: string value + code: string value + flavor: 1 + key: string value + language: string value + languageTitle: string value + properties: + title: + type: string + type: + type: string + example: + type: string + code: + description: Three letter code + type: string + flavor: + description: |- + - `0`: The country is divided into regions, and following the key will lead to a list of regions. + - `1`: The county is divided by postal codes, and an example code is returned in `example`. + - `2`: The country has a single postal code, returned in `example`. + type: integer + enum: + - 0 + - 1 + - 2 + key: + type: string + language: + description: Three letter language code + type: string + languageTitle: + description: The title of the language + type: string + EPGLanguage: + type: object + example: + title: string value + code: string value + properties: + title: + type: string + code: + description: 3 letter language code + type: string + EPGRegion: + type: object + example: + title: string value + type: string value + key: string value + national: true + properties: + title: + type: string + type: + type: string + key: + type: string + national: + type: boolean + Error: + type: object + example: + errors: + - code: 1 + message: string value + status: 1 + properties: + errors: + type: array + items: + type: object + properties: + code: + type: integer + format: int32 + example: 1001 + message: + type: string + example: User could not be authenticated + x-speakeasy-error-message: true + status: + type: integer + format: int32 + example: 401 + Feature: + type: object + example: + type: string value + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + key: string value + properties: + type: + type: string + Directory: + type: array + items: + $ref: "#/components/schemas/Directory" + key: + type: string Filter: + example: + filter: genre=action + filterType: string allOf: - - $ref: '#/components/schemas/Directory' - - description: | - 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 important subset useful for top-level API. + - $ref: "#/components/schemas/Directory" + - description: 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 important subset useful for top-level API. type: object properties: title: @@ -14536,8 +57101,363 @@ components: key: description: 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. type: string + GeoIPResponse: + type: object + example: + city: string value + coordinates: string value + country: string value + country_code: string value + subdivisions: string value + timezone: string value + properties: + city: + type: string + coordinates: + type: string + country: + type: string + country_code: + type: string + subdivisions: + type: string + timezone: + type: string Hub: type: object + example: + title: string value + type: string value + context: string value + hubIdentifier: string value + hubKey: string value + key: string value + Metadata: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + more: true + promoted: true + random: true + reason: string value + reasonID: 1 + reasonTitle: string value + size: 1 + style: string value + subtype: string value + totalSize: 1 additionalProperties: true properties: title: @@ -14555,8 +57475,7 @@ components: type: string example: home.onDeck hubKey: - description: | - A key at which the exact content currently displayed can be fetched again. This is particularly important when a hub is marked as random and requesting the `key` may get different results. It's otherwise optional. + description: A key at which the exact content currently displayed can be fetched again. This is particularly important when a hub is marked as random and requesting the `key` may get different results. It's otherwise optional. type: string key: description: The key at which all of the content for this hub can be retrieved @@ -14565,10 +57484,9 @@ components: Metadata: type: array items: - $ref: '#/components/schemas/Metadata' + $ref: "#/components/schemas/Metadata" more: - description: | - "A boolean indicating that the hub contains more than what's included in the current response." + description: '"A boolean indicating that the hub contains more than what''s included in the current response."' type: boolean promoted: description: Indicating if the hub should be promoted to the user's homescreen @@ -14576,6 +57494,18 @@ components: random: description: Indicating that the contents of the hub may change on each request type: boolean + reason: + description: Reason for hub inclusion (e.g. "because you watched"). + type: string + example: becauseYouWatched + reasonID: + description: ID of the item that triggered the reason. + type: integer + example: 12345 + reasonTitle: + description: Human-readable reason title. + type: string + example: Because You Watched The Matrix size: type: integer example: 1 @@ -14589,10 +57519,14 @@ components: totalSize: type: integer example: 8 + x-speakeasy-unknown-fields: true Image: - description: | - Images such as movie posters and background artwork are represented by Image elements. + description: Images such as movie posters and background artwork are represented by Image elements. type: object + example: + type: background + alt: string value + url: string value properties: type: description: Describes both the purpose and intended presentation of the image. @@ -14610,40 +57544,135 @@ components: url: description: The relative path or absolute url for the image. type: string + IPResponse: + type: object + example: + ip: 192.168.1.1 + properties: + ip: + description: The public IP address + type: string + format: ipv4 Items: type: object + example: + size: 10 + items: [] allOf: - - $ref: '#/components/schemas/Metadata' + - $ref: "#/components/schemas/Metadata" - type: object properties: MetadataItem: type: array items: - $ref: '#/components/schemas/Items' + $ref: "#/components/schemas/Items" description: Nested metadata items type: object + JWKRegistrationRequest: + type: object + example: + jwk: + crv: string value + kid: string value + kty: string value + x: string value + strong: false + properties: + jwk: + description: JSON Web Key for device authentication + type: object + properties: + crv: + type: string + example: Ed25519 + kid: + type: string + kty: + type: string + example: OKP + x: + type: string + strong: + description: Request strong authentication + type: boolean + default: false Key: type: string + example: /library/metadata/1 + LegacyPinResponse: + type: object + example: + authToken: string value + clientIdentifier: string value + code: string value + expiresIn: 1 + id: 1 + trusted: true + properties: + authToken: + description: The authentication token + type: string + clientIdentifier: + type: string + code: + description: The 4-character PIN code + type: string + expiresIn: + type: integer + id: + description: The PIN ID + type: integer + trusted: + type: boolean + Level: + type: object + example: + v: 1 + properties: + v: + description: The level in db. + type: number LibrarySection: type: object - required: - - uuid - - language - - type + example: + title: string value + type: movie + agent: string value + allowSync: true + art: string value + composite: string value + content: true + contentChangedAt: 1 + createdAt: 1 + directory: true + filters: true + hidden: true + key: string value + language: string value + Location: + - id: 1 + refreshing: true + scannedAt: 1 + scanner: string value + thumb: string value + updatedAt: 1 + uuid: string value properties: title: + description: The title of the library type: string - description: "The title of the library" - example: "Movies" + example: Movies type: - $ref: '#/components/schemas/MediaTypeString' + $ref: "#/components/schemas/MediaTypeString" agent: type: string allowSync: oneOf: - type: boolean - type: string - enum: ["0", "1"] + enum: + - '0' + - '1' art: type: string composite: @@ -14651,11 +57680,9 @@ components: content: type: boolean contentChangedAt: - allOf: - - $ref: '#/components/schemas/PlexDateTime' + $ref: "#/components/schemas/PlexDateTime" createdAt: - allOf: - - $ref: '#/components/schemas/PlexDateTime' + $ref: "#/components/schemas/PlexDateTime" directory: type: boolean filters: @@ -14664,13 +57691,9 @@ components: hidden: type: boolean key: - $ref: '#/components/schemas/Key' + $ref: "#/components/schemas/Key" language: type: string - uuid: - type: string - description: "The universally unique identifier for the library." - example: "e69655a2-ef48-4aba-bb19-d3cc3401e7d6" Location: type: array items: @@ -14685,25 +57708,47 @@ components: description: Indicates whether this library section is currently scanning type: boolean scannedAt: - allOf: - - $ref: '#/components/schemas/PlexDateTime' + $ref: "#/components/schemas/PlexDateTime" scanner: type: string thumb: - $ref: '#/components/schemas/Thumb' + $ref: "#/components/schemas/Thumb" updatedAt: - allOf: - - $ref: '#/components/schemas/PlexDateTime' + $ref: "#/components/schemas/PlexDateTime" + uuid: + description: The universally unique identifier for the library. + type: string + example: e69655a2-ef48-4aba-bb19-d3cc3401e7d6 + required: + - uuid + - language + - type Lineup: type: object + example: + title: string value + type: string value + identifier: string value + key: string value + lineupType: 1 + location: string value + uuid: string value properties: title: type: string type: description: The type of this object (`lineup` in this case) type: string + identifier: + description: Lineup identifier. + type: string + example: OTA + key: + description: API key for this lineup. + type: string + example: /tv.plex.lineup.ota lineupType: - description: | + description: |- - `-1`: N/A - `0`: Over the air - `1`: Cable @@ -14723,13 +57768,227 @@ components: uuid: description: The uuid of this lineup type: string + LogMessageRequest: + type: object + example: + level: DEBUG + message: string value + source: string value + properties: + level: + description: Log level (DEBUG, INFO, WARN, ERROR) + type: string + enum: + - DEBUG + - INFO + - WARN + - ERROR + example: INFO + message: + description: The log message content + type: string + example: Server started successfully + source: + description: Source of the log message + type: string + example: PlexMediaServer + ManagedHub: + type: object + example: + title: string value + homeVisibility: all + identifier: string value + promotedToOwnHome: true + promotedToRecommended: true + promotedToSharedHome: true + recommendationsVisibility: all + properties: + title: + description: The title of this hub + type: string + homeVisibility: + description: |- + Whether this hub is visible on the home screen + - all: Visible to all users + - none: Visible to no users + - admin: Visible to only admin users + - shared: Visible to shared users + type: string + enum: + - all + - none + - admin + - shared + identifier: + description: The identifier for this hub + type: string + promotedToOwnHome: + description: Whether this hub is visible to admin user home + type: boolean + promotedToRecommended: + description: Whether this hub is promoted to all for recommendations + type: boolean + promotedToSharedHome: + description: Whether this hub is visible to shared user's home + type: boolean + recommendationsVisibility: + description: |- + The visibility of this hub in recommendations: + - all: Visible to all users + - none: Visible to no users + - admin: Visible to only admin users + - shared: Visible to shared users + type: string + enum: + - all + - none + - admin + - shared + Marker: + type: object + example: + title: string value + type: intro + color: string value + endTimeOffset: 1 + id: 1 + startTimeOffset: 1 + additionalProperties: true + properties: + title: + type: string + type: + type: string + enum: + - intro + - commercial + - bookmark + - resume + - credit + color: + type: string + endTimeOffset: + type: integer + id: + type: integer + startTimeOffset: + type: integer Media: - description: | - `Media` represents an one or more media files (parts) and is a child of a metadata item. There aren't necessarily any guaranteed attributes on media elements since the attributes will vary based on the type. The possible attributes are not documented here, but they typically have self-evident names. High-level media information that can be used for badging and flagging, such as `videoResolution` and codecs, is included on the media element. + description: "`Media` represents an one or more media files (parts) and is a child of a metadata item. There aren't necessarily any guaranteed attributes on media elements since the attributes will vary based on the type. The possible attributes are not documented here, but they typically have self-evident names. High-level media information that can be used for badging and flagging, such as `videoResolution` and codecs, is included on the media element." type: object + example: + aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 additionalProperties: true - required: - - id properties: aspectRatio: type: number @@ -14760,16 +58019,16 @@ components: type: boolean example: false hasVoiceActivity: + description: |- + Voice activity detection availability flag returned by PMS. + PMS may return this as a boolean or as string values (`"0"` or `"1"`). + example: '0' oneOf: - type: boolean - type: string enum: - '0' - '1' - example: '0' - description: | - Voice activity detection availability flag returned by PMS. - PMS may return this as a boolean or as string values (`"0"` or `"1"`). height: type: integer format: int32 @@ -14787,7 +58046,15 @@ components: Part: type: array items: - $ref: '#/components/schemas/Part' + $ref: "#/components/schemas/Part" + selected: + description: Whether this media version is selected for playback. + type: boolean + example: true + uuid: + description: Unique identifier for this media instance. + type: string + example: 5d776d057ae4e7001f65e7d0 videoCodec: type: string example: h264 @@ -14804,31 +58071,41 @@ components: type: integer format: int32 example: 1280 + required: + - id MediaContainer: - description: | + description: |- `MediaContainer` is the root element of most Plex API responses. It serves as a generic container for various types of content (Metadata, Hubs, Directories, etc.) and includes pagination information (offset, size, totalSize) when applicable. Common attributes: - identifier: Unique identifier for this container - size: Number of items in this response page - totalSize: Total number of items available (for pagination) - offset: Starting index of this page (for pagination) The container often "hoists" common attributes from its children. For example, if all tracks in a container share the same album title, the `parentTitle` attribute may appear on the MediaContainer rather than being repeated on each track. type: object + example: + identifier: com.plexapp.plugins.library + offset: 0 + size: 1 + totalSize: 100 properties: identifier: type: string offset: - description: | - The offset of where this container page starts among the total objects available. Also provided in the `X-Plex-Container-Start` header. + description: The offset of where this container page starts among the total objects available. Also provided in the `X-Plex-Container-Start` header. type: integer size: type: integer totalSize: - description: | - The total size of objects available. Also provided in the `X-Plex-Container-Total-Size` header. + description: The total size of objects available. Also provided in the `X-Plex-Container-Total-Size` header. type: integer MediaContainerWithArtwork: type: object + example: + MediaContainer: + identifier: com.plexapp.plugins.library + size: 1 + artwork: [] properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - type: object properties: Metadata: @@ -14848,15 +58125,20 @@ components: description: The path to the artwork type: string MediaContainerWithDecision: - description: | + description: |- `MediaContainer` is commonly found as the root of a response and is a pretty generic container. Common attributes include `identifier` and things related to paging (`offset`, `size`, `totalSize`). It is also common for a `MediaContainer` to contain attributes "hoisted" from its children. If every element in the container would have had the same attribute, then that attribute can be present on the container instead of being repeated on every element. For example, an album's list of tracks might include `parentTitle` on the container since all of the tracks have the same album title. A container may have a `source` attribute when all of the items came from the same source. Generally speaking, when looking for an attribute on an item, if the attribute wasn't found then the container should be checked for that attribute as well. type: object + example: + MediaContainer: + identifier: com.plexapp.plugins.library + size: 1 + Decision: [] properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - type: object properties: availableBandwidth: @@ -14881,14 +58163,14 @@ components: type: array items: allOf: - - $ref: '#/components/schemas/Metadata' + - $ref: "#/components/schemas/Metadata" - type: object properties: Media: type: array items: allOf: - - $ref: '#/components/schemas/Media' + - $ref: "#/components/schemas/Media" - type: object properties: abr: @@ -14897,7 +58179,7 @@ components: type: array items: allOf: - - $ref: '#/components/schemas/Part' + - $ref: "#/components/schemas/Part" - type: object properties: decision: @@ -14912,7 +58194,7 @@ components: type: array items: allOf: - - $ref: '#/components/schemas/Stream' + - $ref: "#/components/schemas/Stream" - type: object properties: decision: @@ -14945,102 +58227,121 @@ components: type: string MediaContainerWithDevice: type: object + example: + MediaContainer: + identifier: com.plexapp.system.devices + size: 1 + Device: [] properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - type: object properties: Device: type: array items: - type: object - properties: - ChannelMapping: - type: array - items: - $ref: '#/components/schemas/ChannelMapping' - key: - type: string - lastSeenAt: - type: integer - make: - type: string - model: - type: string - modelNumber: - type: string - protocol: - type: string - sources: - type: string - state: - type: string - status: - type: string - tuners: - type: string - uri: - type: string - uuid: - type: string + $ref: "#/components/schemas/Device" MediaContainerWithDirectory: type: object + example: + MediaContainer: + identifier: com.plexapp.plugins.library + size: 1 + Directory: [] properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - type: object properties: Directory: type: array items: - $ref: '#/components/schemas/Directory' + $ref: "#/components/schemas/Directory" MediaContainerWithHubs: type: object + example: + MediaContainer: + identifier: com.plexapp.plugins.library + size: 1 + Hub: [] properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - type: object properties: Hub: type: array items: - $ref: '#/components/schemas/Hub' + $ref: "#/components/schemas/Hub" MediaContainerWithLineup: type: object + example: + MediaContainer: + identifier: tv.plex.provider.epg + size: 1 + Lineup: [] properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - type: object properties: Lineup: type: array items: - $ref: '#/components/schemas/Lineup' + $ref: "#/components/schemas/Lineup" uuid: description: The UUID of this set lineups type: string + MediaContainerWithMediaGrabOperation: + type: object + example: + MediaContainer: + identifier: com.plexapp.system + size: 1 + MediaGrabOperation: [] + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + MediaGrabOperation: + type: array + items: + $ref: "#/components/schemas/MediaGrabOperation" MediaContainerWithMetadata: + description: A MediaContainer that includes metadata items. When `includeCollections=1` is passed to endpoints such as `/library/sections/{sectionId}/all`, this container may also include `Collection` items. type: object + example: + MediaContainer: + identifier: com.plexapp.plugins.library + size: 1 + Metadata: [] properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - type: object properties: Metadata: type: array items: - $ref: '#/components/schemas/Metadata' + $ref: "#/components/schemas/Metadata" MediaContainerWithNestedMetadata: type: object + example: + MediaContainer: + identifier: com.plexapp.plugins.library + size: 1 + Metadata: [] properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - type: object properties: MetadataItem: @@ -15048,21 +58349,26 @@ components: items: type: object allOf: - - $ref: '#/components/schemas/Metadata' + - $ref: "#/components/schemas/Metadata" - type: object properties: MetadataItem: type: array items: - $ref: '#/components/schemas/Items' + $ref: "#/components/schemas/Items" description: Nested metadata items type: object MediaContainerWithPlaylistMetadata: type: object + example: + MediaContainer: + identifier: com.plexapp.plugins.library + size: 1 + Metadata: [] properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - type: object properties: Metadata: @@ -15080,6 +58386,10 @@ components: duration: description: The total duration of the playlist in ms type: integer + durationInSeconds: + description: Total duration in seconds (redundant but present in XML). + type: integer + example: 7200 key: description: Leads to a list of items in the playlist. type: string @@ -15093,31 +58403,100 @@ components: - audio - video - photo + radio: + description: Whether this is a generated radio playlist. + type: boolean + example: false smart: description: Whether or not the playlist is smart. type: boolean specialPlaylistType: description: If this is a special playlist, this returns its type (e.g. favorites). type: string - - $ref: '#/components/schemas/Metadata' + - $ref: "#/components/schemas/Metadata" + MediaContainerWithPlayQueue: + description: A media container representing a play queue. + example: + playQueueID: 1 + playQueueSelectedItemID: 1 + playQueueSelectedItemOffset: 0 + playQueueTotalCount: 10 + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + playQueueID: + type: integer + example: 42 + playQueueLastAddedItemID: + type: integer + example: 123 + playQueueSelectedItemID: + type: integer + example: 1 + playQueueSelectedItemOffset: + type: integer + example: 0 + playQueueSelectedMetadataItemID: + type: integer + example: 456 + playQueueShuffled: + type: boolean + example: false + playQueueSourceURI: + type: string + example: library://abc123/item/%2Flibrary%2Fmetadata%2F1 + playQueueTotalCount: + type: integer + example: 50 + playQueueVersion: + type: integer + example: 3 MediaContainerWithSettings: type: object + example: + MediaContainer: + identifier: com.plexapp.system.settings + size: 1 + Setting: [] properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - type: object properties: Setting: type: array items: - $ref: '#/components/schemas/Setting' + $ref: "#/components/schemas/Setting" + MediaContainerWithSorts: + type: object + example: + MediaContainer: + identifier: com.plexapp.plugins.library + size: 1 + Sort: [] + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Directory: + type: array + items: + $ref: "#/components/schemas/Sort" MediaContainerWithStatus: type: object + example: + MediaContainer: + identifier: com.plexapp.system + size: 1 + Status: [] properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - type: object properties: status: @@ -15125,20 +58504,381 @@ components: type: integer MediaContainerWithSubscription: type: object + example: + MediaContainer: + identifier: com.plexapp.system + size: 1 + MediaSubscription: [] properties: MediaContainer: allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - type: object properties: MediaSubscription: type: array items: - $ref: '#/components/schemas/MediaSubscription' + $ref: "#/components/schemas/MediaSubscription" + MediaContainerWithTags: + type: object + example: + MediaContainer: + identifier: com.plexapp.plugins.library + size: 1 + Tag: [] + properties: + MediaContainer: + allOf: + - $ref: "#/components/schemas/MediaContainer" + - type: object + properties: + Directory: + type: array + items: + $ref: "#/components/schemas/Tag" + MediaGrabber: + type: object + example: + title: string value + identifier: string value + protocol: string value + properties: + title: + type: string + identifier: + type: string + protocol: + type: string MediaGrabOperation: - description: | - A media grab opration represents a scheduled or active recording of media + description: A media grab operation represents a scheduled or active recording of media type: object + example: + currentSize: 1 + grabberIdentifier: string value + grabberProtocol: string value + id: string value + key: string value + mediaIndex: 1 + mediaSubscriptionID: 1 + Metadata: + title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + percent: 1 + provider: string value + status: inactive properties: currentSize: type: integer @@ -15155,7 +58895,7 @@ components: mediaSubscriptionID: type: integer Metadata: - $ref: '#/components/schemas/Metadata' + $ref: "#/components/schemas/Metadata" percent: type: number provider: @@ -15171,10 +58911,389 @@ components: - error - postprocessing - paused + MediaQuery: + description: |- + A querystring-based filtering language used to select subsets of media. When provided as an object, properties are serialized as a querystring using form style with explode. + + Only the defined properties below are allowed. The object serializes to a querystring format like: `type=4&sourceType=2&sort=duration:desc,index` + type: object + example: + type: 4 + sourceType: 2 + sort: duration:desc,index + additionalProperties: false + properties: + type: + $ref: "#/components/schemas/MediaType" + description: The type of media to retrieve or filter by. + group: + description: Field to group results by (similar to SQL GROUP BY) + type: string + limit: + description: Maximum number of results to return + type: integer + sort: + description: Field(s) to sort by, with optional modifiers. Use comma to separate multiple fields, and :desc or :nullsLast for modifiers (e.g., "duration:desc,index") + type: string + sourceType: + description: Change the default level to which fields refer (used with type for hierarchical queries) + type: integer MediaSubscription: - description: | - A media subscription contains a representation of metadata desired to be recorded + description: A media subscription contains a representation of metadata desired to be recorded type: object + example: + title: string value + type: 1 + airingsType: New Airings Only + createdAt: 1 + Directory: {} + durationTotal: 1 + key: string value + librarySectionTitle: string value + locationPath: string value + MediaGrabOperation: + - currentSize: 1 + grabberIdentifier: string value + grabberProtocol: string value + id: string value + key: string value + mediaIndex: 1 + mediaSubscriptionID: 1 + Metadata: + title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + percent: 1 + provider: string value + status: inactive + Playlist: {} + Setting: + - type: bool + default: string value + advanced: true + enumValues: string value + group: string value + hidden: true + id: string value + label: string value + summary: string value + value: string value + storageTotal: 1 + targetLibrarySectionID: 1 + targetSectionLocationID: 1 + Video: {} properties: title: type: string @@ -15190,6 +59309,7 @@ components: type: integer Directory: description: Media Matching Hints + type: object additionalProperties: true durationTotal: description: Only included if `includeStorage` is specified @@ -15203,14 +59323,15 @@ components: MediaGrabOperation: type: array items: - $ref: '#/components/schemas/MediaGrabOperation' + $ref: "#/components/schemas/MediaGrabOperation" Playlist: description: Media Matching Hints + type: object additionalProperties: true Setting: type: array items: - $ref: '#/components/schemas/Setting' + $ref: "#/components/schemas/Setting" storageTotal: description: Only included if `includeStorage` is specified type: integer @@ -15222,21 +59343,396 @@ components: type: integer Video: description: Media Matching Hints + type: object additionalProperties: true + MediaType: + description: |- + The type of media to retrieve or filter by. + + 1 = movie + 2 = show + 3 = season + 4 = episode + 5 = artist + 6 = album + 7 = track + 8 = photo_album + 9 = photo + + E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries + type: integer + enum: + - 1 + - 2 + - 3 + - 4 + - 5 + - 6 + - 7 + - 8 + - 9 + example: 2 + x-speakeasy-enums: + - MOVIE + - TV_SHOW + - SEASON + - EPISODE + - ARTIST + - ALBUM + - TRACK + - PHOTO_ALBUM + - PHOTO + MediaTypeString: + description: The type of media content in the Plex library. This can represent videos, music, or photos. + type: string + enum: + - movie + - show + - season + - episode + - artist + - album + - track + - photoalbum + - photo + - collection + example: movie + x-speakeasy-enums: + - MOVIE + - TV_SHOW + - SEASON + - EPISODE + - ARTIST + - ALBUM + - TRACK + - PHOTO_ALBUM + - PHOTO + - COLLECTION Metadata: - description: | + description: |- Items in a library are referred to as "metadata items." These metadata items are distinct from "media items" which represent actual instances of media that can be consumed. Consider a TV library that has a single video file in it for a particular episode of a show. The library has a single media item, but it has three metadata items: one for the show, one for the season, and one for the episode. Consider a movie library that has two video files in it: the same movie, but two different resolutions. The library has a single metadata item for the movie, but that metadata item has two media items, one for each resolution. Additionally a "media item" will have one or more "media parts" where the the parts are intended to be watched together, such as a CD1 and CD2 parts of the same movie. Note that when a metadata item has multiple media items, those media items should be isomorphic. That is, a 4K version and 1080p version of a movie are different versions of the same movie. They have the same duration, same summary, same rating, etc. and they can generally be considered interchangeable. A theatrical release vs. director's cut vs. unrated version on the other hand would be separate metadata items. Metadata items can often live in a hierarchy with relationships between them. For example, the metadata item for an episodes is associated with a season metadata item which is associated with a show metadata item. A similar hierarchy exists with track, album, and artist and photos and photo album. The relationships may be expressed via relative terms and absolute terms. For example, "leaves" refer to metadata items which has associated media (there is no media for a season nor show). A show will have "children" in the form of seasons and a season will have "children" in the form of episodes and episodes have "parent" in the form of a season which has a "parent" in the form of a show. Similarly, a show has "grandchildren" in the form of episodse and an episode has a "grandparent" in the form of a show. type: object + example: + title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 additionalProperties: true - required: - - addedAt - - key - - title - - type properties: title: description: The title of the item (e.g. “300” or “The Simpsons”) @@ -15255,7 +59751,11 @@ components: art: description: When present, the URL for the background artwork for the item. type: string - example: "/library/metadata/58683/art/1703239236" + example: /library/metadata/58683/art/1703239236 + artBlurHash: + description: Blur hash for background art. + type: string + example: LhE3*HRjR*a#ogWBofj[bbf6ofa# audienceRating: description: Some rating systems separate reviewer ratings from audience ratings type: number @@ -15268,18 +59768,18 @@ components: Autotag: type: array items: - $ref: '#/components/schemas/Tag' + $ref: "#/components/schemas/Tag" banner: description: When present, the URL for a banner graphic for the item. type: string chapterSource: description: When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). type: string - example: "media" + example: media childCount: + description: The number of child items associated with this media item. type: integer format: int32 - description: "The number of child items associated with this media item." example: 1 composite: description: When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). @@ -15290,31 +59790,43 @@ components: Country: type: array items: - $ref: '#/components/schemas/Tag' + $ref: "#/components/schemas/Tag" Director: type: array items: - $ref: '#/components/schemas/Tag' + $ref: "#/components/schemas/Tag" + distance: + description: Levenshtein distance for voice search results. + type: integer + example: 2 duration: description: When present, the duration for the item, in units of milliseconds. type: integer format: int32 + editionTitle: + description: Edition string (e.g. "Director's Cut"). + type: string + example: Director's Cut + enableCreditsMarkerGeneration: + description: Whether credits marker generation is enabled for this item. + type: boolean + example: true Filter: description: Typically only seen in metadata at a library's top level type: array items: - $ref: '#/components/schemas/Filter' + $ref: "#/components/schemas/Filter" Genre: type: array items: - $ref: '#/components/schemas/Tag' + $ref: "#/components/schemas/Tag" grandparentArt: description: The `art` of the grandparent type: string grandparentGuid: + description: The GUID of the grandparent media item. type: string - description: "The GUID of the grandparent media item." - example: "plex://show/5d9c081b170e24001f2a7be4" + example: plex://show/5d9c081b170e24001f2a7be4 grandparentHero: description: The `hero` of the grandparent type: string @@ -15334,22 +59846,17 @@ components: description: The `title` of the grandparent type: string guid: + description: The globally unique identifier for the media item. type: string - description: "The globally unique identifier for the media item." - example: "plex://movie/5d7768ba96b655001fdc0408" + example: plex://movie/5d7768ba96b655001fdc0408 Guid: - x-speakeasy-name-override: guids type: array items: type: object - required: - - id properties: id: + description: The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// type: string - description: | - The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// - pattern: "^(imdb|tmdb|tvdb)://.+$" example: imdbExample: summary: IMDB example @@ -15360,13 +59867,17 @@ components: tvdbExample: summary: TVDB example value: tvdb://7945991 + pattern: ^(imdb|tmdb|tvdb)://.+$ + required: + - id + x-speakeasy-name-override: guids hero: description: When present, the URL for a hero image for the item. type: string Image: type: array items: - $ref: '#/components/schemas/Image' + $ref: "#/components/schemas/Image" index: description: When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. type: integer @@ -15374,10 +59885,18 @@ components: key: description: The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. type: string + languageOverride: + description: Per-item language override. + type: string + example: en + lastRatedAt: + description: Timestamp of the last user rating. + type: integer + example: 1704067200 lastViewedAt: allOf: - - $ref: '#/components/schemas/PlexDateTime' - - description: When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. + - $ref: "#/components/schemas/PlexDateTime" + - description: When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. leafCount: description: For shows and seasons, contains the number of total episodes. type: integer @@ -15385,19 +59904,23 @@ components: Media: type: array items: - $ref: '#/components/schemas/Media' + $ref: "#/components/schemas/Media" + musicAnalysisVersion: + description: Analysis version for music items. + type: integer + example: 1 originallyAvailableAt: description: When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. type: string format: date - example: "2022-12-14" + example: "2022-12-14T00:00:00.000Z" originalTitle: description: When present, used to indicate an item's original title, e.g. a movie's foreign title. type: string parentGuid: + description: The GUID of the parent media item. type: string - description: "The GUID of the parent media item." - example: "plex://show/5d9c081b170e24001f2a7be4" + example: plex://show/5d9c081b170e24001f2a7be4 parentHero: description: The `hero` of the parent type: string @@ -15417,6 +59940,10 @@ components: parentTitle: description: The `title` of the parent type: string + playlistItemID: + description: Item ID within a playlist. + type: integer + example: 42 primaryExtraKey: description: Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. type: string @@ -15432,7 +59959,7 @@ components: Rating: type: array items: - $ref: '#/components/schemas/Tag' + $ref: "#/components/schemas/Tag" x-speakeasy-name-override: RatingArray ratingCount: description: Number of ratings under this metadata @@ -15447,7 +59974,7 @@ components: Role: type: array items: - $ref: '#/components/schemas/Tag' + $ref: "#/components/schemas/Tag" search: description: Indicates this is a search directory type: boolean @@ -15462,6 +59989,10 @@ components: enum: - '0' - '1' + skipCount: + description: Number of times this track has been skipped. + type: integer + example: 3 skipParent: description: When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). oneOf: @@ -15470,11 +60001,19 @@ components: enum: - '0' - '1' + slug: + description: URL-friendly slug for the item. + type: string + example: the-matrix Sort: description: Typically only seen in metadata at a library's top level type: array items: - $ref: '#/components/schemas/Sort' + $ref: "#/components/schemas/Sort" + sourceURI: + description: Remote or shared server item URI. + type: string + example: provider://tv.plex.provider.vod/library/metadata/5d776d057ae4e7001f65e7d0 studio: description: When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). type: string @@ -15490,17 +60029,25 @@ components: theme: description: When present, the URL for theme music for the item (usually only for TV shows). type: string - example: "/library/metadata/1/theme/1705636920" + example: /library/metadata/1/theme/1705636920 thumb: description: When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. type: string - example: "/library/metadata/58683/thumb/1703239236" + example: /library/metadata/58683/thumb/1703239236 + thumbBlurHash: + description: Blur hash for thumbnail. + type: string + example: LhE3*HRjR*a#ogWBofj[bbf6ofa# titleSort: description: Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). type: string updatedAt: description: In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). type: integer + useOriginalTitle: + description: Whether to display the original title. + type: boolean + example: false userRating: description: When the user has rated an item, this contains the user rating type: number @@ -15522,23 +60069,170 @@ components: Writer: type: array items: - $ref: '#/components/schemas/Tag' + $ref: "#/components/schemas/Tag" year: description: When present, the year associated with the item's release (e.g. release year for a movie). type: integer format: int32 + required: + - addedAt + - key + - title + - type + x-speakeasy-unknown-fields: true + NotificationContainer: + type: object + example: + type: string value + PlaySessionStateNotification: + - controllable: string value + guid: string value + key: string value + playQueueID: 1 + playQueueItemID: 1 + ratingKey: string value + sessionKey: string value + state: playing + transcodeSession: string value + url: string value + viewOffset: 1 + ReachabilityNotification: + - status: string value + size: 1 + StatusNotification: + - title: string value + description: string value + type: string value + TimelineEntry: + - title: string value + type: 1 + itemID: 1 + metadataState: string value + playQueueItemID: 1 + state: 1 + properties: + type: + description: The notification type + type: string + PlaySessionStateNotification: + type: array + items: + $ref: "#/components/schemas/PlaySessionStateNotification" + ReachabilityNotification: + type: array + items: + $ref: "#/components/schemas/ReachabilityNotification" + size: + description: Number of notifications + type: integer + StatusNotification: + type: array + items: + $ref: "#/components/schemas/StatusNotification" + TimelineEntry: + type: array + items: + $ref: "#/components/schemas/TimelineEntry" Part: - description: | - `Part` represents a particular file or "part" of a media item. The part is the playable unit of the media hierarchy. Suppose that a movie library contains a movie that is broken up into files, reminiscent of a movie split across two BDs. The metadata item represents information about the movie, the media item represents this instance of the movie at this resolution and quality, and the part items represent the two playable files. If another media were added which contained the joining of these two parts transcoded down to a lower resolution, then this metadata would contain 2 medias, one with 2 parts and one with 1 part. + description: '`Part` represents a particular file or "part" of a media item. The part is the playable unit of the media hierarchy. Suppose that a movie library contains a movie that is broken up into files, reminiscent of a movie split across two BDs. The metadata item represents information about the movie, the media item represents this instance of the movie at this resolution and quality, and the part items represent the two playable files. If another media were added which contained the joining of these two parts transcoded down to a lower resolution, then this metadata would contain 2 medias, one with 2 parts and one with 1 part.' type: object + example: + accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value additionalProperties: true - required: - - id - - key properties: accessible: + description: Indicates if the part is accessible. type: boolean - description: "Indicates if the part is accessible." example: true audioProfile: type: string @@ -15547,14 +60241,18 @@ components: description: The container of the media file, such as `mp4` or `mkv` type: string example: mov + deepAnalysisVersion: + description: Deep analysis version for this part. + type: integer + example: 2 duration: description: The duration of the media item, in milliseconds type: integer format: int32 example: 150192 exists: + description: Indicates if the part exists. type: boolean - description: "Indicates if the part exists." example: true file: description: The local file path at which the part is stored on the server @@ -15569,7 +60267,7 @@ components: example: 1 indexes: type: string - example: "sd" + example: sd key: description: The key from which the media can be streamed type: string @@ -15577,6 +60275,18 @@ components: optimizedForStreaming: type: boolean example: false + packetLength: + description: RTP packet length for streaming. + type: integer + example: 188 + protocol: + description: Streaming protocol (e.g. dash, hls, direct). + type: string + example: dash + requiredBandwidths: + description: Comma-separated list of bandwidth requirements. + type: string + example: 10000,15000,20000 size: description: The size of the media, in bytes type: integer @@ -15585,13 +60295,108 @@ components: Stream: type: array items: - $ref: '#/components/schemas/Stream' + $ref: "#/components/schemas/Stream" + syncItemId: + description: Mobile sync item association ID. + type: integer + example: 12345 + syncState: + description: Sync state (e.g. pending, downloaded, processing). + type: string + example: pending videoProfile: type: string example: main + required: + - id + - key + PlaybackHistoryMetadata: + type: object + example: + title: string value + type: string value + accountID: 1 + deviceID: 1 + grandparentRatingKey: string value + grandparentTitle: string value + historyKey: string value + index: 1 + key: string value + librarySectionID: string value + originallyAvailableAt: string value + parentIndex: 1 + parentTitle: string value + ratingKey: string value + thumb: string value + viewedAt: 1 + properties: + title: + description: The title of the item played + type: string + type: + description: The metadata type of the item played + type: string + accountID: + description: The account id of this playback + type: integer + deviceID: + description: The device id which played the item + type: integer + grandparentRatingKey: + description: The rating key of the grandparent item + type: string + grandparentTitle: + description: The title of the grandparent item (e.g. show name for an episode) + type: string + historyKey: + description: The key for this individual history item + type: string + index: + description: The index of the item (e.g. episode number) + type: integer + key: + description: The metadata key for the item played + type: string + librarySectionID: + description: The library section id containing the item played + type: string + originallyAvailableAt: + description: The originally available at of the item played + type: string + parentIndex: + description: The index of the parent item (e.g. season number) + type: integer + parentTitle: + description: The title of the parent item (e.g. season name for an episode) + type: string + ratingKey: + description: The rating key for the item played + type: string + thumb: + description: The thumb of the item played + type: string + viewedAt: + description: The time when the item was played + type: integer Player: description: Information about the player being used for playback type: object + example: + title: string value + address: string value + local: true + machineIdentifier: string value + model: string value + platform: string value + platformVersion: string value + product: string value + relayed: true + remotePublicAddress: string value + secure: true + state: string value + userID: 1 + vendor: string value + version: string value properties: title: description: The title of the client @@ -15629,29 +60434,239 @@ components: state: description: The client's last reported state type: string - userID: - description: The id of the user - type: integer - vendor: - description: The vendor of the client + userID: + description: The id of the user + type: integer + vendor: + description: The vendor of the client + type: string + version: + description: The version of the client + type: string + PlayQueueResponse: + type: object + example: + playQueueID: 1 + playQueueLastAddedItemID: string value + playQueueSelectedItemID: 1 + playQueueSelectedItemOffset: 1 + playQueueSelectedMetadataItemID: 1 + playQueueShuffled: true + playQueueSourceURI: string value + playQueueTotalCount: 1 + playQueueVersion: 1 + properties: + playQueueID: + description: The ID of the play queue, which is used in subsequent requests. + type: integer + playQueueLastAddedItemID: + description: Defines where the "Up Next" region starts + type: string + playQueueSelectedItemID: + description: The queue item ID of the currently selected item. + type: integer + playQueueSelectedItemOffset: + description: The offset of the selected item in the play queue, from the beginning of the queue. + type: integer + playQueueSelectedMetadataItemID: + description: The metadata item ID of the currently selected item (matches `ratingKey` attribute in metadata item if the media provider is a library). + type: integer + playQueueShuffled: + description: Whether or not the queue is shuffled. + type: boolean + playQueueSourceURI: + description: The original URI used to create the play queue. + type: string + playQueueTotalCount: + description: The total number of items in the play queue. + type: integer + playQueueVersion: + description: The version of the play queue. It increments every time a change is made to the play queue to assist clients in knowing when to refresh. + type: integer + PlaySessionStateNotification: + description: Real-time playback state change notification + type: object + example: + controllable: string value + guid: string value + key: string value + playQueueID: 1 + playQueueItemID: 1 + ratingKey: string value + sessionKey: string value + state: playing + transcodeSession: string value + url: string value + viewOffset: 1 + properties: + controllable: + type: string + guid: + type: string + key: + type: string + playQueueID: + type: integer + playQueueItemID: + type: integer + ratingKey: + type: string + sessionKey: + type: string + state: + type: string + enum: + - playing + - paused + - stopped + transcodeSession: + type: string + url: + type: string + viewOffset: + type: integer + PlexDateTime: + description: Unix epoch datetime in seconds + type: integer + format: int64 + example: 1556281940 + PlexDateTimeISO: + type: string + format: date-time + example: "2019-06-24T11:38:02Z" + PlexDevice: + title: PlexDevice + type: object + example: + accessToken: string value + clientIdentifier: string value + connections: + - address: string value + IPv6: true + local: true + port: 1 + protocol: http + relay: true + uri: string value + dnsRebindingProtection: true + home: true + httpsRequired: true + name: string value + natLoopbackSupported: true + owned: true + presence: true + product: string value + productVersion: string value + provides: string value + publicAddress: string value + publicAddressMatches: true + relay: true + synced: true + properties: + accessToken: + type: string + clientIdentifier: + type: string + connections: + type: array + items: + type: object + properties: + address: + description: The (ip) address or domain name used for the connection + type: string + IPv6: + description: If the connection is using IPv6 + type: boolean + local: + description: If the connection is local address + type: boolean + port: + description: The port used for the connection + type: integer + format: int32 + protocol: + description: The protocol used for the connection (http, https, etc) + type: string + enum: + - http + - https + example: http + relay: + description: If the connection is relayed through plex.direct + type: boolean + uri: + description: The full URI of the connection + type: string + required: + - protocol + - address + - port + - uri + - local + - relay + - IPv6 + createdAt: + allOf: + - $ref: "#/components/schemas/PlexDateTimeISO" + - description: The time the device was created/registered + device: + type: + - 'null' + - string + dnsRebindingProtection: + type: boolean + home: + type: boolean + httpsRequired: + type: boolean + lastSeenAt: + allOf: + - $ref: "#/components/schemas/PlexDateTimeISO" + - description: The last time the device was seen + name: + type: string + natLoopbackSupported: + type: boolean + owned: + type: boolean + ownerId: + description: ownerId is null when the device is owned by the token used to send the request + type: + - 'null' + - integer + platform: + type: + - 'null' + - string + platformVersion: + type: + - 'null' + - string + presence: + type: boolean + product: + type: string + productVersion: + type: string + provides: type: string - version: - description: The version of the client + publicAddress: type: string - PlexDateTimeISO: - type: string - format: date-time - example: '2019-06-24T11:38:02Z' - PlexDevice: - title: PlexDevice - type: object + publicAddressMatches: + type: boolean + relay: + type: boolean + sourceTitle: + type: + - 'null' + - string + synced: + type: boolean required: - name - product - productVersion - - platform - - platformVersion - - device - clientIdentifier - createdAt - lastSeenAt @@ -15670,110 +60685,519 @@ components: - dnsRebindingProtection - natLoopbackSupported - connections + PlexDownloadsResponse: + type: object + example: + MediaContainer: + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + size: 1 properties: - name: + MediaContainer: + type: object + properties: + Directory: + type: array + items: + $ref: "#/components/schemas/Directory" + size: + type: integer + ProgressResponse: + type: object + example: + MediaContainer: + size: 1 + Video: + - title: string value + type: string value + absoluteIndex: 1 + addedAt: 1 + art: string value + artBlurHash: string value + audienceRating: 1 + audienceRatingImage: string value + Autotag: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + banner: string value + chapterSource: string value + childCount: 1 + composite: string value + contentRating: string value + Country: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + Director: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + distance: 1 + duration: 1 + editionTitle: string value + enableCreditsMarkerGeneration: true + Filter: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + filterType: string value + Genre: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + grandparentArt: string value + grandparentGuid: string value + grandparentHero: string value + grandparentKey: string value + grandparentRatingKey: string value + grandparentTheme: string value + grandparentThumb: string value + grandparentTitle: string value + guid: string value + Guid: + - id: string value + hero: string value + Image: + - type: background + alt: string value + url: string value + index: 1 + key: string value + languageOverride: string value + lastRatedAt: 1 + leafCount: 1 + Media: + - aspectRatio: 1 + audioChannels: 1 + audioCodec: string value + audioProfile: string value + bitrate: 1 + container: string value + duration: 1 + has64bitOffsets: true + hasVoiceActivity: true + height: 1 + id: 1 + optimizedForStreaming: 1 + Part: + - accessible: true + audioProfile: string value + container: string value + deepAnalysisVersion: 1 + duration: 1 + exists: true + file: string value + has64bitOffsets: true + id: 1 + indexes: string value + key: string value + optimizedForStreaming: true + packetLength: 1 + protocol: string value + requiredBandwidths: string value + size: 1 + Stream: + - title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 + syncItemId: 1 + syncState: string value + videoProfile: string value + selected: true + uuid: string value + videoCodec: string value + videoFrameRate: string value + videoProfile: string value + videoResolution: string value + width: 1 + musicAnalysisVersion: 1 + originallyAvailableAt: string value + originalTitle: string value + parentGuid: string value + parentHero: string value + parentIndex: 1 + parentKey: string value + parentRatingKey: string value + parentThumb: string value + parentTitle: string value + playlistItemID: 1 + primaryExtraKey: string value + prompt: string value + rating: 1 + Rating: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + ratingCount: 1 + ratingImage: string value + ratingKey: string value + Role: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + search: true + secondary: true + skipChildren: true + skipCount: 1 + skipParent: true + slug: string value + Sort: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + default: asc + defaultDirection: asc + descKey: string value + firstCharacterKey: string value + sourceURI: string value + studio: string value + subtype: string value + summary: string value + tagline: string value + theme: string value + thumb: string value + thumbBlurHash: string value + titleSort: string value + updatedAt: 1 + useOriginalTitle: true + userRating: 1 + viewCount: 1 + viewedLeafCount: 1 + viewOffset: 1 + Writer: + - confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value + year: 1 + properties: + MediaContainer: + type: object + properties: + size: + type: integer + Video: + type: array + items: + $ref: "#/components/schemas/Metadata" + Provider: + description: A media provider registered with the PMS. + type: object + example: + title: string value + identifier: string value + Protocol: string value + types: string value + properties: + title: + description: Human-readable provider title. type: string - product: + example: Plex VOD + identifier: + description: Unique provider identifier. type: string - productVersion: + example: tv.plex.provider.vod + Protocol: + description: Protocol version used by the provider. type: string - platform: - type: - - "null" - - string - platformVersion: - type: - - "null" - - string - device: - type: - - "null" - - string - clientIdentifier: + example: '1.0' + types: + description: Content types provided. type: string - createdAt: - allOf: - - $ref: '#/components/schemas/PlexDateTimeISO' - - description: The time the device was created/registered - lastSeenAt: - allOf: - - $ref: '#/components/schemas/PlexDateTimeISO' - - description: The last time the device was seen - provides: + example: movie,show + ProviderFeature: + description: A feature supported by a media provider. + type: object + example: + title: string value + type: string value + key: search + properties: + title: + description: Human-readable feature title. type: string - ownerId: - description: ownerId is null when the device is owned by the token used to send the request - type: - - "null" - - integer - sourceTitle: - type: - - "null" - - string - publicAddress: + example: Search + type: + description: Feature type. type: string - accessToken: + example: content + key: + description: Feature key identifier. type: string - owned: - type: boolean - home: - type: boolean - synced: - type: boolean - relay: - type: boolean - presence: - type: boolean - httpsRequired: - type: boolean - publicAddressMatches: - type: boolean - dnsRebindingProtection: - type: boolean - natLoopbackSupported: - type: boolean - connections: + enum: + - search + - metadata + - content + - match + - manage + - timeline + - rate + - playqueue + - playlist + - subscribe + - promoted + - continuewatching + - collection + - actions + - imagetranscoder + - queryParser + - grid + example: search + ReachabilityNotification: + description: Server reachability status change notification + type: object + example: + status: string value + properties: + status: + type: string + Release: + type: object + example: + added: string value + downloadURL: string value + fixed: string value + key: string value + state: available + version: string value + properties: + added: + description: A list of what has been added in this version + type: string + downloadURL: + description: The URL of where this update is available + type: string + fixed: + description: A list of what has been fixed in this version + type: string + key: + description: The URL key of the update + type: string + state: + description: |- + The status of this update. + + - available - This release is available + - downloading - This release is downloading + - downloaded - This release has been downloaded + - installing - This release is installing + - tonight - This release will be installed tonight + - skipped - This release has been skipped + - error - This release has an error + - notify - This release is only notifying it is available (typically because it cannot be installed on this setup) + - done - This release is complete + type: string + enum: + - available + - downloading + - downloaded + - installing + - tonight + - skipped + - error + - notify + - done + version: + description: The version available + type: string + ServerAccessTokensResponse: + type: object + example: + accessTokens: + - expiresAt: string value + scope: string value + token: string value + properties: + accessTokens: type: array items: type: object - required: - - protocol - - address - - port - - uri - - local - - relay - - IPv6 properties: - protocol: - description: The protocol used for the connection (http, https, etc) - example: "http" + expiresAt: type: string - enum: - - http - - https - address: - description: The (ip) address or domain name used for the connection + scope: type: string - port: - description: The port used for the connection - type: integer - format: int32 - uri: - description: The full URI of the connection + token: type: string - local: - description: If the connection is local address - type: boolean - relay: - description: If the connection is relayed through plex.direct - type: boolean - IPv6: - description: If the connection is using IPv6 - type: boolean ServerConfiguration: + example: + friendlyName: My Plex Server + machineIdentifier: abc123 allOf: - - $ref: '#/components/schemas/MediaContainer' + - $ref: "#/components/schemas/MediaContainer" - type: object properties: allowCameraUpload: @@ -15797,7 +61221,10 @@ components: countryCode: type: string diagnostics: - type: string + description: Comma-separated list of enabled diagnostics modules. + type: array + items: + type: string eventStream: type: boolean friendlyName: @@ -15829,10 +61256,14 @@ components: myPlexUsername: type: string offlineTranscode: - example: 1 + description: Whether offline transcoding is enabled. + type: integer + format: int32 ownerFeatures: - description: A comma-separated list of features which are enabled for the server owner - type: string + description: List of enabled owner features. + type: array + items: + type: string platform: type: string platformVersion: @@ -15862,11 +61293,20 @@ components: transcoderVideo: type: boolean transcoderVideoBitrates: - description: The suggested video quality bitrates to present to the user + description: List of supported transcoder video bitrates. + type: array + items: + type: string transcoderVideoQualities: - type: string + description: List of supported transcoder video qualities. + type: array + items: + type: string transcoderVideoResolutions: - description: The suggested video resolutions to the above quality bitrates + description: List of supported transcoder video resolutions. + type: array + items: + type: string updatedAt: type: integer updater: @@ -15875,10 +61315,56 @@ components: type: string voiceSearch: type: boolean + ServerUserFeaturesResponse: + type: object + example: + features: + - type: string value + Directory: + - title: string value + type: string value + art: string value + content: true + filter: string value + hasPrefs: true + hasStoreServices: true + hubKey: string value + identifier: string value + key: string value + lastAccessedAt: 1 + Pivot: + - title: string value + type: string value + context: string value + id: string value + key: string value + symbol: string value + share: 1 + thumb: string value + titleBar: string value + key: string value + properties: + features: + type: array + items: + $ref: "#/components/schemas/Feature" Session: description: Information about the playback session type: object + example: + title: string value + bandwidth: 1 + id: string value + location: lan + sessionKey: string value + userID: 1 + uuid: string value + additionalProperties: true properties: + title: + description: Title of the media being played. + type: string + example: The Matrix bandwidth: description: The bandwidth used by this client's playback in kbps type: integer @@ -15891,9 +61377,33 @@ components: enum: - lan - wan + sessionKey: + description: Unique session key for this playback session. + type: string + example: abc123 + userID: + description: ID of the user owning this session. + type: integer + example: 12345 + uuid: + description: UUID of the playback session. + type: string + example: 5d776d057ae4e7001f65e7d0 + x-speakeasy-unknown-fields: true Setting: description: A configuration setting or preference type: object + example: + type: bool + default: string value + advanced: true + enumValues: string value + group: string value + hidden: true + id: string value + label: string value + summary: string value + value: string value properties: type: description: The type of the value of this setting @@ -15937,10 +61447,14 @@ components: - type: number - type: boolean Sort: + example: + default: asc + defaultDirection: asc + descKey: titleSort:desc + key: titleSort allOf: - - $ref: '#/components/schemas/Directory' - - description: | - Each `Sort` object contains a description of the sort field. + - $ref: "#/components/schemas/Directory" + - description: Each `Sort` object contains a description of the sort field. type: object properties: title: @@ -15967,149 +61481,284 @@ components: key: description: The key to use in the sort field to make items sort by this item type: string + StatusNotification: + description: Server status notification (e.g. library scan complete) + type: object + example: + title: string value + description: string value + type: string value + properties: + title: + type: string + description: + type: string + type: + type: string Stream: - description: | - `Stream` represents a particular stream from a media item, such as the video stream, audio stream, or subtitle stream. The stream may either be part of the file represented by the parent `Part` or, especially for subtitles, an external file. The stream contains more detailed information about the specific stream. For example, a video may include the `aspectRatio` at the `Media` level, but detailed information about the video stream like the color space will be included on the `Stream` for the video stream. Note that photos do not have streams (mostly as an optimization). + description: '`Stream` represents a particular stream from a media item, such as the video stream, audio stream, or subtitle stream. The stream may either be part of the file represented by the parent `Part` or, especially for subtitles, an external file. The stream contains more detailed information about the specific stream. For example, a video may include the `aspectRatio` at the `Media` level, but detailed information about the video stream like the color space will be included on the `Stream` for the video stream. Note that photos do not have streams (mostly as an optimization).' type: object + example: + title: string value + format: string value + default: true + albumGain: 1 + albumPeak: 1 + albumRange: 1 + audioChannelLayout: string value + bitDepth: 1 + bitrate: 1 + bitrateMode: cbr + canAutoSync: true + channels: 1 + chromaLocation: string value + chromaSubsampling: string value + closedCaptions: true + codec: string value + codedHeight: 1 + codedWidth: 1 + colorPrimaries: string value + colorRange: string value + colorSpace: string value + colorTrc: string value + displayTitle: string value + DOVIBLCompatID: 1 + DOVIBLPresent: true + DOVIELPresent: true + DOVILevel: 1 + DOVIPresent: true + DOVIProfile: 1 + DOVIRPUPresent: true + DOVIVersion: string value + dub: true + embeddedInVideo: string value + endRamp: string value + extendedDisplayTitle: string value + forced: true + frameRate: 1 + gain: 1 + hasScalingMatrix: true + headerCompression: true + hearingImpaired: true + height: 1 + id: 1 + index: 1 + key: string value + language: string value + languageCode: string value + languageTag: string value + level: 1 + loudness: 1 + lra: 1 + minLines: 1 + original: true + peak: 1 + perfectMatch: true + profile: string value + provider: string value + providerTitle: string value + refFrames: 1 + samplingRate: 1 + scanType: string value + score: 1 + selected: true + sourceKey: string value + startRamp: string value + streamIdentifier: 1 + timed: true + transient: true + userID: 1 + visualImpaired: true + width: 1 additionalProperties: true - required: - - id - - key - - codec - - displayTitle - - streamType properties: + title: + description: Optional title for the stream (e.g., language variant). + type: string + example: SDH + format: + description: Format of the stream (e.g., srt). + type: string + example: srt default: - type: boolean description: Indicates if this stream is default. - example: true - audioChannelLayout: - type: string - description: Audio channel layout. - example: 5.1(side) - channels: - type: integer - format: int32 - description: Number of audio channels (for audio streams). - example: 6 - bitDepth: - type: integer - format: int32 - description: Bit depth of the video stream. - example: 10 - DOVIBLCompatID: - type: integer - format: int32 - description: Dolby Vision BL compatibility ID. - example: 1 - DOVIBLPresent: - type: boolean - description: Indicates if Dolby Vision BL is present. - example: true - DOVIELPresent: - type: boolean - description: Indicates if Dolby Vision EL is present. - example: false - DOVILevel: - type: integer - format: int32 - description: Dolby Vision level. - example: 6 - DOVIPresent: type: boolean - description: Indicates if Dolby Vision is present. example: true - DOVIProfile: + albumGain: + description: ReplayGain album gain in dB. + type: number + example: -8.5 + albumPeak: + description: ReplayGain album peak amplitude. + type: number + example: 0.95 + albumRange: + description: ReplayGain album dynamic range in dB. + type: number + example: 12.3 + audioChannelLayout: + description: Audio channel layout. + type: string + example: 5.1(side) + bitDepth: + description: Bit depth of the video stream. type: integer format: int32 - description: Dolby Vision profile. - example: 8 - DOVIRPUPresent: - type: boolean - description: Indicates if Dolby Vision RPU is present. - example: true - DOVIVersion: - type: string - description: Dolby Vision version. - example: '1.0' + example: 10 bitrate: + description: Bitrate of the stream. type: integer format: int32 - description: Bitrate of the stream. example: 24743 + bitrateMode: + description: Audio bitrate mode (cbr or vbr). + type: string + enum: + - cbr + - vbr + example: vbr canAutoSync: description: Indicates if the stream can auto-sync. + type: boolean example: false oneOf: - type: boolean - type: string - enum: ["0", "1"] + enum: + - '0' + - '1' + channels: + description: Number of audio channels (for audio streams). + type: integer + format: int32 + example: 6 chromaLocation: - type: string description: Chroma sample location. + type: string example: topleft chromaSubsampling: - type: string description: Chroma subsampling format. - example: '4:2:0' + type: string + example: 14520 + closedCaptions: + type: boolean + example: true + codec: + description: Codec used by the stream. + type: string + example: hevc codedHeight: + description: Coded video height. type: integer format: int32 - description: Coded video height. example: 1608 codedWidth: + description: Coded video width. type: integer format: int32 - description: Coded video width. example: 3840 - closedCaptions: - type: boolean - example: true - codec: - description: Codec used by the stream. - type: string - example: hevc colorPrimaries: - type: string description: Color primaries used. + type: string example: bt2020 colorRange: - type: string description: Color range (e.g., tv). + type: string example: tv colorSpace: - type: string description: Color space. + type: string example: bt2020nc colorTrc: - type: string description: Color transfer characteristics. + type: string example: smpte2084 displayTitle: description: Display title for the stream. type: string example: 4K DoVi/HDR10 (HEVC Main 10) - extendedDisplayTitle: + DOVIBLCompatID: + description: Dolby Vision BL compatibility ID. + type: integer + format: int32 + example: 1 + DOVIBLPresent: + description: Indicates if Dolby Vision BL is present. + type: boolean + example: true + DOVIELPresent: + description: Indicates if Dolby Vision EL is present. + type: boolean + example: false + DOVILevel: + description: Dolby Vision level. + type: integer + format: int32 + example: 6 + DOVIPresent: + description: Indicates if Dolby Vision is present. + type: boolean + example: true + DOVIProfile: + description: Dolby Vision profile. + type: integer + format: int32 + example: 8 + DOVIRPUPresent: + description: Indicates if Dolby Vision RPU is present. + type: boolean + example: true + DOVIVersion: + description: Dolby Vision version. + type: string + example: '1.0' + dub: + description: Indicates if the stream is a dub. + type: boolean + example: true + embeddedInVideo: + type: string + example: progressive + endRamp: + description: Loudness ramp end type. type: string + example: none + extendedDisplayTitle: description: Extended display title for the stream. + type: string example: 4K DoVi/HDR10 (HEVC Main 10) + forced: + type: boolean + example: true frameRate: + description: Frame rate of the stream. type: number format: float - description: Frame rate of the stream. example: 23.976 + gain: + description: Track replay gain in dB. + type: number + example: -6.2 hasScalingMatrix: type: boolean example: false + headerCompression: + description: Indicates whether header compression is enabled. + type: boolean + example: true + hearingImpaired: + description: Indicates if the stream is for the hearing impaired. + type: boolean + example: true height: + description: Height of the video stream. type: integer format: int32 - description: Height of the video stream. example: 1602 id: + description: Unique stream identifier. type: integer format: int32 - description: Unique stream identifier. example: 1002625 index: description: Index of the stream. @@ -16121,73 +61770,87 @@ components: type: string example: /library/streams/216389 language: - type: string description: Language of the stream. + type: string example: English languageCode: description: ISO language code. type: string example: eng languageTag: - type: string description: Language tag (e.g., en). - example: en - format: type: string - description: Format of the stream (e.g., srt). - example: srt - headerCompression: - type: boolean - description: Indicates whether header compression is enabled. - example: true + example: en level: + description: Video level. type: integer format: int32 - description: Video level. example: 150 + loudness: + description: Integrated loudness in LUFS. + type: number + example: -14 + lra: + description: Loudness range in LU. + type: number + example: 8.5 + minLines: + description: Minimum lines in the lyric file. + type: integer + example: 10 original: - type: boolean description: Indicates if this is the original stream. + type: boolean + example: true + peak: + description: Track peak amplitude. + type: number + example: 0.98 + perfectMatch: + description: Whether the subtitle is an exact match. + type: boolean example: true profile: - type: string description: Video profile. + type: string example: main 10 + provider: + description: Lyric or subtitle provider name. + type: string + example: OpenSubtitles + providerTitle: + description: Subtitle provider display name. + type: string + example: OpenSubtitles.org refFrames: + description: Number of reference frames. type: integer format: int32 - description: Number of reference frames. example: 1 samplingRate: + description: Sampling rate for the audio stream. type: integer format: int32 - description: Sampling rate for the audio stream. example: 48000 scanType: type: string example: progressive - embeddedInVideo: - type: string - example: progressive + score: + description: Subtitle match confidence score (0-100). + type: number + example: 95.5 selected: - type: boolean description: Indicates if this stream is selected (applicable for audio streams). - example: true - forced: - type: boolean - example: true - hearingImpaired: - type: boolean - description: Indicates if the stream is for the hearing impaired. - example: true - dub: type: boolean - description: Indicates if the stream is a dub. example: true - title: + sourceKey: + description: Source identifier for the subtitle. type: string - description: Optional title for the stream (e.g., language variant). - example: SDH + example: opensubtitles + startRamp: + description: Loudness ramp start type. + type: string + example: none streamIdentifier: type: integer format: int32 @@ -16205,23 +61868,62 @@ components: - VIDEO - AUDIO - SUBTITLE - - description: | + - description: |- Stream type: - VIDEO = 1 (Video stream) - AUDIO = 2 (Audio stream) - SUBTITLE = 3 (Subtitle stream) - + timed: + description: Whether lyrics are timestamped. + type: boolean + example: true + transient: + description: Whether the subtitle is temporary or downloaded. + type: boolean + example: false + userID: + description: ID of the user who added the subtitle. + type: integer + example: 12345 + visualImpaired: + description: Whether this audio track is an audio description track. + type: boolean + example: false width: + description: Width of the video stream. type: integer format: int32 - description: Width of the video stream. example: 3840 + required: + - id + - key + - codec + - displayTitle + - streamType + x-speakeasy-unknown-fields: true + SuccessResponse: + description: A simple success indicator for operations that return no meaningful data + type: object + example: + success: true + properties: + success: + type: boolean + example: true Tag: - description: | - A variety of extra information about a metadata item is included as tags. These tags use their own element names such as `Genre`, `Writer`, `Directory`, and `Role`. Individual tag types may introduce their own extra attributes. + description: A variety of extra information about a metadata item is included as tags. These tags use their own element names such as `Genre`, `Writer`, `Directory`, and `Role`. Individual tag types may introduce their own extra attributes. type: object - required: - - tag + example: + confidence: 1 + context: string value + filter: string value + id: 1 + ratingKey: string value + role: string value + tag: string value + tagKey: string value + tagType: 1 + thumb: string value properties: confidence: description: Measure of the confidence of an automatic tag @@ -16236,9 +61938,9 @@ components: type: integer format: int32 ratingKey: - description: "The rating key (Media ID) of this media item. Note: Although this is always an integer, it is represented as a string in the API." + description: 'The rating key (Media ID) of this media item. Note: Although this is always an integer, it is represented as a string in the API.' type: string - example: "58683" + example: '58683' role: description: The role this actor played type: string @@ -16250,20 +61952,130 @@ components: tagKey: description: Plex identifier for this tag which can be used to fetch additional information from plex.tv type: string - example: 5d3ee12c4cde6a001c3e0b27 - tagType: + example: 5d3ee12c4cde6a001c3e0b27 + tagType: + type: integer + format: int32 + thumb: + type: string + example: http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg + required: + - tag + Thumb: + type: string + example: /library/metadata/1/thumb/1234567890 + TimelineEntry: + description: A timeline update entry delivered via WebSocket or EventSource + type: object + example: + title: string value + type: 1 + itemID: 1 + metadataState: string value + playQueueItemID: 1 + state: 1 + properties: + title: + type: string + type: + type: integer + itemID: + type: integer + metadataState: + type: string + playQueueItemID: + type: integer + state: + type: integer + TokenExchangeRequest: + type: object + example: + clientIdentifier: string value + jwt: string value + scope: string value + properties: + clientIdentifier: + description: Unique client identifier + type: string + jwt: + description: JWT token to exchange for a Plex auth token + type: string + scope: + description: Requested scope for the token + type: string + TopUserAccount: + type: object + example: + globalViewCount: 1 + id: 1 + properties: + globalViewCount: + type: integer + id: + type: integer + TranscodeJob: + type: object + example: + title: string value + type: transcode + generatorID: 1 + key: string value + progress: 1 + ratingKey: string value + remaining: 1 + size: 1 + speed: 1 + targetTagID: 1 + thumb: string value + properties: + title: + type: string + type: + type: string + enum: + - transcode + generatorID: + type: integer + key: + type: string + progress: + type: number + minimum: 0 + maximum: 100 + ratingKey: + type: string + remaining: + description: The number of seconds remaining in this job + type: integer + size: + description: The size of the result so far + type: integer + speed: + description: The speed of the transcode; 1.0 means real-time + type: number + targetTagID: + description: The tag associated with the job. This could be the tag containing the optimizer settings. type: integer - format: int32 thumb: type: string - example: http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg - Thumb: - type: string - Title: - type: string TranscodeSession: description: The transcode session if item is currently being transcoded type: object + example: + complete: true + context: string value + duration: 1 + error: true + key: string value + progress: 1 + protocol: string value + size: 1 + sourceAudioCodec: string value + sourceVideoCodec: string value + speed: 1 + throttled: true + transcodeHwFullPipeline: true + transcodeHwRequested: true properties: complete: type: boolean @@ -16295,207 +62107,370 @@ components: type: boolean transcodeHwRequested: type: boolean - Type: - type: string + UltraBlurColors: + type: object + example: + bottomLeft: string value + bottomRight: string value + topLeft: string value + topRight: string value + properties: + bottomLeft: + description: The color (hex) for the bottom left quadrant. + type: string + bottomRight: + description: The color (hex) for the bottom right quadrant. + type: string + topLeft: + description: The color (hex) for the top left quadrant. + type: string + topRight: + description: The color (hex) for the top right quadrant. + type: string + UnauthorizedErrorResponse: + type: object + example: + errors: + - code: 401 + message: Unauthorized + status: 401 + properties: + errors: + type: array + items: + type: object + properties: + code: + type: integer + format: int32 + example: 1001 + message: + type: string + example: User could not be authenticated + x-speakeasy-error-message: true + status: + type: integer + format: int32 + example: 401 + x-speakeasy-name-override: Unauthorized + UpdaterStatus: + description: Status of the PMS updater. + type: object + example: + checkedAt: 1 + downloadURL: string value + Release: + - added: string value + downloadURL: string value + fixed: string value + key: string value + state: available + version: string value + status: 1 + properties: + checkedAt: + description: Timestamp of the last update check. + type: integer + downloadURL: + description: The URL where the update is available. + type: string + Release: + type: array + items: + $ref: "#/components/schemas/Release" + status: + description: The current error code (0 means no error). + type: integer + User: + description: The user playing the content + type: object + example: + title: string value + id: string value + thumb: string value + properties: + title: + description: The username + type: string + id: + description: The id of the user + type: string + thumb: + description: Thumb image to display for the user + type: string + UserOptOutsResponse: + type: object + example: + optOuts: + - type: string value + id: string value + value: true + properties: + optOuts: + type: array + items: + type: object + properties: + type: + type: string + id: + type: string + value: + type: boolean UserPlexAccount: title: UserPlexAccount type: object - required: - - authToken - - email - - friendlyName - - hasPassword - - id - - joinedAt - - title - - twoFactorEnabled - - username - - uuid + example: + title: string value + adsConsentReminderAt: 1 + adsConsentSetAt: 1 + authToken: string value + backupCodesCreated: false + confirmed: false + country: string value + email: user@example.com + emailOnlyAuth: false + entitlements: + - string value + experimentalFeatures: false + friendlyName: string value + guest: false + hasPassword: true + home: false + homeAdmin: false + homeSize: 1 + id: 1 + joinedAt: 1 + mailingListActive: false + mailingListStatus: active + maxHomeSize: 1 + pin: string value + profile: + autoSelectAudio: true + protected: false + rememberExpiresAt: 1 + restricted: false + roles: + - string value + scrobbleTypes: string value + services: + - endpoint: https://plex.tv + identifier: string value + status: online + subscription: + active: true + features: + - string value + status: Inactive + subscriptions: + - active: true + features: + - string value + status: Inactive + thumb: https://plex.tv + twoFactorEnabled: false + username: string value + uuid: string value + additionalProperties: true properties: + title: + description: The title of the account (username or friendly name) + type: string + example: UsernameTitle adsConsent: + description: Unknown type: - boolean - 'null' - description: Unknown adsConsentReminderAt: oneOf: - - $ref: '#/components/schemas/PlexDateTime' + - $ref: "#/components/schemas/PlexDateTime" - type: 'null' adsConsentSetAt: oneOf: - - $ref: '#/components/schemas/PlexDateTime' + - $ref: "#/components/schemas/PlexDateTime" - type: 'null' anonymous: + description: Unknown type: - boolean - 'null' - description: Unknown default: false + attributionPartner: + type: + - string + - 'null' + example: null authToken: - type: string description: The account token + type: string example: CxoUzBTSV5hsxjTpFKaf backupCodesCreated: - type: boolean description: If the two-factor authentication backup codes have been created + type: boolean default: false confirmed: - type: boolean description: If the account has been confirmed + type: boolean default: false country: - type: string description: The account country + type: string example: US - maxLength: 2 minLength: 2 + maxLength: 2 email: - type: string description: The account email address + type: string format: email example: username@email.com emailOnlyAuth: - type: boolean description: If login with email only is enabled + type: boolean default: false + entitlements: + description: List of devices your allowed to use with this account + type: array + example: '[]' + items: + type: string experimentalFeatures: - type: boolean description: If experimental features are enabled + type: boolean default: false friendlyName: - type: string description: Your account full name + type: string example: friendlyUsername - entitlements: - type: array - description: List of devices your allowed to use with this account - items: - type: string - example: '[]' guest: - type: boolean description: If the account is a Plex Home guest user + type: boolean default: false hasPassword: - type: boolean description: If the account has a password + type: boolean default: true home: - type: boolean description: If the account is a Plex Home user + type: boolean default: false homeAdmin: - type: boolean description: If the account is the Plex Home admin + type: boolean default: false homeSize: - type: integer description: The number of accounts in the Plex Home - example: 1 + type: integer format: int32 + example: 1 id: - type: integer description: The Plex account ID - example: 13692262 + type: integer format: int32 + example: 13692262 joinedAt: - $ref: '#/components/schemas/PlexDateTime' + $ref: "#/components/schemas/PlexDateTime" locale: + description: The account locale type: - string - 'null' - description: The account locale mailingListActive: - type: boolean description: If you are subscribed to the Plex newsletter + type: boolean default: false mailingListStatus: description: Your current mailing list status + type: string enum: - active - unsubscribed - removed + example: active x-speakeasy-enums: - ACTIVE - UNSUBSCRIBED - REMOVED - example: active maxHomeSize: - type: integer description: The maximum number of accounts allowed in the Plex Home - example: 15 + type: integer format: int32 + example: 15 pin: - type: string - description: '[Might be removed] The hashed Plex Home PIN ' + description: '[Might be removed] The hashed Plex Home PIN' deprecated: true + type: string profile: - $ref: '#/components/schemas/UserProfile' + $ref: "#/components/schemas/UserProfile" protected: - type: boolean description: If the account has a Plex Home PIN enabled + type: boolean default: false rememberExpiresAt: - $ref: '#/components/schemas/PlexDateTime' + $ref: "#/components/schemas/PlexDateTime" restricted: - type: boolean description: If the account is a Plex Home managed user + type: boolean default: false roles: - type: array description: '[Might be removed] List of account roles. Plexpass membership listed here' + type: array items: type: string scrobbleTypes: - type: string description: Unknown + type: string services: type: array items: type: object - required: - - identifier - - endpoint - - token - - secret - - status properties: - identifier: - type: string - example: metadata-dev endpoint: type: string - example: 'https://epg.provider.plex.tv' format: uri - token: - type: - - string - - 'null' - example: DjoMtqFAGRL1uVtCyF1dKIorTbShJeqv + example: https://epg.provider.plex.tv + identifier: + type: string + example: metadata-dev secret: type: - string - 'null' status: - example: online - x-speakeasy-unknown-values: allow + type: string enum: - online - offline + example: online x-speakeasy-enums: - ONLINE - OFFLINE + x-speakeasy-unknown-values: allow + token: + type: + - string + - 'null' + example: DjoMtqFAGRL1uVtCyF1dKIorTbShJeqv + required: + - identifier + - endpoint + - token + - secret + - status subscription: - description: If the account's Plex Pass subscription is active title: Subscription + description: If the account's Plex Pass subscription is active type: object properties: + active: + description: If the account's Plex Pass subscription is active + type: boolean + example: true features: description: List of features allowed on your Plex Pass subscription type: array items: - type: string - description: | + description: |- - Android - Dolby Vision - Android - PiP - CU Sunset @@ -16600,53 +62575,54 @@ components: - Subtitles on Demand - ultrablur - web-desktop-gracenote-banner - active: - description: If the account's Plex Pass subscription is active - type: boolean - example: true - subscribedAt: - description: Date the account subscribed to Plex Pass + type: string + paymentService: + description: Payment service used for your Plex Pass subscription + type: + - string + - 'null' + plan: + description: Name of Plex Pass subscription plan type: - string - 'null' - example: '2021-04-12T18:21:12Z' status: description: String representation of subscriptionActive - example: Inactive - x-speakeasy-unknown-values: allow + type: string enum: - Inactive - Active + example: Inactive x-speakeasy-enums: - INACTIVE - ACTIVE - paymentService: - description: Payment service used for your Plex Pass subscription - type: - - string - - 'null' - plan: - description: Name of Plex Pass subscription plan + x-speakeasy-unknown-values: allow + subscribedAt: + description: Date the account subscribed to Plex Pass type: - string - 'null' + example: "2021-04-12T18:21:12Z" subscriptionDescription: + description: Description of the Plex Pass subscription type: - string - 'null' - description: Description of the Plex Pass subscription subscriptions: type: array items: title: Subscription type: object properties: + active: + description: If the account's Plex Pass subscription is active + type: boolean + example: true features: description: List of features allowed on your Plex Pass subscription type: array items: - type: string - description: | + description: |- - Android - Dolby Vision - Android - PiP - CU Sunset @@ -16746,94 +62722,91 @@ components: - chromecast-music-mp - Sync v3 - livetv-platform-specific - - nonAnonymousAccount - - parental-controls - - Subtitles on Demand - - ultrablur - - web-desktop-gracenote-banner - active: - description: If the account's Plex Pass subscription is active - type: boolean - example: true - subscribedAt: - description: Date the account subscribed to Plex Pass + - nonAnonymousAccount + - parental-controls + - Subtitles on Demand + - ultrablur + - web-desktop-gracenote-banner + type: string + paymentService: + description: Payment service used for your Plex Pass subscription + type: + - string + - 'null' + plan: + description: Name of Plex Pass subscription plan type: - string - 'null' - example: '2021-04-12T18:21:12Z' status: description: String representation of subscriptionActive - example: Inactive - x-speakeasy-unknown-values: allow + type: string enum: - Inactive - Active - paymentService: - description: Payment service used for your Plex Pass subscription - type: - - string - - 'null' - plan: - description: Name of Plex Pass subscription plan + example: Inactive + x-speakeasy-unknown-values: allow + subscribedAt: + description: Date the account subscribed to Plex Pass type: - string - 'null' + example: "2021-04-12T18:21:12Z" thumb: - type: string description: URL of the account thumbnail - format: uri - example: 'https://plex.tv/users/a4f43c1ebfde43a5/avatar?c=8372075101' - title: type: string - description: The title of the account (username or friendly name) - example: UsernameTitle + format: uri + example: https://plex.tv/users/a4f43c1ebfde43a5/avatar?c=8372075101 twoFactorEnabled: - type: boolean description: If two-factor authentication is enabled + type: boolean default: false username: - type: string description: The account username + type: string example: Username uuid: - type: string description: The account UUID + type: string example: dae343c1f45beb4f - attributionPartner: - type: - - string - - 'null' - example: null - PlexDateTime: - type: - - integer - example: 1556281940 - description: Unix epoch datetime in seconds - format: int64 + required: + - authToken + - email + - friendlyName + - hasPassword + - id + - joinedAt + - title + - twoFactorEnabled + - username + - uuid + x-speakeasy-unknown-fields: true UserProfile: title: UserProfile type: object - required: - - autoSelectAudio - - defaultAudioLanguage - - defaultSubtitleLanguage - - autoSelectSubtitle - - defaultSubtitleAccessibility - - defaultSubtitleForced - - watchedIndicator - - mediaReviewsVisibility + example: + autoSelectAudio: true properties: autoSelectAudio: description: If the account has automatically select audio and subtitle tracks enabled type: boolean - example: true default: true - defaultAudioLanguage: - description: The preferred audio language for the account - type: - - string - - 'null' - example: ja + example: true + autoSelectSubtitle: + allOf: + - type: integer + format: int32 + enum: + - 0 + - 1 + - 2 + default: 0 + example: 1 + x-speakeasy-enums: + - MANUALLY_SELECTED + - SHOWN_WITH_FOREIGN_AUDIO + - ALWAYS_ENABLED + - description: The auto-select subtitle mode (0 = Manually selected, 1 = Shown with foreign audio, 2 = Always enabled) defaultAudioAccessibility: allOf: - type: integer @@ -16843,51 +62816,28 @@ components: - 1 - 2 - 3 - example: 0 default: 0 + example: 0 x-speakeasy-enums: - PREFER_NON_ACCESSIBILITY - PREFER_ACCESSIBILITY - ONLY_ACCESSIBILITY - ONLY_NON_ACCESSIBILITY - - description: 'The audio accessibility mode (0 = Prefer non-accessibility audio, 1 = Prefer accessibility audio, 2 = Only show accessibility audio, 3 = Only show non-accessibility audio)' - defaultAudioLanguages: - description: The preferred audio languages for the account - type: - - array - - 'null' - items: - type: string - example: null - defaultSubtitleLanguage: - description: The preferred subtitle language for the account + - description: The audio accessibility mode (0 = Prefer non-accessibility audio, 1 = Prefer accessibility audio, 2 = Only show accessibility audio, 3 = Only show non-accessibility audio) + defaultAudioLanguage: + description: The preferred audio language for the account type: - string - 'null' - example: en - defaultSubtitleLanguages: - description: The preferred subtitle languages for the account + example: ja + defaultAudioLanguages: + description: The preferred audio languages for the account type: - array - 'null' + example: null items: type: string - example: null - autoSelectSubtitle: - allOf: - - type: integer - format: int32 - enum: - - 0 - - 1 - - 2 - example: 1 - default: 0 - x-speakeasy-enums: - - MANUALLY_SELECTED - - SHOWN_WITH_FOREIGN_AUDIO - - ALWAYS_ENABLED - - description: 'The auto-select subtitle mode (0 = Manually selected, 1 = Shown with foreign audio, 2 = Always enabled)' defaultSubtitleAccessibility: allOf: - type: integer @@ -16897,14 +62847,14 @@ components: - 1 - 2 - 3 - example: 1 default: 0 + example: 1 x-speakeasy-enums: - PREFER_NON_SDH - PREFER_SDH - ONLY_SDH - ONLY_NON_SDH - - description: 'The subtitles for the deaf or hard-of-hearing (SDH) searches mode (0 = Prefer non-SDH subtitles, 1 = Prefer SDH subtitles, 2 = Only show SDH subtitles, 3 = Only show non-SDH subtitles)' + - description: The subtitles for the deaf or hard-of-hearing (SDH) searches mode (0 = Prefer non-SDH subtitles, 1 = Prefer SDH subtitles, 2 = Only show SDH subtitles, 3 = Only show non-SDH subtitles) defaultSubtitleForced: allOf: - type: integer @@ -16914,15 +62864,37 @@ components: - 1 - 2 - 3 - example: 1 default: 0 + example: 1 x-speakeasy-enums: - PREFER_NON_FORCED - PREFER_FORCED - ONLY_FORCED - ONLY_NON_FORCED - - description: 'The forced subtitles searches mode (0 = Prefer non-forced subtitles, 1 = Prefer forced subtitles, 2 = Only show forced subtitles, 3 = Only show non-forced subtitles)' - watchedIndicator: + - description: The forced subtitles searches mode (0 = Prefer non-forced subtitles, 1 = Prefer forced subtitles, 2 = Only show forced subtitles, 3 = Only show non-forced subtitles) + defaultSubtitleLanguage: + description: The preferred subtitle language for the account + type: + - string + - 'null' + example: en + defaultSubtitleLanguages: + description: The preferred subtitle languages for the account + type: + - array + - 'null' + example: null + items: + type: string + mediaReviewsLanguages: + description: The languages for media reviews visibility + type: + - array + - 'null' + example: null + items: + type: string + mediaReviewsVisibility: allOf: - type: integer format: int32 @@ -16931,15 +62903,15 @@ components: - 1 - 2 - 3 - example: 1 default: 0 + example: 1 x-speakeasy-enums: - - NONE - - MOVIES_AND_TV_SHOWS - - MOVIES - - TV_SHOWS - - description: Whether or not media watched indicators are enabled (little orange dot on media) - mediaReviewsVisibility: + - NO_ONE + - CRITICS_ONLY + - PLEX_USERS_ONLY + - PLEX_USERS_AND_CRITICS + - description: Whether or not the account has media reviews visibility enabled + watchedIndicator: allOf: - type: integer format: int32 @@ -16948,60 +62920,109 @@ components: - 1 - 2 - 3 - example: 1 default: 0 + example: 1 x-speakeasy-enums: - - NO_ONE - - CRITICS_ONLY - - PLEX_USERS_ONLY - - PLEX_USERS_AND_CRITICS - - description: Whether or not the account has media reviews visibility enabled - mediaReviewsLanguages: - description: The languages for media reviews visibility - type: - - array - - 'null' - items: - type: string - example: null - MediaQuery: - description: | - A querystring-based filtering language used to select subsets of media. When provided as an object, properties are serialized as a querystring using form style with explode. - - Only the defined properties below are allowed. The object serializes to a querystring format like: `type=4&sourceType=2&sort=duration:desc,index` + - NONE + - MOVIES_AND_TV_SHOWS + - MOVIES + - TV_SHOWS + - description: Whether or not media watched indicators are enabled (little orange dot on media) + required: + - autoSelectAudio + - defaultAudioLanguage + - defaultSubtitleLanguage + - autoSelectSubtitle + - defaultSubtitleAccessibility + - defaultSubtitleForced + - watchedIndicator + - mediaReviewsVisibility + WebhookPayload: + description: Payload delivered by Plex to configured webhook URLs. type: object - additionalProperties: false - properties: - type: - description: | - The type of media to retrieve or filter by. - $ref: '#/components/schemas/MediaType' - sourceType: - description: Change the default level to which fields refer (used with type for hierarchical queries) - type: integer - sort: - description: Field(s) to sort by, with optional modifiers. Use comma to separate multiple fields, and :desc or :nullsLast for modifiers (e.g., "duration:desc,index") - type: string - group: - description: Field to group results by (similar to SQL GROUP BY) - type: string - limit: - description: Maximum number of results to return - type: integer example: - type: 4 - sourceType: 2 - sort: "duration:desc,index" - User: - description: The user playing the content - type: object + Account: + title: string value + id: 1 + thumb: string value + event: media.play + Metadata: {} + owner: true + Player: + title: string value + local: true + publicAddress: string value + uuid: string value + Server: + title: string value + uuid: string value + user: true properties: - title: - description: The username - type: string - id: - description: The id of the user - type: string - thumb: - description: Thumb image to display for the user + Account: + type: object + properties: + title: + type: string + example: Plex User + id: + type: integer + example: 1 + thumb: + type: string + example: https://plex.tv/users/1/thumb + event: + description: Event type that triggered the webhook. type: string + enum: + - media.play + - media.pause + - media.resume + - media.stop + - media.scrobble + - media.rate + - library.new + - library.on.deck + example: media.play + Metadata: + description: The media item associated with the event. Shape varies by event type. + type: object + owner: + type: boolean + example: true + Player: + type: object + properties: + title: + type: string + example: Chrome + local: + type: boolean + example: true + publicAddress: + type: string + example: 192.168.1.100 + uuid: + type: string + example: player-uuid-123 + Server: + type: object + properties: + title: + type: string + example: My Server + uuid: + type: string + example: 5d776d057ae4e7001f65e7d0 + user: + type: boolean + example: true +x-speakeasy-retries: + backoff: + exponent: 2 + initialInterval: 1000 + maxElapsedTime: 300000 + maxInterval: 30000 + retryConnectionErrors: true + statusCodes: + - '429' + strategy: backoff diff --git a/workflows/README.md b/workflows/README.md new file mode 100644 index 000000000..3024e33b6 --- /dev/null +++ b/workflows/README.md @@ -0,0 +1,65 @@ +# Plex API Arazzo Workflows + +This directory contains [Arazzo 1.0.0](https://spec.openapis.org/arazzo/latest.html) workflow documents that describe common multi-step API interactions against a Plex Media Server. These workflows are designed for testing, documentation, and automation use cases. + +## Prerequisites + +- A running Plex Media Server (local or remote) +- A valid `X-Plex-Token` for authentication +- The [Plex API OpenAPI specification](../plex-api-spec.yaml) in the parent directory + +## Workflow Files + +| Workflow | File | Description | Steps | +|----------|------|-------------|-------| +| **Server Health Check** | `server-health-check.yaml` | Verifies server identity, features, and info | 3 | +| **Browse Library** | `browse-library.yaml` | Lists library sections then items within a section | 2 | +| **Search & Discover** | `search-and-discover.yaml` | Searches hubs, Discover, and recently added | 3 | +| **Manage Playlists** | `manage-playlists.yaml` | Lists playlists, creates new ones, gets watchlist | 3 | +| **Live TV Guide** | `live-tv-guide.yaml` | Lists DVRs, searches EPG, lists recordings | 3 | +| **User Management** | `user-management.yaml` | Gets account, home users, and server resources | 3 | + +## Common Inputs + +All workflows accept these inputs: + +| Input | Type | Required | Description | +|-------|------|----------|-------------| +| `plexToken` | `string` | Yes | X-Plex-Token for authenticated requests | +| `baseUrl` | `string` | No | Plex server base URL (default: `http://localhost:32400`) | + +## Usage with Arbiter + +These workflows can be executed using the [Arbiter](https://github.com/LukasParke/arbiter) proxy's replay capabilities or any Arazzo-compatible test runner: + +```bash +# Example: run the health check workflow +# (requires an Arazzo-compatible test runner) +``` + +## Workflow Structure + +Each workflow follows the Arazzo specification: + +- **`sourceDescriptions`** — References the Plex API OpenAPI spec +- **`workflows`** — Array of workflow definitions + - **`workflowId`** — Unique identifier + - **`inputs`** — JSON Schema for workflow parameters + - **`steps`** — Ordered sequence of API operations + - **`operationId`** — References an operation in the OpenAPI spec + - **`parameters`** — Maps inputs to operation parameters + - **`successCriteria`** — Runtime expressions for validation + - **`outputs`** — Captures response data for downstream steps + - **`outputs`** — Final workflow results + +## Extending Workflows + +To create a new workflow: + +1. Copy an existing workflow file as a template +2. Define your `workflowId`, `summary`, and `description` +3. Specify required `inputs` +4. Add `steps` referencing operations from the Plex API spec +5. Use `$steps..outputs.` to pass data between steps + +See the [Arazzo specification](https://spec.openapis.org/arazzo/latest.html) for full syntax details. diff --git a/workflows/browse-library.yaml b/workflows/browse-library.yaml new file mode 100644 index 000000000..29b0e7536 --- /dev/null +++ b/workflows/browse-library.yaml @@ -0,0 +1,86 @@ +arazzo: '1.0.0' +info: + title: Browse Plex Library + version: 1.0.0 + description: | + Navigates a Plex Media Server library by listing available sections + and then retrieving the items within a specific section. This workflow + demonstrates the common pattern of discovering content hierarchies. + +sourceDescriptions: + - name: plex-api + url: ../plex-api-spec.yaml + type: openapi + +workflows: + - workflowId: browseLibrary + summary: Discover library sections and list their contents + description: | + Two-step workflow: + 1. Retrieve all library sections (Movies, TV Shows, Music, etc.) + 2. List all items within a selected section + inputs: + type: object + properties: + plexToken: + type: string + description: X-Plex-Token for authenticated requests + baseUrl: + type: string + description: Base URL of the Plex server + default: http://localhost:32400 + sectionKey: + type: integer + description: Optional specific section key to browse (if omitted, uses first available) + required: + - plexToken + - baseUrl + steps: + - stepId: listSections + description: Retrieve all library sections from the server + operationId: $sourceDescriptions.plex-api.getSections + parameters: + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body.MediaContainer.size > 0 + outputs: + sections: $response.body.MediaContainer.Directory + firstSectionKey: $response.body.MediaContainer.Directory[0].key + firstSectionTitle: $response.body.MediaContainer.Directory[0].title + + - stepId: listSectionItems + description: List all items in the selected or first available section + operationId: $sourceDescriptions.plex-api.getLibraryItems + parameters: + - name: sectionKey + in: path + value: > + ${ + $inputs.sectionKey != null + ? $inputs.sectionKey + : $steps.listSections.outputs.firstSectionKey + } + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + outputs: + itemCount: $response.body.MediaContainer.size + items: $response.body.MediaContainer.Metadata + sectionTitle: $steps.listSections.outputs.firstSectionTitle + + outputs: + sections: $steps.listSections.outputs.sections + selectedSectionKey: > + ${ + $inputs.sectionKey != null + ? $inputs.sectionKey + : $steps.listSections.outputs.firstSectionKey + } + selectedSectionTitle: $steps.listSectionItems.outputs.sectionTitle + itemCount: $steps.listSectionItems.outputs.itemCount + items: $steps.listSectionItems.outputs.items diff --git a/workflows/live-tv-guide.yaml b/workflows/live-tv-guide.yaml new file mode 100644 index 000000000..d00906492 --- /dev/null +++ b/workflows/live-tv-guide.yaml @@ -0,0 +1,92 @@ +arazzo: '1.0.0' +info: + title: Live TV and DVR Workflow + version: 1.0.0 + description: | + Manages Live TV and DVR functionality including retrieving DVR devices, + browsing the electronic program guide (EPG), and listing recordings. + +sourceDescriptions: + - name: plex-api + url: ../plex-api-spec.yaml + type: openapi + +workflows: + - workflowId: liveTvGuide + summary: Browse Live TV guide and DVR recordings + description: | + Three-step workflow: + 1. List available DVR devices + 2. Search the EPG for upcoming programs + 3. List existing DVR recordings + inputs: + type: object + properties: + plexToken: + type: string + description: X-Plex-Token for authenticated requests + baseUrl: + type: string + description: Base URL of the Plex server + default: http://localhost:32400 + epgQuery: + type: string + description: Optional search term for EPG (channel name, show title) + required: + - plexToken + - baseUrl + steps: + - stepId: listDVRs + description: Retrieve all configured DVR devices + operationId: $sourceDescriptions.plex-api.listDVRs + parameters: + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + outputs: + dvrs: $response.body.MediaContainer.Dvr + dvrCount: $response.body.MediaContainer.size + + - stepId: searchEPG + description: Search the electronic program guide + operationId: $sourceDescriptions.plex-api.searchEPG + parameters: + - name: query + in: query + value: > + ${ + $inputs.epgQuery != null + ? $inputs.epgQuery + : '' + } + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + outputs: + epgResults: $response.body.MediaContainer.Hub + epgResultCount: $response.body.MediaContainer.size + + - stepId: getRecordings + description: List all DVR recordings + operationId: $sourceDescriptions.plex-api.getDVRRecordings + parameters: + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + outputs: + recordings: $response.body.MediaContainer.Video + recordingCount: $response.body.MediaContainer.size + + outputs: + dvrs: $steps.listDVRs.outputs.dvrs + dvrCount: $steps.listDVRs.outputs.dvrCount + epgResults: $steps.searchEPG.outputs.epgResults + epgResultCount: $steps.searchEPG.outputs.epgResultCount + recordings: $steps.getRecordings.outputs.recordings + recordingCount: $steps.getRecordings.outputs.recordingCount diff --git a/workflows/manage-playlists.yaml b/workflows/manage-playlists.yaml new file mode 100644 index 000000000..379b65ed0 --- /dev/null +++ b/workflows/manage-playlists.yaml @@ -0,0 +1,95 @@ +arazzo: '1.0.0' +info: + title: Manage Plex Playlists + version: 1.0.0 + description: | + Demonstrates playlist management operations including listing existing + playlists, creating a new playlist, and retrieving playlist details. + +sourceDescriptions: + - name: plex-api + url: ../plex-api-spec.yaml + type: openapi + +workflows: + - workflowId: managePlaylists + summary: List, create, and inspect playlists + description: | + Three-step workflow: + 1. List all existing playlists + 2. Create a new playlist (if title is provided) + 3. Retrieve watchlist for the user + inputs: + type: object + properties: + plexToken: + type: string + description: X-Plex-Token for authenticated requests + baseUrl: + type: string + description: Base URL of the Plex server + default: http://localhost:32400 + newPlaylistTitle: + type: string + description: Optional title for a new playlist to create + required: + - plexToken + - baseUrl + steps: + - stepId: listPlaylists + description: Retrieve all playlists for the current user + operationId: $sourceDescriptions.plex-api.listPlaylists + parameters: + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + outputs: + playlists: $response.body.MediaContainer.Playlist + playlistCount: $response.body.MediaContainer.size + + - stepId: createPlaylist + description: Create a new playlist if a title is provided + operationId: $sourceDescriptions.plex-api.createPlaylist + parameters: + - name: title + in: query + value: $inputs.newPlaylistTitle + - name: type + in: query + value: video + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + - condition: $inputs.newPlaylistTitle != null + onFailure: + - name: skipIfNoTitle + type: goto + stepId: getWatchlist + criteria: + - condition: $inputs.newPlaylistTitle == null + outputs: + newPlaylistKey: $response.body.MediaContainer.Playlist[0].ratingKey + + - stepId: getWatchlist + description: Retrieve the user's watchlist + operationId: $sourceDescriptions.plex-api.getWatchlist + parameters: + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + outputs: + watchlistItems: $response.body.MediaContainer.Metadata + watchlistCount: $response.body.MediaContainer.size + + outputs: + playlists: $steps.listPlaylists.outputs.playlists + playlistCount: $steps.listPlaylists.outputs.playlistCount + newPlaylistKey: $steps.createPlaylist.outputs.newPlaylistKey + watchlistItems: $steps.getWatchlist.outputs.watchlistItems + watchlistCount: $steps.getWatchlist.outputs.watchlistCount diff --git a/workflows/search-and-discover.yaml b/workflows/search-and-discover.yaml new file mode 100644 index 000000000..7200ae095 --- /dev/null +++ b/workflows/search-and-discover.yaml @@ -0,0 +1,87 @@ +arazzo: '1.0.0' +info: + title: Search and Discover Content + version: 1.0.0 + description: | + Searches for content across Plex hubs and the Discover service, + then retrieves detailed metadata for the first matching result. + +sourceDescriptions: + - name: plex-api + url: ../plex-api-spec.yaml + type: openapi + +workflows: + - workflowId: searchAndDiscover + summary: Search for media and retrieve metadata + description: | + Three-step workflow: + 1. Search across all hubs for a query term + 2. Search the Discover service for broader results + 3. Retrieve detailed metadata for the first result + inputs: + type: object + properties: + plexToken: + type: string + description: X-Plex-Token for authenticated requests + baseUrl: + type: string + description: Base URL of the Plex server + default: http://localhost:32400 + query: + type: string + description: Search query term (movie title, show name, artist, etc.) + required: + - plexToken + - baseUrl + - query + steps: + - stepId: searchHubs + description: Search across all Plex hubs + operationId: $sourceDescriptions.plex-api.searchHubs + parameters: + - name: query + in: query + value: $inputs.query + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + outputs: + hubResults: $response.body.MediaContainer.Hub + totalResults: $response.body.MediaContainer.size + + - stepId: searchDiscover + description: Search the Discover service for additional results + operationId: $sourceDescriptions.plex-api.searchDiscover + parameters: + - name: query + in: query + value: $inputs.query + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + outputs: + discoverResults: $response.body.MediaContainer.SearchResult + + - stepId: getRecentlyAdded + description: Get recently added content as a fallback discovery method + operationId: $sourceDescriptions.plex-api.getRecentlyAddedGlobal + parameters: + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + outputs: + recentlyAdded: $response.body.MediaContainer.Metadata + + outputs: + hubResults: $steps.searchHubs.outputs.hubResults + totalResults: $steps.searchHubs.outputs.totalResults + discoverResults: $steps.searchDiscover.outputs.discoverResults + recentlyAdded: $steps.getRecentlyAdded.outputs.recentlyAdded diff --git a/workflows/server-health-check.yaml b/workflows/server-health-check.yaml new file mode 100644 index 000000000..a7c92454d --- /dev/null +++ b/workflows/server-health-check.yaml @@ -0,0 +1,85 @@ +arazzo: '1.0.0' +info: + title: Plex Server Health Check + version: 1.0.0 + description: | + Verifies that a Plex Media Server is online and accessible by checking + its identity, capabilities, and features. This workflow is useful for + monitoring, CI/CD health checks, and onboarding validation. + +sourceDescriptions: + - name: plex-api + url: ../plex-api-spec.yaml + type: openapi + +workflows: + - workflowId: healthCheck + summary: Check Plex server health and capabilities + description: | + Performs a lightweight health check against a Plex Media Server. + Steps: + 1. Verify the server identity (name, version, machine ID) + 2. Retrieve server features and capabilities + 3. Verify the server responds with valid data + inputs: + type: object + properties: + plexToken: + type: string + description: X-Plex-Token for authenticated requests + baseUrl: + type: string + description: Base URL of the Plex server (e.g., http://localhost:32400) + default: http://localhost:32400 + required: + - plexToken + - baseUrl + steps: + - stepId: checkIdentity + description: Verify the server identity endpoint responds + operationId: $sourceDescriptions.plex-api.getIdentity + parameters: + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body.machineIdentifier != null + outputs: + serverName: $response.body.MediaContainer.friendlyName + serverVersion: $response.body.MediaContainer.version + machineIdentifier: $response.body.MediaContainer.machineIdentifier + + - stepId: checkFeatures + description: Retrieve server features to validate capability set + operationId: $sourceDescriptions.plex-api.getFeatures + parameters: + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + outputs: + featuresCount: $response.body.MediaContainer.size + + - stepId: checkServerInfo + description: Get detailed server information + operationId: $sourceDescriptions.plex-api.getServerInfo + parameters: + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body.MediaContainer.machineIdentifier == $steps.checkIdentity.outputs.machineIdentifier + outputs: + platform: $response.body.MediaContainer.platform + platformVersion: $response.body.MediaContainer.platformVersion + + outputs: + healthy: true + serverName: $steps.checkIdentity.outputs.serverName + serverVersion: $steps.checkIdentity.outputs.serverVersion + machineIdentifier: $steps.checkIdentity.outputs.machineIdentifier + platform: $steps.checkServerInfo.outputs.platform + featuresCount: $steps.checkFeatures.outputs.featuresCount diff --git a/workflows/user-management.yaml b/workflows/user-management.yaml new file mode 100644 index 000000000..496494b73 --- /dev/null +++ b/workflows/user-management.yaml @@ -0,0 +1,86 @@ +arazzo: '1.0.0' +info: + title: Plex User and Account Management + version: 1.0.0 + description: | + Manages Plex user accounts, home users, and server access including + retrieving account details, listing home users, and checking server resources. + +sourceDescriptions: + - name: plex-api + url: ../plex-api-spec.yaml + type: openapi + +workflows: + - workflowId: userManagement + summary: Inspect user accounts and server access + description: | + Three-step workflow: + 1. Get the authenticated user's MyPlex account details + 2. List all home users associated with the account + 3. Retrieve available server resources + inputs: + type: object + properties: + plexToken: + type: string + description: X-Plex-Token for authenticated requests + baseUrl: + type: string + description: Base URL of the Plex server + default: http://localhost:32400 + required: + - plexToken + - baseUrl + steps: + - stepId: getAccount + description: Retrieve the current user's MyPlex account + operationId: $sourceDescriptions.plex-api.getMyPlexAccount + parameters: + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + - condition: $response.body.user.id != null + outputs: + accountId: $response.body.user.id + accountUsername: $response.body.user.username + accountEmail: $response.body.user.email + accountSubscription: $response.body.user.subscription.active + + - stepId: listHomeUsers + description: List all home users managed by this account + operationId: $sourceDescriptions.plex-api.getHomeUsers + parameters: + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + outputs: + homeUsers: $response.body.MediaContainer.User + homeUserCount: $response.body.MediaContainer.size + + - stepId: getServerResources + description: Retrieve available Plex server resources + operationId: $sourceDescriptions.plex-api.getServerResources + parameters: + - name: X-Plex-Token + in: header + value: $inputs.plexToken + successCriteria: + - condition: $statusCode == 200 + outputs: + servers: $response.body + serverCount: $response.body.length + + outputs: + accountId: $steps.getAccount.outputs.accountId + accountUsername: $steps.getAccount.outputs.accountUsername + accountEmail: $steps.getAccount.outputs.accountEmail + accountSubscription: $steps.getAccount.outputs.accountSubscription + homeUsers: $steps.listHomeUsers.outputs.homeUsers + homeUserCount: $steps.listHomeUsers.outputs.homeUserCount + servers: $steps.getServerResources.outputs.servers + serverCount: $steps.getServerResources.outputs.serverCount